Django + Nginx + FastCGI
by Larin
Интро
Уже пару месяцев я разбираюсь с Python & Django. И вот настало время выкладывать свои художества в сеть ) Правда, мой первый сайт на Django посвящен ведению отчетов по работе. Он довольно прост и хвалиться нечем. Вместо этого я расскажу как просто развертывается проект на Django + Nginx + FastCGI.
Устанавливаем
У меня на офисном сервере стоит Ubuntu.
Выполняем ритуальное:
# sudo aptitude update
Mysql
# sudo aptitude install mysql-server
Далее создаем пользователя и БД:
# sudo mysqladmin -u user password ********
# mysql -u user -p
> CREATE DATABASE `report` CHARACTER SET utf8;
Теперь установим библиотеку для работы Python с MySQL:
# sudo aptitude install python-mysqldb
Все, база настроена.
Django
Узнаем расположение “питоновских” библиотек:
python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
Полученное значение подставляем, в листинг ниже. У меня это /usr/local/lib/python2.5/site-packages
Django устанавливаем последней версии из офф. репозитория, а вот путь:
З.Ы.: для python 2.6 путь -/usr/local/lib/python2.6/dist-packages/django
# cd /usr/local/lib/python2.5/site-packages
# sudo svn co http://code.djangoproject.com/svn/django/trunk/ django-trunk
# sudo ln -s django-trunk/django /usr/local/lib/python2.5/site-packages/django
# cd /usr/local/bin
# sudo ln -s /usr/local/lib/python2.5/site-packages/django-trunk/django/bin/django-admin.py django-admin.py
Nginx
Устанавливаем стандартным способом:
# mkdir ~/tmp
# cd ~/tmp
# wget http://sysoev.ru/nginx/nginx-0.6.36.tar.gz
# tar -xzf nginx-0.6.36.tar.gz
# cd nginx-0.6.36
# ./configure
# make
# sudo make install
Далее настраиваем Nginx для нашего сайта, создаем виртуальных хост для нашего проекта, добавляем секцию server в фалик /usr/local/nginx/conf/nginx.conf:
# sudo vim /usr/local/nginx/conf/nginx.conf
server {
server_name report.loc;
location / {
root /var/www/report.loc/www;
index index.html index.htm;
fastcgi_pass 127.0.0.1:7777;
include /usr/local/nginx/conf/fastcgi.conf;
}
location /media {
root /var/www/report.loc/www;
}
location /admin-media {
alias /usr/local/lib/python2.5/site-packages/django-trunk/django/contrib/admin/media;
}
}
# sudo vim /usr/local/nginx/conf/fastcgi.conf
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_pass_header Authorization;
fastcgi_intercept_errors off;
Перенос проекта
Файлы проекта будем хранить в месте не доступном для WEB-пользователя. Создаем в /var/www/report.loc/ каталог с именем своего проекта, в моем случае это publishing. И копируем в него все файлы проекта. Всю статику (js, css, img, etc) сайта я храню в одном каталоге media, т.е. /media/js/, /media/css/ & etc. Этот каталог будет находиться в web-директории, т.е. /var/www/report.loc/www/media.
Поехали!
Вот и все, все настроено, настало время запуска:
Инициализируем БД проекта:
# python /var/www/report.loc/publishing/manage.py syncdb
и запускаем сервер:
# python /var/www/report.loc/publishing/manage.py runfcgi host=127.0.0.1 port=7777
# /usr/local/nginx/sbin/nginx
Все (: