diff --git a/INSTALLDEV.md b/INSTALLDEV.md
index 3b9f78ac..e8a26c73 100644
--- a/INSTALLDEV.md
+++ b/INSTALLDEV.md
@@ -21,7 +21,7 @@ If you are planing to do some development you may want to consider doing it unde
3. Deploy django-orchestra development environment, inside the container
```bash
- bash <( curl -L https://raw.githubusercontent.com/ribaguifi/django-orchestra/master/scripts/containers/orchestra-deploy ) --dev
+ bash <( curl -L https://raw.githubusercontent.com/ribaguifi/django-orchestra/master/scripts/containers/deploy.sh ) --dev
```
3. Nginx should be serving on port 80, but Django's development server can be used as well:
@@ -35,5 +35,5 @@ If you are planing to do some development you may want to consider doing it unde
5. To upgrade to current master just re-run the deploy script
```bash
git pull origin master
- bash <( curl -L https://raw.githubusercontent.com/ribaguifi/django-orchestra/master/scripts/containers/orchestra-deploy ) --dev
+ bash <( curl -L https://raw.githubusercontent.com/ribaguifi/django-orchestra/master/scripts/containers/deploy.sh ) --dev
```
diff --git a/scripts/containers/deploy.sh b/scripts/containers/deploy.sh
index 755e2cdb..45fdde20 100644
--- a/scripts/containers/deploy.sh
+++ b/scripts/containers/deploy.sh
@@ -46,13 +46,16 @@ function install_orchestra () {
if [[ $dev ]]; then
# Install from source
- python_path=$(python3 -c "import sys; print([path for path in sys.path if path.startswith('/usr/local/lib/python')][0]);")
+ python_path=$(python3 -c "import sys; print([path for path in sys.path if path.startswith('/usr/local/lib/python')][1]);")
if [[ -d $python_path/orchestra ]]; then
run sudo rm -fr $python_path/orchestra
fi
- orch_version=$(python3 -c "from orchestra import get_version; print(get_version());" 2> /dev/null)
+ orch_version=$(python3 -c "from orchestra import get_version; print(get_version());" 2> /dev/null || echo '')
if [[ ! $orch_version ]]; then
# First Orchestra installation
+ run sudo mkdir -p /usr/share/man/man1
+ run sudo mkdir -p /usr/share/man/man7
+ run sudo apt-get update
run sudo apt-get -y install git python3-pip
surun "git clone $repo $home/django-orchestra" || {
# Finishing partial installation
@@ -65,13 +68,12 @@ function install_orchestra () {
if [[ -L /usr/local/bin/orchestra-admin || -f /usr/local/bin/orchestra-admin ]]; then
run sudo rm -f /usr/local/bin/{orchestra-admin,orchestra-beat}
fi
- run sudo ln -s $home/django-orchestra/orchestra/bin/orchestra-admin /usr/local/bin/
- run sudo ln -s $home/django-orchestra/orchestra/bin/orchestra-beat /usr/local/bin/
+ run sudo pip3 install -e $home/django-orchestra
run sudo orchestra-admin install_requirements --testing
else
# Install from pip
- run sudo pip3 install http://git.io/django-orchestra-dev
run sudo orchestra-admin install_requirements
+ run sudo pip3 install -e git+https://github.com/ribaguifi/django-orchestra.git#egg=django-orchestra
fi
}
@@ -79,12 +81,13 @@ function install_orchestra () {
function setup_database () {
dev=$1
noinput=$2
- run sudo apt-get install -y postgresql python3-psycopg2
+ run sudo apt-get install -y postgresql
+ run sudo pip install psycopg2
# Setup Database
if [[ $dev ]]; then
# Speeding up tests, don't do this in production!
. /usr/share/postgresql-common/init.d-functions
- pg_version=$(psql --version | head -n1 | sed -r "s/^.*\s([0-9]+\.[0-9]+).*/\1/")
+ pg_version=$(psql --version | head -n1 | awk '{print $3}' | sed -e "s,\..*,,")
sudo sed -i \
-e "s/^#fsync =\s*.*/fsync = off/" \
-e "s/^#full_page_writes =\s*.*/full_page_writes = off/" \
@@ -170,7 +173,7 @@ function main () {
dev=
noinput=
user=$(whoami)
- repo='https://github.com/glic3rinu/django-orchestra.git'
+ repo='https://github.com/ribaguifi/django-orchestra.git'
brepo=
project_name="panel"
bproject_name=
diff --git a/scripts/containers/orchestra-deploy b/scripts/containers/orchestra-deploy
deleted file mode 100644
index 45fdde20..00000000
--- a/scripts/containers/orchestra-deploy
+++ /dev/null
@@ -1,306 +0,0 @@
-#!/bin/bash
-
-set -ue
-
-# https://git.io/deploy-orchestra
-# bash <( curl https://raw.githubusercontent.com/glic3rinu/django-orchestra/master/scripts/containers/deploy.sh ) [--noinput username]
-
-
-bold=$(tput -T ${TERM:-xterm} bold)
-normal=$(tput -T ${TERM:-xterm} sgr0)
-
-
-function test_orchestra () {
- user=$1
- ip_addr=$2
- # Test if serving requests
- echo
- echo ${bold}
- echo "> Checking if Orchestra is serving on https://${ip_addr}/admin/ ..."
- if [[ $noinput ]]; then
- echo " - username: $user"
- echo " - password: orchestra${normal}"
- fi
- echo
- if [[ $(curl -s -L -k -c /tmp/cookies.txt -b /tmp/cookies.txt https://$ip_addr/admin/ | grep 'Panel Hosting Management') ]]; then
- token=$(grep csrftoken /tmp/cookies.txt | awk {'print $7'})
- if [[ $(curl -s -L -k -c /tmp/cookies.txt -b /tmp/cookies.txt \
- -d "username=$user&password=orchestra&csrfmiddlewaretoken=$token" \
- -e https://$ip_addr/admin/ \
- https://$ip_addr/admin/login/?next=/admin/ | grep '
Panel Hosting Management') ]]; then
- echo "${bold} ** Orchestra appears to be working!${normal}"
- else
- echo "${bold} ** Err. Couldn't login :(${normal}" >&2
- fi
- else
- echo "${bold} ** Err. Orchestra is not responding responding on https://${ip_addr}/admin/${normal}" >&2
- fi
- echo
-}
-
-
-function install_orchestra () {
- dev=$1
- home=$2
- repo=$3
-
- if [[ $dev ]]; then
- # Install from source
- python_path=$(python3 -c "import sys; print([path for path in sys.path if path.startswith('/usr/local/lib/python')][1]);")
- if [[ -d $python_path/orchestra ]]; then
- run sudo rm -fr $python_path/orchestra
- fi
- orch_version=$(python3 -c "from orchestra import get_version; print(get_version());" 2> /dev/null || echo '')
- if [[ ! $orch_version ]]; then
- # First Orchestra installation
- run sudo mkdir -p /usr/share/man/man1
- run sudo mkdir -p /usr/share/man/man7
- run sudo apt-get update
- run sudo apt-get -y install git python3-pip
- surun "git clone $repo $home/django-orchestra" || {
- # Finishing partial installation
- surun "export GIT_DIR=$home/django-orchestra/.git; git pull"
- }
- echo $home/django-orchestra/ | sudo tee "$python_path/orchestra.pth"
- else
- echo "You may want to execute 'git pull origin master'?"
- fi
- if [[ -L /usr/local/bin/orchestra-admin || -f /usr/local/bin/orchestra-admin ]]; then
- run sudo rm -f /usr/local/bin/{orchestra-admin,orchestra-beat}
- fi
- run sudo pip3 install -e $home/django-orchestra
- run sudo orchestra-admin install_requirements --testing
- else
- # Install from pip
- run sudo orchestra-admin install_requirements
- run sudo pip3 install -e git+https://github.com/ribaguifi/django-orchestra.git#egg=django-orchestra
- fi
-}
-
-
-function setup_database () {
- dev=$1
- noinput=$2
- run sudo apt-get install -y postgresql
- run sudo pip install psycopg2
- # Setup Database
- if [[ $dev ]]; then
- # Speeding up tests, don't do this in production!
- . /usr/share/postgresql-common/init.d-functions
- pg_version=$(psql --version | head -n1 | awk '{print $3}' | sed -e "s,\..*,,")
- sudo sed -i \
- -e "s/^#fsync =\s*.*/fsync = off/" \
- -e "s/^#full_page_writes =\s*.*/full_page_writes = off/" \
- /etc/postgresql/${pg_version}/main/postgresql.conf
- fi
- run sudo service postgresql start
- if [[ $noinput ]]; then
- db_password=$(ps aux | sha256sum | base64 | head -c 10)
- run sudo python3 -W ignore manage.py setuppostgres --noinput --db_password $db_password
- else
- run sudo python3 -W ignore manage.py setuppostgres
- fi
- if [[ $dev ]]; then
- # Create database permissions are needed for running tests
- sudo su postgres -c 'psql -c "ALTER USER orchestra CREATEDB;"'
- fi
- surun "python3 -W ignore manage.py migrate $noinput"
-}
-
-
-function create_orchestra_superuser () {
- user=$1
- email=$2
- password=$3
- cat <<- EOF | surun "python3 -W ignore manage.py 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", "$email", "$password")
-
- EOF
-}
-
-
-print_help () {
- cat <<- EOF
-
- ${bold}NAME${normal}
- ${bold}deploy.sh${normal} - Deploy a django-orchestra project
-
- ${bold}SYNOPSIS${normal}
- ${bold}deploy.sh${normal} [--noinput=USERNAME] [--dev] [--repo=GITREPO] [--projectname=NAME]
-
- ${bold}OPTIONS${normal}
- ${bold}-n, --noinput=USERNAME${normal}
- Execute the script without any user input, an existing system USERNAME is required.
- requires the script to be executed as root user
-
- ${bold}-d, --dev${normal}
- Perform a deployment suitable for development:
- 1. debug mode
- 2. dependencies for running tests
- 3. access to source code
-
- ${bold}-r, --repo=GITREPO${normal}
- Chose which repo use for development deployment
- this option requires --dev option to be selected
- https://github.com/glic3rinu/django-orchestra.git is used by default
-
- ${bold}-p, --projectname=NAME${normal}
- Specify a project name, this will be asked on interactive mode
- and name 'panel' will be used otherwise.
-
- ${bold}-h, --help${normal}
- Display this message
-
- ${bold}EXAMPLES${normal}
- deploy.sh
-
- deploy.sh --dev
-
- deploy.sh --dev --noinput orchestra
-
- EOF
-}
-
-
-function main () {
- # Input validation
- opts=$(getopt -o n:dr:h -l noinput:,dev,repo:,help -- "$@") || exit 1
- set -- $opts
-
- dev=
- noinput=
- user=$(whoami)
- repo='https://github.com/ribaguifi/django-orchestra.git'
- brepo=
- project_name="panel"
- bproject_name=
-
- while [ $# -gt 0 ]; do
- case $1 in
- -n|--noinput) user="${2:1:${#2}-2}"; noinput='--noinput'; shift ;;
- -r|--repo) repo="${2:1:${#2}-2}"; brepo=true; shift ;;
- -d|--dev) dev=true; ;;
- -p|--project_name) project_name="${2:1:${#2}-2}"; bproject_name=true; shift ;;
- -h|--help) print_help; exit 0 ;;
- (--) shift; break;;
- (-*) echo "$0: Err. - unrecognized option $1" 1>&2; exit 1;;
- (*) break;;
- esac
- shift
- done
- unset OPTIND
- unset opt
-
- if [[ ! $noinput ]]; then
- if [[ $(whoami) == 'root' ]]; then
- echo -e "\nErr. Interactive script should run as a regular user\n" >&2
- exit 2
- fi
- run () { echo " ${bold}\$ ${@}${normal}"; ${@}; }
- surun () { echo " ${bold}\$ ${@}${normal}"; ${@}; }
- else
- if [[ $(whoami) != 'root' ]]; then
- echo -e "\nErr. --noinput should run as root\n" >&2
- exit 3
- elif ! id $user &> /dev/null; then
- echo -e "\nErr. User $2 does not exist\n" >&2
- exit 4
- fi
- run () { echo " ${bold}\$ ${@}${normal}"; ${@}; }
- surun () { echo " ${bold}\$ su $user -c \"${@}\"${normal}"; su $user -c "${@}"; }
- fi
- if [[ ! $dev && $brepo ]]; then
- echo -e "\nErr. --repo only makes sense with --dev\n" >&2
- exit 5
- fi
-
- sudo true
- if [[ ! $noinput && ! $bproject_name ]]; then
- 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
- fi
-
- task=cronbeat
- if [[ ! $noinput ]]; then
- while true; do
- read -p "Do you want to use celery or cronbeat (orchestra.contrib.tasks) 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
- fi
-
- home=$(eval echo ~$user)
- cd $home
-
- install_orchestra "$dev" $home $repo
- if [[ ! -e $project_name ]]; then
- surun "orchestra-admin startproject $project_name"
- else
- echo "Not deploying, $project_name already exists."
- fi
- cd $project_name
- setup_database "$dev" "$noinput"
-
- if [[ $noinput ]]; then
- create_orchestra_superuser $user $user@localhost orchestra
- fi
-
- if [[ "$task" == "celery" ]]; then
- run sudo apt-get install rabbitmq-server
- run sudo python3 -W ignore manage.py setupcelery --username $user
- else
- surun "python3 -W ignore manage.py setupcronbeat"
- surun "python3 -W ignore manage.py syncperiodictasks"
- fi
-
- run sudo python3 -W ignore manage.py setuplog --noinput
-
- surun "python3 -W ignore manage.py collectstatic --noinput"
- run sudo apt-get install nginx-full uwsgi uwsgi-plugin-python3
- run sudo python3 -W ignore manage.py setupnginx --user $user $noinput
- run sudo python3 -W ignore manage.py restartservices
- run sudo python3 -W ignore manage.py startservices
- surun "python3 -W ignore manage.py check --deploy"
-
-
- ip_addr=$(ip addr show eth0 | grep 'inet ' | sed -r "s/.*inet ([^\s]*).*/\1/" | cut -d'/' -f1)
- if [[ ! $ip_addr ]]; then
- ip_addr=127.0.0.1
- fi
-
- # Configure settings file into debug mode
- if [[ $dev ]]; then
- sed -i \
- -e "s/^\s*#\s*'debug_toolbar',/ 'debug_toolbar',/" \
- -e "s/^\s*#\s*'django_nose',/ 'django_nose',/" $project_name/settings.py
- if [[ ! $(grep '^INTERNAL_IPS\s*=' $project_name/settings.py) ]]; then
- echo "INTERNAL_IPS = ('$ip_addr',)" >> $project_name/settings.py
- fi
- fi
-
- test_orchestra $user $ip_addr
-}
-
-# Wrap it all on a function to avoid partial executions when running through wget/curl
-main $@