Блог Синявского
  • Разделы
  • Метки
  • Все статьи

Запускаем Python web-приложение c lighttpd fastcgi

1

Такое техническое решение обладает неоспоримым преимуществом. lighthttpd полностью берет на себя управление приложением, отвечает за количество запущенных процессов. Развернем fastcgi hello world на python.

Важно! Везде в листингах <project_name> - имя проекта

Определимся с файловой структурой

Каждый администратор создает файловую структуру, так как ему это удобно, привычно. Я привык работать с такой структурой. Некоторые инженеры рекомендует создавать аналогичную структуру в рабочей директории пользователя ssh. Удобно для автоматизированного деплоя. Я создаю все каталоги в корневом каталоге. На все доводы у меня есть контрдовод. В процессе разработки если приходится использовать длинные пути например freebsd /usr/local/www/python/project/ это превращается в сущий кошмар, даже с учетом автодополнения.

/web/<project_name>/ - корневая директория проекта

/web/<project_name>/run/ - директория для сокетных файлов и файлов идентификаторов процессов

/web/<project_name>/logs/ - логи

/web/<project_name>/project/ - директория проекта

/web/<project_name>/env/ - виртуальное окружение для проекта

Подготовим плацдарм

$ mkdir -p /web/<project_name>/{run,logs,project}
$ cd /web/<project_name>
$ virtualenv -ppython2.7 env

Напишем приложение

Установим необходимые модули в виртуальное окружение. Для этого активируем виртуальное окружение и устанавливаем flup

$ cd /web/<project_name>/project/
$ source ../env/bin/activate
(env)$ pip install flup

Создадим исполняемый файл test.fcgi

$ nano /web/<project_name>/project/test.fcgi

#!../env/bin/python
# -*- coding: utf-8 -*-
def myapp(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return ['Hello World!\n']

if __name__ == '__main__':
    from flup.server.fcgi import WSGIServer
    WSGIServer(myapp).run()

Протестируем файл:

(env)$ python test.fcgi

Должно запуститься без ошибок.

Установка lighttpd на Debian

$ sudo apt-get install lighttpd

Конфигурирование lighttpd

Перейдем в каталог с конфигурационными файлами

$ sudo su
# cd /etc/lighttpd/

Скопируем предварительно настроенную конфигурацию из папки с доступными настройками

# cp conf-available/10-fastcgi.conf conf-available/<project_name>.conf

Откроем конфигурацию на редактирование <project_name>.conf

# nano conf-available/<project_name>.conf

server.modules += (
    "mod_fastcgi",
    "mod_rewrite"
)

accesslog.filename = "/var/<project_name>/logs/access.log"

fastcgi.debug = 1
fastcgi.server = ("/run.fcgi" =>
    ((
        "socket" => "/web/<project_name>/run/<project_name>.sock",
        "bin-path" => "/web/<project_name>/env/bin/python2.7 /web/<project_name>/project/test.fcgi",
        "check-local" => "disable",
        "max-procs" => 1,
        "broken-scriptfilename" => "enable",
        "fix-root-scriptname" => "enable"
    ))
)

url.rewrite-once = (
    "^/(.*)$" => "/run.fcgi/$1"
)

Все директивы модуля fastcgi и rewrite можно посмотреть в официальной докуметации.

После редактирования создадим символическую ссылку:

# ln -s conf-available/svisy.conf conf-enabled/

Тестируем конфигурацию:

# lighttpd -t -f lighttpd.conf
Syntax OK
# service ligthtpd restart

Смотрим лог:

$ tail -f /var/logs/lighttpd/error.log
$ tail -f /web/<project_name>/logs/access.log

Заходим в браузер и тестируем http://127.0.0.1/



  • ← сюда
  • туда →

comments powered by Disqus

Опубликовано

26.09.2014

Обновление

05.05.2022

Категории

lighttpd

Тэги

  • lighttpd 7
  • request 3

Всегда на связи

  • Блог Синявского - Ничего не переносить на завтра, это тоже проблема с прокастинацией?
  • © Алексей Синявский, по лицензии CC BY-SA если не указано иное.
  • С использованием Pelican. Тема: Elegant от Talha Mansoor