Хотел рассказать, как при помощи Saltstack быстро и легко развернуть проект на Django.
Статья будет полезна тем, кто хочет легко и быстро запустить небольшой Django проект, для сложных проектов данный способ может оказаться не таким эффективным и удобным. Основное преимущество излагаемого способа - его простота именно применимо к небольшим проектам.
Чтоб не тратить зря ваше время, сразу обозначу преимущества и недостатки предалагаемого алгоритма.
Преимущества:
Недостатки:
В итоге вы получите, возможность набрав несколько команд, сконфигурировать сервер с необходимыми зависимостями и задеплоить туда код.
И так, приступим. Все описаные действия проделаны на Debian/Jessie.
Для начала надо скачать шаблон проекта Django проекта с интегрированым Saltstack скачать.
создаем файл /etc/apt/sources.list.d/saltstack.list
deb http://repo.saltstack.com/apt/debian/8/amd64/latest jessie main
импортируем ключи
wget -O - https://repo.saltstack.com/apt/debian/8/amd64/latest/SALTSTACK-GPG-KEY.pub | sudo apt-key add -
запускаем
sudo apt-get update
устанавливаем salt-ssh
sudo apt-get install salt-ssh
редактируем etc/salt/roster, вносим назвиния хостов и их адреса
demo-production: host: 192.168.50.4 user: root demo-staging: host: 192.168.50.4 user: root
demo-production - название сервера с production, demo-staging - название тестового сервера
в файле etc/salt/pillar/config.sls (формат yaml) прописываем порт запуска приложения, список доменов по которым будет отзываться приложение
config: django_demo: port: 9005 concurrency: 2 domains: - demo.com - staging.demo.com
файл etc/salt/pillar/roles.yaml описывает список ролей (сервисов и приложений), которые будут установлены на сервер
demo-production: - nginx - postgres - python3 - supervisor - django_demo demo-staging: - nginx - postgres - python3 - supervisor - django_demo
файл содержит мапинг окруженией и хостов
production: - demo-production staging: - demo-staging
в файлах srv/pillar/private/<runtime_name>/postgres.sls лежат логины и пароли в БД, если папки srv/pillar/private/<runtime_name> не существует, то данные берутся из srv/pillar/private/default
postgres_private: users: postgres: is_superuser: True password: prod_pass_for_postgres django_demo: password: prod_pass_for_django_demo dbs: django_demo: owner: django_demo Во время деплоя Saltstack создает необходимые файлы конфигураций, устанвливает зависимости.
Django берет настройки из папки settings, если папка не существует то настройки берутся из settings_default (используется для локального запуска проекта)
Для деплоя необходимо выполнить следущие шаги.
Добавить ключи доступа salt-ssh на сервер, для этого необхоимо перейти в директорию salt_root и выполнить команду, необходим root доступ к серверу.
ssh-copy-id -i etc/salt/pki/master/ssh/salt-ssh.rsa.pub root@<your_server_ip>
установить и сконфигурить окружение на сервере
salt-ssh 'demo-production' state.highstate
задеплоить код проекта, создать резервную копию базы, установит зависимости из requirements/requirements-production.txt и перезапустит сервисы
salt-ssh 'demo-production' state.sls apps/app_deploy
обновить записи DNS. Готово.
Жизнь после...
Теперь после смены пароля или деплое нового кода, необходимо запустить
salt-ssh 'demo-production' state.highstate salt-ssh 'demo-production' state.sls apps/app_deploy