TODO
This commit is contained in:
parent
34bad9613c
commit
0f603181ff
15
INSTALL.md
15
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
|
2. Install django-orchestra's source code
|
||||||
```bash
|
```bash
|
||||||
sudo apt-get install python3-pip
|
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
|
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)
|
6. Configure periodic execution of tasks (choose one)
|
||||||
1. Use cron
|
1. Use cron
|
||||||
```bash
|
```bash
|
||||||
python3 manage.py setupcronbeat
|
python3 manage.py setupcronbeat
|
||||||
python3 panel/manage.py syncperiodictasks
|
python3 manage.py syncperiodictasks
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Use celeryd
|
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
|
sudo python3 manage.py setupnginx --user orchestra
|
||||||
```
|
```
|
||||||
|
|
||||||
|
6. See the Django deployment checklist
|
||||||
|
```bash
|
||||||
|
python3 manage.py check --deploy
|
||||||
|
```
|
||||||
|
|
||||||
9. Start all services:
|
9. Start all services:
|
||||||
```bash
|
```bash
|
||||||
|
|
30
TODO.md
30
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:
|
short URLS: https://github.com/rsvp/gitio
|
||||||
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"?'
|
|
||||||
|
|
||||||
|
link backend help text variables to settings/#var_name
|
||||||
|
saas changelist domain: add <br>custom domain<img>
|
||||||
|
|
||||||
warning: no previously-included files matching '__pycache__' found under directory '*'
|
$ sudo python manage.py startservices
|
||||||
warning: no previously-included files matching '*~' found under directory '*'
|
Traceback (most recent call last):
|
||||||
warning: no previously-included files matching '*.save' found under directory '*'
|
File "manage.py", line 8, in <module>
|
||||||
changing mode of build/scripts-3.4/orchestra-beat from 644 to 755
|
from django.core.management import execute_from_command_line
|
||||||
changing mode of /usr/local/bin/orchestra-admin to 755
|
ImportError: No module named django.core.management
|
||||||
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
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
set -ue
|
set -ue
|
||||||
|
|
||||||
|
|
||||||
function main () {
|
function main () {
|
||||||
bold=$(tput -T ${TERM:-xterm} bold)
|
bold=$(tput -T ${TERM:-xterm} bold)
|
||||||
normal=$(tput -T ${TERM:-xterm} sgr0)
|
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 \
|
run sudo pip3 install django-orchestra==dev \
|
||||||
--allow-external django-orchestra \
|
--allow-external django-orchestra \
|
||||||
--allow-unverified django-orchestra
|
--allow-unverified django-orchestra
|
||||||
run sudo orchestra-admin install_requirements
|
run sudo orchestra-admin install_requirements
|
||||||
run cd $(eval echo ~$USER)
|
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 orchestra-admin startproject $project_name
|
||||||
run cd $project_name
|
run cd $project_name
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
read -p "Enter a new database password: " db_password
|
sudo service postgresql start
|
||||||
run sudo python3 manage.py setuppostgres --db_password "$db_password"
|
run sudo python3 manage.py setuppostgres --db_password "$db_password"
|
||||||
|
|
||||||
run python3 manage.py migrate
|
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 manage.py setupcronbeat
|
||||||
run python3 panel/manage.py syncperiodictasks
|
run python3 manage.py syncperiodictasks
|
||||||
}
|
else
|
||||||
|
|
||||||
function celery () {
|
|
||||||
run sudo apt-get install rabbitmq
|
run sudo apt-get install rabbitmq
|
||||||
run sudo python3 manage.py setupcelery --username $USER
|
run sudo python3 manage.py setupcelery --username $USER
|
||||||
}
|
fi
|
||||||
|
|
||||||
while true; do
|
run sudo python3 manage.py setuplog --noinput
|
||||||
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 python3 manage.py collectstatic --noinput
|
run python3 manage.py collectstatic --noinput
|
||||||
run sudo apt-get install nginx-full uwsgi uwsgi-plugin-python3
|
run sudo apt-get install nginx-full uwsgi uwsgi-plugin-python3
|
||||||
run sudo python3 manage.py setupnginx --user $USER
|
run sudo python3 manage.py setupnginx --user $USER
|
||||||
run sudo python manage.py startservices
|
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
|
# Wrap it all on a function to avoid partial executions when running through wget/curl
|
||||||
|
|
Loading…
Reference in New Issue