Showing posts with label django. Show all posts
Showing posts with label django. Show all posts

Wednesday, March 13, 2013

Запуск django/flask аплікацій за допомгою supervisord

Існує декілька варіантів запуску django як fastcgi-серверу на продакшин-серверах. Типовим варіантом є написання startup-скрпту і розміщення його в /etc/init.d/ (детальніше https://code.djangoproject.com/wiki/InitdScriptForLinux).

Доволі зручним для запуску і контролю над django-програмами є supervisord. Supervisord дозволяє користувачам здійснювати моніторинг і контроль ряд процесів в UNIX-таких операційних систем. Його можна використовувати для запуску та конторлю різноманітних сервісів, зокрема django, celery, tornado, flask

Встанолюємо (на debain) supervisord:

aptitude install supervisor

supervisor напсианий на python-і, тому його можна і встановлювати за допомгою easy_install, pip ... Але якщо у вас немає потреб встановлювати певно кокретної версії, то краще скористатися штатним пакетним менеджером (aptitude, apt-get в debian-і)


конфігураціїні файли supervisor-а знаходяться в директорії /etc/supervisor:
/etc/supervisor/supervisord.conf - конф. файл самого supervisor-а,
а файли з лписом наших сервісів (зокрема django), які ми будемо запускати, повинні знаходитися в /etc/supervisor/conf.d/

ось, як виглядає конфігураційний файл (/etc/supervisor/conf.d/project.conf) для запуску django :


[program:project]  # тут project - це унікальне імє проекту
command = /home/user/www/project/.env/bin/python manage.py runfcgi host=127.0.0.1 port=10889 daemonize=false
directory = /home/user/www/project/
user = user
autostart=true
autorestart=true
startsecs = 3
redirect_stderr=true
stdout_logfile=/var/log/supervisor/project.log


отже створили файл, далі запускаємо:

supervisorctl reread
supervisorctl update

і дивимося статус:

supervisorctl status
project RUNNING pid 2637, uptime 0:25:13


і ще приклад для flask-аплікації, яка запускається за допомогою gunicorn

[program:flask_app]
command = /home/user/flask/flask_app/.env/bin/gunicorn flask_app:app -b 127.0.0.1:10081
directory = /home/user/flask/flask_app/
user = user
autostart=true
autorestart=true
startsecs = 3
redirect_stderr=true
stdout_logfile=/var/log/supervisor/flask_app.gunicorn.log


Wednesday, January 2, 2013

django startup script

#!/bin/sh -u


ROOT_DIR="/data/www"

PIDFILE="${ROOT_DIR}/django.pid"

SITE_DIR="${ROOT_DIR}/site"

USER="vova"


MANAGE="$SITE_DIR/wmf/manage.py"

COMMAND="${SITE_DIR}/.env/bin/python"

PORT="10080"

HOST="127.0.0.1"

OPTIONS="$MANAGE runfcgi method=threaded host=${HOST} port=${PORT} pidfile=${PIDFILE}"


case "$1" in

      start)

            echo "Starting django site ...";

              /sbin/start-stop-daemon -S -p ${PIDFILE} -c ${USER}  --exec  $COMMAND -- $OPTIONS

      ;;

      stop)

           echo "Stoping django site  ...";

            /sbin/start-stop-daemon -Kp ${PIDFILE}

            test -f ${PIDFILE} && rm ${PIDFILE}

      ;;

      restart|reload)

            echo "Restarting api2 server ...";

            $0 stop;

            sleep 1;

            $0 start;

      ;;

      *)

      echo "use $0: stop|start"

      ;;

esac



where (django-1.5):

# ls -1a /data/www/site
.env/
.git/
.gitignore
README.md
requirements.txt
wmf/



# ls -1a /data/www/site/wmf/
manage.py
media/
static/
wmf/