В дополнение к этому, этому и этому – решил собрать всё в одном месте, что бы упростить процесс.
Установка выполняется на:
# cat /etc/redhat-release CentOS release 6.6 (Final)
Устанавливаем необходимые пакеты:
# yum install python-pip python-devel libxml2 libxml2-devel python-setuptools zlib-devel wget openssl-devel pcre pcre-devel gcc make autoconf automake
Устанавливаем сам Django.
Пытался ставить из PyPI – но не зря я его не люблю – получил кучу ошибок при сборке, поэтмоу – ставим из репозитория:
# yum install django ... Installed: python-django.noarch 0:1.2.3-2.el6.rf Dependency Installed: MySQL-python.i686 0:1.2.3-0.3.c1.1.el6 postgresql-libs.i686 0:8.4.20-1.el6_5 python-psycopg2.i686 0:2.0.14-2.el6 python-sqlite2.i686 1:2.3.5-2.el6 Complete!
При установке из репозитория – создаётся директория /var/www/django/
:
# cd /var/www/django/
Создаём проект:
# django-admin.py startproject testing_setevoy_org_ua
Проверяем директории и файлы:
# ls -l total 4 drwxr-xr-x 2 root root 4096 Jan 28 18:12 testing_setevoy_org_ua
# ls -l testing_setevoy_org_ua/ total 12 -rw-r--r-- 1 root root 0 Jan 28 18:12 __init__.py -rw-r--r-- 1 root root 546 Jan 28 18:12 manage.py -rw-r--r-- 1 root root 3418 Jan 28 18:12 settings.py -rw-r--r-- 1 root root 514 Jan 28 18:12 urls.py
Проверяем Django:
# cd testing_setevoy_org_ua/
# python manage.py runserver 77.120.103.20:8081 Validating models... 0 errors found Django version 1.2.3, using settings 'testing_setevoy_org_ua.settings' Development server is running at http://77.120.103.20:8081/ Quit the server with CONTROL-C.
Открываем на фаерволе порт (временно):
iptables -I INPUT 2 -p tcp --dport 8081 -j ACCEPT
Заходим браузером на http://77.***.***.20:8081:
ОК, Django работает.
Устанавливаем uWSGI, тут либо качать исходники – либо из PyPI:
# pip install uwsgi ... ############## end of uWSGI configuration ############# total build time: 6 seconds *** uWSGI is ready, launch it with /usr/bin/uwsgi *** Successfully installed uwsgi Cleaning up...
Проверяем uWSGI:
# uwsgi --version 2.0.8
Создаём файл test.py
:
def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return ["uWSGI works!"]
Запускаем:
# uwsgi --http :8081 --wsgi-file test.py
Проверяем:
# curl http://localhost:8081 uWSGI works
Всё работает.
Создаём файл лога:
# touch /var/log/uwsgi/testing.setevoy.org.ua.log
Создаём директорию для конфигураций uWSGI:
# mkdir /etc/uwsgi/
Создаём в ней файл настроек сайта /etc/uwsgi/testing.setevoy.org.ua.ini
:
[uwsgi] socket = 127.0.0.1:9090 chdir = /var/www/django/testing_setevoy_org_ua/ pythonpath = .. module = django.core.handlers.wsgi:WSGIHandler() env = DJANGO_SETTINGS_MODULE=settings master = True pidfile = /tmp/project-master.pid daemonize=/var/log/uwsgi/testing.setevoy.org.ua.log uid = setevoy gid = setevoy
Меняем пользователя директории сайта:
# chown -R setevoy:setevoy /var/www/django/testing_setevoy_org_ua/
Сам NGINX уже установлен и настроен для других сайтов, пример – тут>>>.
Создаём файл настроек NGINX – /etc/nginx/conf.d/testing.setevoy.kiev.ua.conf
:
server { server_name testing.setevoy.org.ua; access_log /var/log/nginx/testing.setevoy.org.ua-access.log; error_log /var/log/nginx/testing.setevoy.org.ua-error.log; root /var/www/django/testing_setevoy_org_ua/; location / { index index.py; uwsgi_pass 127.0.0.1:9090; include uwsgi_params; } }
Проверяем NGINX:
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Перезапускаем:
# service nginx restart Stopping nginx: [ OK ] Starting nginx: [ OK ]
Что бы упростить работу с uWSGI – создаём скрипт /etc/init.d/uwsgi
:
#!/bin/bash ### BEGIN INIT INFO # Provides: uwsgi # Required-Start: $syslog $remote_fs # Should-Start: $time ypbind smtp # Required-Stop: $syslog $remote_fs # Should-Stop: ypbind smtp # Default-Start: 3 5 # Default-Stop: 0 1 2 6 ### END INIT INFO # Source function library. . /etc/rc.d/init.d/functions # Check for missing binaries (stale symlinks should not happen) UWSGI_BIN=`which uwsgi` test -x $UWSGI_BIN || { echo "$UWSGI_BIN not installed"; if [ "$1" = "stop" ]; then exit 0; else exit 5; fi; } UWSGI_EMPEROR_MODE=true UWSGI_VASSALS="/etc/uwsgi/" UWSGI_OPTIONS="--enable-threads --logto /var/log/uwsgi.log" lockfile=/var/lock/subsys/uwsgi UWSGI_OPTIONS="$UWSGI_OPTIONS --autoload" if [ "$UWSGI_EMPEROR_MODE" = "true" ] ; then UWSGI_OPTIONS="$UWSGI_OPTIONS --emperor $UWSGI_VASSALS" fi case "$1" in start) echo "Starting uWSGI " daemon $UWSGI_BIN $UWSGI_OPTIONS & ;; stop) echo "Shutting down uWSGI " killproc $UWSGI_BIN ;; restart) $0 stop $0 start ;; status) echo "Checking for service uWSGI " status $UWSGI_BIN ;; *) echo "Usage: $0 {start|stop|status|restart}" exit 1 ;; esac exit 0
Запускаем uWSGI:
# service uwsgi status Checking for service uWSGI uwsgi is stopped
# service uwsgi start Starting uWSGI
Проверяем логи:
# tail /var/log/uwsgi/testing.setevoy.org.ua.log Python main interpreter initialized at 0x17d81c0 your server socket listen backlog is limited to 100 connections your mercy for graceful operations on workers is 60 seconds mapped 145536 bytes (142 KB) for 1 cores *** Operational MODE: single process *** added ../ to pythonpath. WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x17d81c0 pid: 5919 (default app) *** uWSGI is running in multiple interpreter mode *** spawned uWSGI master process (pid: 5919) spawned uWSGI worker 1 (pid: 5920, cores: 1)
# tail /var/log/uwsgi.log *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** *** WARNING: you are running uWSGI without its master process manager *** your processes number limit is 7803 your memory page size is 4096 bytes detected max file descriptor number: 1024 *** starting uWSGI Emperor *** *** has_emperor mode detected (fd: 6) *** [uWSGI] getting INI configuration from testing.setevoy.org.ua.ini Wed Jan 28 18:18:54 2015 - [emperor] vassal testing.setevoy.org.ua.ini has been spawned Wed Jan 28 18:18:54 2015 - [emperor] vassal testing.setevoy.org.ua.ini is ready to accept requests
Открываем в браузере http://testing.setevoy.org.ua:
И проверим процессы и файлы:
# ps aux | grep uwsgi | grep -v grep root 6200 0.0 0.0 100944 636 pts/2 S+ 18:42 0:00 tail -f /var/log/uwsgi/testing.setevoy.org.ua.log root 6279 0.0 0.1 108432 1156 pts/3 S 18:43 0:00 /bin/bash /etc/init.d/uwsgi start root 6281 0.0 0.1 108164 1384 pts/3 S 18:43 0:00 /bin/bash -c ulimit -S -c 0 >/dev/null 2>&1 ; /usr/bin/uwsgi --enable-threads --logto /var/log/uwsgi.log --autoload --emperor /etc/uwsgi/ root 6282 0.0 0.3 56668 3408 pts/3 S 18:43 0:00 /usr/bin/uwsgi --enable-threads --logto /var/log/uwsgi.log --autoload --emperor /etc/uwsgi/ setevoy 6283 0.0 1.2 200808 13124 pts/3 S 18:43 0:00 /usr/bin/uwsgi --ini testing.setevoy.org.ua.ini setevoy 6284 0.1 1.6 212352 16424 pts/3 S 18:43 0:00 /usr/bin/uwsgi --ini testing.setevoy.org.ua.ini
Готово.