Пишем плагин для fuel 8.0. Часть 3

В предыдущей части мы добавили в плагин django приложение и базу данных.

А теперь мы реализуем следующую функциональность плагина:

  • запуск django приложения через supervisor->gunicorn
  • установка web-сервера nginx

Исходники этого урока выложены на github

Добавляем задачу для supervisor, gunicorn

Gunicorn у нас установлен уже в окружении

Пишем задачу для установки и настройки supervisor, deployment_tasks.yaml

...
- id: fuel-plugin-django-app_supervisor
  type: puppet
  groups: [fuel-plugin-django-app_role]  
  requires: [fuel-plugin-django-app_deploy-app]
  parameters:      
    puppet_manifest: "supervisor.pp"
    puppet_modules: "."
    timeout: 1800

Создаем манифест файл, deployments_scripts/supervisor.pp

$plugin_source_dir = '/etc/fuel/plugins/fuel-plugin-django-app-1.0/'
package {
    'supervisor':
        ensure => 'present',
}

service {
    'supervisor':
        ensure => 'running',
        enable => 'true'
}

file {
    '/etc/supervisor/conf.d/blog.conf':
        content => file("${plugin_source_dir}etc/supervisor/conf.d/blog.conf"),
        notify  => Service['supervisor']
}

Создаем файл конфиг для супервизора, deployments_scripts/etc/supervisor/conf.d/blog.conf

[program:website]
command=/var/www/blog/env/bin/gunicorn
    --bind=unix:/tmp/blog.sock 
    --access-logfile /var/www/blog/logs/gunicorn_acces.log 
    --error-logfile /var/www/blog/logs/gunicorn_error.log
    blog.wsgi:application

directory=/var/www/blog/

user=root
group=root

daemon=False
debug=False

autostart=true
autorestart=true

redirect_stderr=True
redirect_stdout=True

stdout_logfile=/var/www/blog/logs/supervisor_out.log
stderr_logfile=/var/www/blog/logs/supervisor_err.log

Добавляем задачу для nginx

Пишем задачу для установки и настройки nginx, deployment_tasks.yaml

....
- id: fuel-plugin-django-app_nginx
  type: puppet
  groups: [fuel-plugin-django-app_role]  
  requires: [fuel-plugin-django-app_supervisor]
  parameters:      
    puppet_manifest: "nginx.pp"
    puppet_modules: "."
    timeout: 1800

Создаем манифест файл, deployments_scripts/nginx.pp

$plugin_source_dir = '/etc/fuel/plugins/fuel-plugin-django-app-1.0/'
package {
    'nginx':
        ensure => 'present',
}

service {
    'nginx':
        ensure => 'running',
        enable => 'true'
}

file {
    '/etc/nginx/sites-available/blog':
        content => file("${plugin_source_dir}etc/nginx/sites-available/blog"),
}

file {
    '/etc/nginx/sites-enabled/default':
        ensure => absent,
}

file {
    '/etc/nginx/sites-enabled/blog':
        ensure => 'link',
        target => '/etc/nginx/sites-available/blog',
        notify => Service['nginx']
}

Создаем файл конфиг для nginx, deployments_scripts/etc/nginx/sites-available/blog

upstream backend_blog  {
    server unix:/tmp/blog.sock;
}

server {
    listen          80;
    access_log      /var/www/blog/logs/nginx_access.log;
    error_log       /var/www/blog/logs/nginx_error.log;

    location / {
        proxy_pass      http://backend_blog;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /media {
        alias /var/www/blog/media/;
    }

    location /static {
        alias /var/www/blog/static;
    }
}

Готово

Собираем, деплоим.