diff --git a/INSTALL.md b/INSTALL.md
index 7ef1fe56..5ad2de65 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -19,7 +19,9 @@ Django-orchestra can be installed on any Linux system, however it is **strongly
2. Install django-orchestra's source code
```bash
sudo apt-get install python3-pip
- sudo pip3 install django-orchestra==dev
+ sudo pip3 install django-orchestra==dev \
+ --allow-external django-orchestra \
+ --allow-unverified django-orchestra
```
3. Install requirements
@@ -42,17 +44,12 @@ Django-orchestra can be installed on any Linux system, however it is **strongly
```
-6. See the Django deployment checklist
- ```bash
- python3 panel/manage.py check --deploy
- ```
-
6. Configure periodic execution of tasks (choose one)
1. Use cron
```bash
python3 manage.py setupcronbeat
- python3 panel/manage.py syncperiodictasks
+ python3 manage.py syncperiodictasks
```
2. Use celeryd
@@ -73,6 +70,10 @@ Django-orchestra can be installed on any Linux system, however it is **strongly
sudo python3 manage.py setupnginx --user orchestra
```
+6. See the Django deployment checklist
+ ```bash
+ python3 manage.py check --deploy
+ ```
9. Start all services:
```bash
diff --git a/TODO.md b/TODO.md
index 3d8e37e0..5e27b7cc 100644
--- a/TODO.md
+++ b/TODO.md
@@ -393,25 +393,19 @@ Case
+deploy --dev
+deploy.sh and deploy-dev.sh autoupgrade
+chown orchestra:orchestra /home/orchestra/panel/orchestra.log
+orchestra home autocomplete
-CommandError:
-run() encountered an error (return code 2) while executing 'su postgres -c "psql -c \"CREATE USER orchestra PASSWORD 'pane';\""'
- b'could not change directory to "/home/orchestra/panel": Permission denied\npsql: could not connect to server: No such file or directory\n\tIs the server running locally and accepting\n\tconnections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?'
+short URLS: https://github.com/rsvp/gitio
+link backend help text variables to settings/#var_name
+saas changelist domain: add
custom domain
- warning: no previously-included files matching '__pycache__' found under directory '*'
- warning: no previously-included files matching '*~' found under directory '*'
- warning: no previously-included files matching '*.save' found under directory '*'
- changing mode of build/scripts-3.4/orchestra-beat from 644 to 755
- changing mode of /usr/local/bin/orchestra-admin to 755
- changing mode of /usr/local/bin/orchestra-beat to 755
- File "/usr/local/lib/python3.4/dist-packages/orchestra/getips.py", line 15
- print sliver['mgmt_net']['address']
- ^
- SyntaxError: Missing parentheses in call to 'print'
-
- File "/usr/local/lib/python3.4/dist-packages/orchestra/management/commands/setupnginx.py", line 234
- "it? (yes/no): " % context)
- ^
- SyntaxError: invalid syntax
+ $ sudo python manage.py startservices
+Traceback (most recent call last):
+ File "manage.py", line 8, in
+ from django.core.management import execute_from_command_line
+ImportError: No module named django.core.management
diff --git a/scripts/containers/deploy-dev.sh b/scripts/containers/deploy-dev.sh
new file mode 100755
index 00000000..7891e69b
--- /dev/null
+++ b/scripts/containers/deploy-dev.sh
@@ -0,0 +1,152 @@
+#!/bin/bash
+
+# Automated development deployment of django-orchestra
+
+# This script is safe to run several times, for example in order to upgrade your deployment
+
+set -ue
+
+function main () {
+
+
+bold=$(tput -T ${TERM:-xterm} bold)
+normal=$(tput -T ${TERM:-xterm} sgr0)
+
+surun () {
+ echo " ${bold}\$ su $USER -c \"${@}\"${normal}"
+ su $USER -c "${@}"
+}
+
+
+run () {
+ echo " ${bold}\$ ${@}${normal}"
+ ${@}
+}
+
+
+[ $(whoami) != 'root' ] && {
+ echo -e "\nErr. This script should run as root\n" >&2
+ exit 1
+}
+
+USER='orchestra'
+PASSWORD='orchestra'
+HOME="/home/$USER"
+PROJECT_NAME='panel'
+BASE_DIR="$HOME/$PROJECT_NAME"
+MANAGE="$BASE_DIR/manage.py"
+PYTHON_BIN="python3"
+CELERY=false
+
+
+# Create a system user for running Orchestra
+useradd $USER -s "/bin/bash" || true
+echo "$USER:$PASSWORD" | chpasswd
+mkdir -p $HOME
+chown $USER.$USER $HOME
+groups $USER | grep -E "(^|\s)$USER($|\s)" > /dev/null || run adduser $USER sudo
+
+
+CURRENT_VERSION=$($PYTHON_BIN -c "from orchestra import get_version; print(get_version());" 2> /dev/null || false) || true
+if [[ ! $CURRENT_VERSION ]]; then
+ # First Orchestra installation
+ run "apt-get -y install git python3-pip"
+ surun "git clone https://github.com/glic3rinu/django-orchestra.git ~/django-orchestra" || {
+ # Finishing partial installation
+ surun "export GIT_DIR=~/django-orchestra/.git; git pull"
+ }
+ PYTHON_PATH=$($PYTHON_BIN -c "import sys; print([path for path in sys.path if path.startswith('/usr/local/lib/python')][0]);")
+ echo $HOME/django-orchestra/ | sudo tee "$PYTHON_PATH/orchestra.pth"
+fi
+
+run "cp $HOME/django-orchestra/orchestra/bin/orchestra-admin /usr/local/bin/"
+run "cp $HOME/django-orchestra/orchestra/bin/orchestra-beat /usr/local/bin/"
+
+sudo orchestra-admin install_requirements --testing
+
+if [[ ! -e $BASE_DIR ]]; then
+ cd $HOME
+ surun "orchestra-admin startproject $PROJECT_NAME"
+ cd -
+else
+ echo "$BASE_DIR already existis, doing nothing."
+fi
+
+
+run "apt-get -y install postgresql"
+if [[ ! $(sudo su postgres -c "psql -lqt" | awk {'print $1'} | grep '^orchestra$') ]]; then
+ # orchestra database does not exists
+ # Speeding up tests, don't do this in production!
+ . /usr/share/postgresql-common/init.d-functions
+ POSTGRES_VERSION=$(psql --version | head -n1 | sed -r "s/^.*\s([0-9]+\.[0-9]+).*/\1/")
+ sed -i "s/^#fsync =\s*.*/fsync = off/" \
+ /etc/postgresql/${POSTGRES_VERSION}/main/postgresql.conf
+ sed -i "s/^#full_page_writes =\s*.*/full_page_writes = off/" \
+ /etc/postgresql/${POSTGRES_VERSION}/main/postgresql.conf
+
+ run "service postgresql restart"
+ run "$PYTHON_BIN $MANAGE setuppostgres --db_name orchestra --db_user orchestra --db_password orchestra"
+ # Create database permissions are needed for running tests
+ sudo su postgres -c 'psql -c "ALTER USER orchestra CREATEDB;"'
+fi
+
+# create logfile
+surun "$PYTHON_BIN $MANAGE setuplog --noinput"
+
+
+# admin_tools needs accounts and does not have migrations
+if [[ ! $(sudo su postgres -c "psql orchestra -q -c 'SELECT * FROM accounts_account LIMIT 1;' 2> /dev/null") ]]; then
+ surun "$PYTHON_BIN $MANAGE migrate --noinput"
+else
+ surun "$PYTHON_BIN $MANAGE postupgradeorchestra --from $CURRENT_VERSION"
+fi
+
+
+if [[ $CELERY == true ]]; then
+ run apt-get install -y rabbitmq
+ sudo $PYTHON_BIN $MANAGE setupcelery --username $USER --processes 2
+else
+ surun "$PYTHON_BIN $MANAGE setupcronbeat"
+ surun "$PYTHON_BIN $MANAGE syncperiodictasks"
+fi
+
+
+# Install and configure Nginx+uwsgi web services
+surun "mkdir -p $BASE_DIR/static"
+surun "$PYTHON_BIN $MANAGE collectstatic --noinput"
+run "apt-get install -y nginx uwsgi uwsgi-plugin-python3"
+run "$PYTHON_BIN $MANAGE setupnginx --user $USER --noinput"
+run "service nginx start"
+
+# Apply changes on related services
+run "$PYTHON_BIN $MANAGE restartservices" || true
+
+# Create orchestra superuser
+cat <<- EOF | $PYTHON_BIN $MANAGE shell
+from orchestra.contrib.accounts.models import Account
+if not Account.objects.filter(username="$USER").exists():
+ print('Creating orchestra superuser')
+ Account.objects.create_superuser("$USER", "$USER@localhost", "$PASSWORD")
+
+EOF
+
+# Change to development settings
+PRODUCTION="from orchestra.conf.production_settings import \*"
+DEVEL="from orchestra.conf.devel_settings import \*"
+sed -i "s/^$PRODUCTION/# $PRODUCTION/" $BASE_DIR/$PROJECT_NAME/settings.py
+sed -i "s/^#\s*$DEVEL/$DEVEL/" $BASE_DIR/$PROJECT_NAME/settings.py
+
+
+cat << EOF
+
+${bold}
+ * Admin interface login *
+ - username: $USER
+ - password: $PASSWORD
+${normal}
+EOF
+
+}
+
+# Wrap it all on a function to avoid partial executions when running through wget/curl
+main
diff --git a/scripts/containers/deploy.sh b/scripts/containers/deploy.sh
index 70992d50..6c73bbcb 100644
--- a/scripts/containers/deploy.sh
+++ b/scripts/containers/deploy.sh
@@ -2,6 +2,7 @@
set -ue
+
function main () {
bold=$(tput -T ${TERM:-xterm} bold)
normal=$(tput -T ${TERM:-xterm} sgr0)
@@ -16,55 +17,66 @@ function main () {
${@}
}
+ while true; do
+ read -p "Enter a project name [panel]: " project_name
+ if [[ "$project_name" == "" ]]; then
+ project_name="panel"
+ break
+ elif [[ ! $(echo "$project_name" | grep '^[_a-zA-Z]\w*$') ]]; then
+ if [[ ! $(echo "$project_name" | grep '^[_a-zA-Z]') ]]; then
+ message='make sure the name begins with a letter or underscore'
+ else
+ message='use only numbers, letters and underscores'
+ fi
+ echo "'$project_name' is not a valid %s name. Please $message."
+ else
+ break
+ fi
+ done
+
+ # TODO Password: Password (again):
+
+ read -p "Enter a new database password: " db_password
+
+ while true; do
+ read -p "Do you want to use celery or cronbeat for task execution [cronbeat]?" task
+ case $task in
+ 'celery' ) task=celery; break;;
+ 'cronbeat' ) task=cronbeat; break;;
+ '' ) task=cronbeat; break;;
+ * ) echo "Please answer celery or cronbeat.";;
+ esac
+ done
+
run sudo pip3 install django-orchestra==dev \
--allow-external django-orchestra \
--allow-unverified django-orchestra
run sudo orchestra-admin install_requirements
run cd $(eval echo ~$USER)
- while true; do
- read -p "Enter a project name: " project_name
- if [[ "$project_name" =~ ' ' ]]; then
- echo "Spaces not allowed"
- else
- run orchestra-admin startproject $project_name
- run cd $project_name
- break
- fi
- done
-
- read -p "Enter a new database password: " db_password
+ run orchestra-admin startproject $project_name
+ run cd $project_name
+
+ sudo service postgresql start
run sudo python3 manage.py setuppostgres --db_password "$db_password"
run python3 manage.py migrate
- run python3 panel/manage.py check --deploy
- function cronbeat () {
+ if [[ "$task" == "cronbeat" ]]; then
run python3 manage.py setupcronbeat
- run python3 panel/manage.py syncperiodictasks
- }
-
- function celery () {
+ run python3 manage.py syncperiodictasks
+ else
run sudo apt-get install rabbitmq
run sudo python3 manage.py setupcelery --username $USER
- }
+ fi
- while true; do
- read -p "Do you want to use celery or cronbeat for task execution [cronbeat]?" task
- case $task in
- 'celery' ) celery; break;;
- 'cronbeat' ) cronbeat; break;;
- '' ) cronbeat; break;;
- * ) echo "Please answer celery or cronbeat.";;
- esac
- done
-
- run sudo python3 manage.py setuplog
+ run sudo python3 manage.py setuplog --noinput
run python3 manage.py collectstatic --noinput
run sudo apt-get install nginx-full uwsgi uwsgi-plugin-python3
run sudo python3 manage.py setupnginx --user $USER
run sudo python manage.py startservices
+ run python3 manage.py check --deploy
}
# Wrap it all on a function to avoid partial executions when running through wget/curl