Нам постійно чогось не вистачає, ось ще чуточку і буде ідеально. Скільки разів було так коли все дуже навіть добре, проте нам хочеться щось зробити аби було краще, а в результаті ми лишаємося всього що було?.. Чому я себе не контролю? Мені постійно хочеться кращого… Навіть коли б здавалося все є все чудово, а що ще потрібно? Потрібно щоб оця маленька річ яка на даний момент найважливіша в житті була б краща… І так постійно. Ну скільки можна? Постійно задаю це собі питання та відповідь постійно одна. От трохи зміню і все і більше ніколи нічого не буду адже все і так норм. Та я сам себе постійно обманю((
Через деякий час знову хочеться більшого… А навіщо?

Літо сонце, радій, гуляй, а я сиджу дома читаю документацію до Django це напевно не нормально. Хоча з іншого боку а чим мені ще зайнятися? Хочу на море відпустка вже скоро) А так в Києві доволі скучно всі роз’їхались хто куди. Одна радість Аквапарк в ТЦ Термінал мені там подобається. Лежиш прохолодно вода морозиво. Після робочої неділі це одне напевно з найкращих місць в Києві.
Ладн. не буду сьогодні багато нити на клавіатуру) Піду попрацюю…

З.І. Де ділись всі Адекватні дівчата? 0_о
З.З.І. Забув, Для відліку часу Тепер в мене є свій Mac mini Що не може не радувати)
Tornado (торнадо) – это неблокирующий, высоко производительный веб-сервер с открытыми исходным кодом. Авторами сервера являются создатели сервиса FriendFeed. Сервер реализован средствами языка Python и в силу своей неблокирующей природы (используется epoll) легко выдерживает тысячи одновременных подключений. Помимо всего прочего, Tornado поддерживает протокол WSGI, хотя и с небольшими ограничениями (будут не доступны асинхронные фичи сервера).
Механизм взаимодействия будет классическим:
* front-end – nginx, проксирующий все соединения, кроме статических файлов, на back-end
* back-end – tornado + django
Установка nginx
В первую очередь необходимо установить fron-end, коим будет являться весьма популярный http-сервер nginx. Установка проста:
sudo aptitude install nginx
Установка django
Получение исходный код фреймворка:
$ mkdir ~/django
cd ~/django
wget http://www.djangoproject.com/download/1.1.1/tarball/
tar xzf Django-1.1.1.tar.gz
Установка Django:
python -c “from distutils.sysconfig import get_python_lib; print get_python_lib()”
/usr/lib/python2.5/site-packages
sudo ln -s ~/django/Django-1.1.1/django /usr/lib/python2.5/site-packages/django
sudo ln -s ~/django/Django-1.1.1/django/bin/django-admin.py /usr/local/bin
python -c “import django; print django.VERSION;”
(1, 1, 1, ‘final’, 0)
Установка tornado
К сожалению, tornado все еще отсутствует в стандартных репозиториях Debian / Ubuntu. Поэтому процесс установки будет выполняться непосредственно из исходных кодов. Подготовка к получению исходных кодов и компиляции:
sudo aptitude install git-core gitosis sudo aptitude install python-dev build-essential
После этого необходимо получить исходный код tornado:
cd ~ && git clone git://github.com/facebook/tornado.git
И наконец, выполнить установку tornado:
cd ~/tornado && sudo python setup.py install
Проверяем корректность установки:
python -c "import tornado; print 'tornado installation successfully completed';" tornado installation successfully completed
Настройка wsgi
Чтобы заставить работать Django-код под Tornado, необходимо написать wsgi-прослойку, запускающую tornado-сервер на определенном порту и подключающую django-проект по протоколу wsgi. Код должен выглядеть приблизительно так:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# location: deploy/tornading.py
import os
import sys
# настройки
DJANGO_ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
DJANGO_APPS_DIR = os.path.join(DJANGO_ROOT_DIR, 'apps')
def daemon(iport):
import tornado.wsgi
import tornado.ioloop
import tornado.httpserver
# настраиваем django
sys.path.insert(0, DJANGO_APPS_DIR)
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
# подключаем tornado
container = tornado.wsgi.WSGIContainer(application)
http_server = tornado.httpserver.HTTPServer(container)
http_server.listen(iport)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
# на вход должен быть передан порт,
# на котором будет запущен tornado-сервер
daemon(int(sys.argv[1]))
При этом предполагается, что код проекта распределен следующим образом:
tree -d -L 1 . # корень django-проекта |-- apps # django-приложения |-- cache |-- deploy |-- logs |-- media `-- templates # django-шаблоны
Настройка nginx
После того, как tornado-сервер запущен, можно переходить к настройке nginx:
sudo vim /etc/nginx/sites-available/bukashk0zzz.org.ua
Файл конфигурации должен выглядеть приблизительно следующим образом:
upstream backends {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
server {
listen 80;
server_name tornado.bukashk0zzz.org.ua;
access_log /home/django-projects/bukashk0zzz/logs/nginx_access.log;
error_log /home/django-projects/bukashk0zzz/logs/nginx_error.log;
location = /robots.txt {
alias /home/django-projects/bukashk0zzz/media/robots.txt;
}
location = /favicon.ico {
alias /home/django-projects/bukashk0zzz/media/img/favicon.ico;
}
location /media/ {
alias /home/django-projects/bukashk0zzz/media/;
expires 30d;
}
location /media_admin/ {
alias /usr/lib/python2.6/dist-packages/django/contrib/admin/media/;
expires 30d;
}
location / {
proxy_pass http://backends;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Далее, необходимо включить хост:
sudo ln -s /etc/nginx/sites-available/bukashk0zzz.org.ua \
/etc/nginx/sites-enabled/bukashk0zzz.org.ua
Чтобы новый хост заработал, необходимо перестартовать nginx:
sudo /etc/init.d/nginx restart
Запуск демона tornado
Для запуска Django-проекта осталось лишь запустить tornado-сервер на нужном порту с помощью wsgi-прослойки, написанной ранее:
python deploy/tornading.py 8001 & python deploy/tornading.py 8002 &
Все. Django-проект запущен под nginx+tornado.
В качестве базы решил использовать PostgreSQL, лично для меня пофиг какая база PostgreSQL или MySQL, решил использовать PostgreSQL потому что сами разработчики Django когда разрабатывали свой фреймворк, затачивали его под Postgres.
aptitude install postgresql
Если все сделали правильно Postgres начнет ждать подключений.
netstat -tanp |grep postgre tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 23104/postgres tcp6 0 0 ::1:5432 :::* LISTEN 23104/postgres
Создаем нового юзера (в моем примере newuser) и зададим ему пароль qwerty
su postgres createuser newuser Shall the new role be a superuser? (y/n) n Shall the new role be allowed to create databases? (y/n) n Shall the new role be allowed to create more new roles? (y/n) n
psql template1 alter user newuser password 'qwerty';
Заодно сменим пароль для пользователя Postgres
ALTER ROLE postgres WITH ENCRYPTED PASSWORD 'my-super-secret-password'; \q
Создаем базу для пользователя newuser, на запрос пароля вводим пароль, который мы установили для пользователя postgres (my-super-secret-password)
createdb websitedb --owner=newuser -hlocalhost Password:
Теперь пробуем подключиться
psql -Unewuser -W -hsrv01.lan Password for user newuser: psql (8.4.1) SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) Type "help" for help. newuser=>
С базой покончено, можно настраивать сайт
mkdir /var/www/django-trunk chown www-data:www-data /var/www/django-trunk/ cd /var/www/django-trunk/ su www-data svn co http://code.djangoproject.com/svn/django/trunk/ . exit python django/setup.py build python django/setup.py install
Для запуска Django как FastCGI server понадобится flup, который можно установить из пакетов.
aptitude install python-flup
Создаем новый проект
django-admin.py startproject yourproject
Проект создан, теперь можно запускать FastCGI сервер и настраивать Nginx.
/var/www/yourproject$ ./manage.py runfcgi method=threaded host=127.0.0.1 port=3033
Теперь создаем конфиг для nginx /etc/nginx/sites-available/yourwebsite (если не установлен, то устанавливаем командой sudo aptitude install nginx). Ниже содержимое этого файла:
upstream djangoserv {
server 127.0.0.1:3033;
}
server {
listen 80;
server_name yourwebsite;
root /var/www/yourwebsite/yourproject;
access_log /var/www/yourproject/logs/access.log;
error_log /var/www/yourproject/logs/error.log;
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov) {
access_log off;
expires 30d;
}
location / {
fastcgi_pass 127.0.0.1:3033;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_pass_header Authorization;
fastcgi_intercept_errors off;
}
}
После чего делаем symlink и включаем конфиг для нового виртуал хоста, создаем папку с логами и выставляем ей нужного владельца (www-data), после чего перезагружаем nginx.
cd /etc/nginx/sites-available ln -s /etc/nginx/sites-available/yourwebsite /etc/nginx/sites-enabled/yourwebsite mkdir /var/www/yourproject/logs chown www-data:www-data /var/www/yourproject/logs /etc/init.d/nginx reload
Если все сделали правильно теперь можно зайти по адресу http://yourwebsite и увидеть там дефолтную страницу Django с надписью It worked!