Развёртывание боевого веб сервера - LernaProject/Lerna GitHub Wiki
Технически, веб-сервер - это контейнер Docker, использующий сетевой интерфейс хоста (это позволяет напрямую привязываться к портам машины, и использовать БД, развёрнутую локально). Директория проекта монтируется в контейнер в точку /lerna
. В ходе работы, в ней создаётся поддиректория /build
, в которой лежит готовая к раздаче статика build/static/
, все логи build/logs/
, и unix-сокет gUnicorn /build/gunicorn.sock
.
В докере постоянно функционируют nginx, gUnicorn и supervisor.
- Работа supervisor'а самая простая - он следит, чтобы gUnicorn работал, и поднимает его, если тот вдруг упадёт.
- gUnicorn - веб-сервер Django, который обрабатывает все динамические страницы и связывается с БД. Он общается с внешним миром через unix-сокет и не имеет открытого веб-интерфейса.
- nginx висит на 80-м порту серверной машины и принимает соединения. Если идет обращение по адресу
/static
, nginx сразу отдаёт файл. Если запрашивается какая-то другая страница - проксирует запрос в gUnicorn черезgunicorn.sock
Все скрипты для управления лежат в папке /scripts/deployment
, в дальнейшем на них будем ссылаться без префикса.
Так как докер является низкоуровневым демоном, то для управления им потребуются либо root (все вызовы дополнять sudo), либо состоять в группе docker (предпочтительно). Для добавления в эту группу, нужно выполнить sudo usermod -aG docker <user_name>
и перезайти (чтобы применились групповые политики).
Существуют три скрипта, которые различаются только предварительными действиями, в остальном они выполняют все необходимые шаги для запуска веб-сервера.
-
start.sh
ничего не делает, если сервер уже запущен и работает. Его можно выполнять автоматически по расписанию, чтобы убедиться, что сервер работает. -
restart.sh
форсирует перезапуск сервера, даже если он уже работает. Его нужно выполнять, если есть изменения, но файлы в/scripts/deployment/data
не затрагивались (пересборка образа не требуется). -
rebuild.sh
форсирует пересборку сервера, даже если он работает или собран. Его нужно выполнять, если были изменены файлы в/scripts/deployment/data
.
- Установить докер
sudo apt-get install docker.io
и добавиться в его группу (см. выше). - Выкачать репозиторий проекта, создать и заполнить файл
/lerna/local_settings.py
(как образец можно использоватьlerna/local_settings.py.production_template
) - Выполнить скрипт
/scripts/deployment/start.sh
. Это потребует сборки образа и запуска контейнера, - процесс отобразится в консоли, но потребуется подождать.
- Все логи лежат в папке
build/logs/
, в первую очередь нужно посмотреть по ним. - Если непонятно, завёлся ли вообще сервер, можно посмотреть
docker ps -a
- контейнерlerna_web
должен быть онлайн. - Если сервер не заводится, или завёлся, но не работает - можно посмотреть его вывод командой
docker logs lerna_web
. - Если ничего не понятно, но очень нужно что-то сделать - hard reset можно выполнить скриптом
rebuild.sh