Всем привет. Сегодня будем ставить высоконагруженный веб-сервер на слабенькое железо. Итак начнем. Что нам нужно будет для работы.
Предварительная работа над системой.
1. Я ставлю на Ubuntu Server 11.04 (вы можете легко адаптировать под свою ОС)
2. Пользователь с нужными правами. Мой пользователь - kir
3. Ему необходимо передать рутовые права приблизительно вот так:
Теперь переходим к настройке daemontools.
1. Создаем настроечный файл для daemontools с названием /etc/init/svscanboot со следующим содержимым
Настройка виртуальной среды для Python
1. Мы будем использовать virtualenv для создания изолированной среды для нашего приложения
7. Доставим несколько библиотек для дальнейшей оптимизации
Связываем Daemontools c FastCGI
1. Daemontools будет смотреть во ве поддиректории /etc/service и в каждой из них он будет искать исполняемый файл run. Итак, создаем mysite-директорию
Настраиваем nginx для работы с нашим сервером
1. Для начала изменим файл /etc/nginx/fastcgi_params на такое содержание
Радуемся результату. Удачи!
Предварительная работа над системой.
1. Я ставлю на Ubuntu Server 11.04 (вы можете легко адаптировать под свою ОС)
2. Пользователь с нужными правами. Мой пользователь - kir
3. Ему необходимо передать рутовые права приблизительно вот так:
- заходим в файл /etc/sudoers
- выставляем такие права kir ALL=(ALL) ALL
4. Устанавливаем django. Описано тут
5. Устанавливаем nginx
#sudo apt-get install nginx
6. Устанавливаем дополнительные библиотеки для python
#sudo apt-get install build-essential python-dev python-setuptools7. Наконец устанавливаем daemotools
#sudo apt-get install daemontools8. Создадим папку /etc/service выполнив следующую команду
#sudo mkdir /etc/service
Теперь переходим к настройке daemontools.
1. Создаем настроечный файл для daemontools с названием /etc/init/svscanboot со следующим содержимым
start on runlevel 22. Запустим daemontools
start on runlevel 3
start on runlevel 4
start on runlevel 5
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
respawn
exec /usr/bin/svscanboot
#sudo initctl start svscanboot
Настройка виртуальной среды для Python
1. Мы будем использовать virtualenv для создания изолированной среды для нашего приложения
#sudo easy_install virtualenv2. Теперь настроим новую виртуальную среду
#mkdir ~/virtualenvs3. Начнем использовать нашу виртуальную среду и установим pip для удобства инсталляции питоновских пакетов
#virtualenv ~/virtualenvs/mysite
#source ~/virtualenvs/mysite/bin/activate4. Установим flup. Это требования Django для того, чтобы была возможность запускать fcgi через команду runfcg
#easy_install pip
#pip install flup5. Для того, чтобы спользовать адаптеры базы данных, графические библиотеки или xml парсеры, инсталлированные по системному пути Питона, мы должны убедиться, что они доступны из нашей виртуальной среды. Для этого мы добавляем .pth файл в директорию виртуальной среды site-packages
#echo "/usr/lib/python2.7/dist-packages/" > ~/virtualenvs/mysite/lib/python2.7/site-packages/fix.pth6. Теперь любым удобным способом перетащите свой проект Django в директорию ~/virtualenvs/mysite
7. Доставим несколько библиотек для дальнейшей оптимизации
#pip install simplejson python-memcached
Связываем Daemontools c FastCGI
1. Daemontools будет смотреть во ве поддиректории /etc/service и в каждой из них он будет искать исполняемый файл run. Итак, создаем mysite-директорию
#sudo mkdir /etc/service/mysite2. Теперь делаем скрипт /etc/service/mysite/run, который будет запускать fastcgi-сервер
#!/usr/bin/env bash3. Сделаем созданный скрипт исполняемым
source /home/kir/virtualenvs/mysite/bin/activate
cd /home/kir/mysite
exec envuidgid kir python manage.py runfcgi method=threaded host=127.0.0.1 port=8080 pidfile=mysite.pid minspare=4 maxspare=30 daemonize=false
#sudo chmod +x /etc/service/mysite/run
Настраиваем nginx для работы с нашим сервером
1. Для начала изменим файл /etc/nginx/fastcgi_params на такое содержание
fastcgi_param QUERY_STRING $query_string;2. Теперь создадим настройку под наш хост /etc/nginx/sites-available/mysite
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
server {3. Теперь подключим его через symlink
listen 80;
server_name mysite;
access_log /var/log/nginx/mysite.access.log;
location /media {
autoindex on;
index index.html;
root /home/mysite/mysite;
break; }
location / {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:8080;
break;
}
}
#sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/mysite4. Теперь перезапустим сайт, чтобы все настройки вступили в силу
#sudo /etc/init.d/nginx restart
Радуемся результату. Удачи!
No comments:
Post a Comment