Установка и развёртывание Django в один клик с помощью Ansible

Posted on 10 May 2016

Периодически мне приходится настраивать сервера под Django проекты. Настроить сервер для заказчика и перенести на него проект или показать как работает новая фича знакомому который находиться в соседнем городе. Это рутинные задачи на которые не хочется тратить время.

Сейчас существует несколько инструментов для автоматизации ручного труда chief, puppet и ansible. Про последний я услышал на одной из конференций и решил попробовать.

Так появился проект django-ansible-setup. Данный проект позволяет за 5 минут полностью настроить сервер и развернуть Ваш проект с помощью одной команды. После настойки на Ваш сервер будут установлены следующие пакеты:

  • Nginx
  • Gunicorn
  • Supervisor
  • Virtualenv
  • PostgreSQL

Давайте рассмотрим пример. Я создал простой проект с помощью прекрасного инструмента cookiecutter-django и разместил его в репозитории. В качестве хостинга я выбрал Digital Ocean (Я также тестировал этот playbook на Amazon EC2, не думаю что возникнуть проблемы с другими провайдерами).

Прежде всего установите ansible и скачайте репозиторий:

git clone https://github.com/myarik/django-ansible-setup

Теперь нам нужно настроить два файла server.ini (хост файл) и файл с переменными group_vars/webservers. В хост файле укажем имя нашего хоста, он должен находится в группе webservers и имя пользователя от которого будет работать ansible (убедитесь. что данный пользователь имеет sudo права)

[webservers]
digital_ocean_test ansible_ssh_user=root

Теперь файл с переменными.

---
git_repo: "https://github.com/myarik/demo_django_ansible_setup.git" # путь к репозирорию
application_name: my_project
setup_postgresql: true # требуется устанивить PostgreSql на сервер
# данные к базе данных 
database_name: "demo_test"
database_user: "demo"
database_password: "demo"
# Настройки окружения
django_environment:
    DEBUG: False
    DATABASE_URL: "postgres://demo:demo@localhost:5432/demo_test"
    DJANGO_SECRET_KEY: be&9u)d64q^@a__^1oswsezz((%li@j^5#=f!lm32n+21x!*2@
    DJANGO_ALLOWED_HOSTS: "*" 

Полный список переменных можно найти на github. Теперь можно запускать сценарий

ansible-playbook main.yml -i server.ini 

Вот и все, дальше ansible установить и настроить все пакеты, создаст базу данных, запустить миграции. В результате у Вас будет настроенный сервер с рабочим сайтом. Надеюсь это поможет Вам сократить время.