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

Через деякий час знову хочеться більшого… А навіщо?

Screen shot 2010 07 06 at 6.20.01 AM Все так чудово)

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

Ладн. не буду сьогодні багато нити на клавіатуру) Піду попрацюю…
1243866582 29 1612507394 Все так чудово)

З.І. Де ділись всі Адекватні дівчата? 0_о
З.З.І. Забув, Для відліку часу Тепер в мене є свій Mac mini Що не може не радувати)

Technicolour & Komatic – Daydreamer

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!

© 2011 Записи о настройке Debian, Ubuntu
Украина онлайн Rambler's Top100 Каталог MyList.com.ua каталог сайтів