>

Развертывание Django проекта при помощи salt-ssh

Хотел рассказать, как при помощи Saltstack быстро и легко развернуть проект на Django.

Статья будет полезна тем, кто хочет легко и быстро запустить небольшой Django проект, для сложных проектов данный способ может оказаться не таким эффективным и удобным. Основное преимущество излагаемого способа - его простота именно применимо к небольшим проектам.

Чтоб не тратить зря ваше время, сразу обозначу преимущества и недостатки предалагаемого алгоритма.

Преимущества:

  • отсутствует необходимость в инфраструктуре для развертывания кода, код деплоится из директории проекта
  • простота, не требуется глубокого понимания систем развертки инфраструктуры

Недостатки:

  • данный способ из коробки будет работаь когда весь проект помещается на одном сервере
  • использыемый salt-ssh обладает сильно урезаной функциональностью, по сравнению с командой salt

 

В итоге вы получите, возможность набрав несколько команд, сконфигурировать сервер с необходимыми зависимостями и задеплоить туда код.

И так, приступим. Все описаные действия проделаны на Debian/Jessie.

Для начала надо скачать шаблон проекта Django проекта с интегрированым Saltstack скачать.

 

Устанавливаем последнюю версию salt-ssh

создаем файл /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

blog comments powered by Disqus