forked from gergely/calendar-social
Add Vagrant related files
This commit is contained in:
8
ansible/roles/common/tasks/main.yml
Normal file
8
ansible/roles/common/tasks/main.yml
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
|
||||
- name: Install required packages
|
||||
dnf:
|
||||
name: "{{ item }}"
|
||||
state: present
|
||||
with_items:
|
||||
- libselinux-python
|
10
ansible/roles/common/vars/main.yml
Normal file
10
ansible/roles/common/vars/main.yml
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
|
||||
# Project name
|
||||
project_name: calendar.social
|
||||
|
||||
# Project path
|
||||
project_path: /vagrant
|
||||
|
||||
# Flask app path
|
||||
application_path: /vagrant/app
|
56
ansible/roles/gunicorn/tasks/main.yml
Normal file
56
ansible/roles/gunicorn/tasks/main.yml
Normal file
@@ -0,0 +1,56 @@
|
||||
---
|
||||
|
||||
- name: Install Supervisor
|
||||
dnf:
|
||||
name: "{{ item }}"
|
||||
state: present
|
||||
with_items:
|
||||
- supervisor
|
||||
|
||||
- name: Start supervisord
|
||||
service:
|
||||
name: supervisord
|
||||
state: restarted
|
||||
|
||||
- name: Create the Gunicorn config directory
|
||||
file:
|
||||
path: /etc/gunicorn
|
||||
state: directory
|
||||
owner: "{{ user_name }}"
|
||||
group: "{{ group_name }}"
|
||||
mode: 0700
|
||||
|
||||
- name: Create the Gunicorn config file in /etc/gunicorn
|
||||
template:
|
||||
src: gunicorn.conf.j2
|
||||
dest: /etc/gunicorn/gunicorn.conf
|
||||
|
||||
- name: Create the Gunicorn log directory
|
||||
file:
|
||||
path: /var/log/gunicorn
|
||||
state: directory
|
||||
owner: "{{ user_name }}"
|
||||
group: "{{ group_name }}"
|
||||
mode: 0700
|
||||
|
||||
- name: Create the Supervisor config file for Gunicorn
|
||||
template:
|
||||
src: supervisor.conf.j2
|
||||
dest: /etc/supervisord.d/gunicorn.ini
|
||||
|
||||
- name: Re-read the Supervisor config files
|
||||
supervisorctl:
|
||||
name: gunicorn
|
||||
state: present
|
||||
|
||||
- name: Start Gunicorn with supervisord
|
||||
supervisorctl:
|
||||
name: gunicorn
|
||||
state: restarted
|
||||
when: enabled
|
||||
|
||||
- name: Stop Gunicorn for local dev
|
||||
supervisorctl:
|
||||
name: gunicorn
|
||||
state: stopped
|
||||
when: not enabled
|
9
ansible/roles/gunicorn/templates/gunicorn.conf.j2
Normal file
9
ansible/roles/gunicorn/templates/gunicorn.conf.j2
Normal file
@@ -0,0 +1,9 @@
|
||||
import multiprocessing
|
||||
|
||||
workers = multiprocessing.cpu_count() * 2 + 1
|
||||
proc_name = 'gunicorn'
|
||||
bind = '127.0.0.1:8000'
|
||||
errorlog = '/var/log/gunicorn/gunicorn-error.log'
|
||||
accesslog = '/var/log/gunicorn/gunicorn-access.log'
|
||||
loglevel = 'warning'
|
||||
timeout = 60
|
8
ansible/roles/gunicorn/templates/supervisor.conf.j2
Normal file
8
ansible/roles/gunicorn/templates/supervisor.conf.j2
Normal file
@@ -0,0 +1,8 @@
|
||||
[program:gunicorn]
|
||||
command=pipenv run gunicorn wsgi:app -c /etc/gunicorn/gunicorn.conf --pythonpath {{ application_path }}
|
||||
directory={{ application_path }}
|
||||
user={{ user_name }}
|
||||
group={{ group_name }}
|
||||
autorestart=true
|
||||
autostart={{ autostart | bool | lower }}
|
||||
redirect_stderr=true
|
11
ansible/roles/nginx/handlers/main.yml
Normal file
11
ansible/roles/nginx/handlers/main.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
|
||||
- name: Reload Nginx
|
||||
service:
|
||||
name: nginx
|
||||
state: reloaded
|
||||
|
||||
- name: Stop Nginx
|
||||
service:
|
||||
name: nginx
|
||||
state: stopped
|
42
ansible/roles/nginx/tasks/main.yml
Normal file
42
ansible/roles/nginx/tasks/main.yml
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
|
||||
- name: Install Nginx
|
||||
dnf:
|
||||
name: "{{ item }}"
|
||||
state: present
|
||||
with_items:
|
||||
- nginx
|
||||
|
||||
- name: Create the Nginx configuration file for SSL
|
||||
template:
|
||||
src: site-ssl.conf.j2
|
||||
dest: /etc/nginx/conf.d/{{ project_name }}-ssl.conf
|
||||
when: use_ssl
|
||||
notify: Reload Nginx
|
||||
|
||||
- name: Create the Nginx configuration file (non-SSL)
|
||||
template:
|
||||
src: site.conf.j2
|
||||
dest: /etc/nginx/conf.d/{{ project_name }}.conf
|
||||
when: not use_ssl
|
||||
notify: Reload Nginx
|
||||
|
||||
- name: Ensure that the default site is removed
|
||||
file:
|
||||
path: /etc/nginx/conf.d/default.conf
|
||||
state: absent
|
||||
|
||||
- name: Ensure Nginx service is started, enable service on restart
|
||||
service:
|
||||
name: nginx
|
||||
state: restarted
|
||||
enabled: yes
|
||||
when: enabled
|
||||
|
||||
- name: Stop nginx for local dev, disable service
|
||||
service:
|
||||
name: nginx
|
||||
state: stopped
|
||||
enabled: no
|
||||
notify: Stop Nginx
|
||||
when: not enabled
|
41
ansible/roles/nginx/templates/site-ssl.conf.j2
Normal file
41
ansible/roles/nginx/templates/site-ssl.conf.j2
Normal file
@@ -0,0 +1,41 @@
|
||||
upstream appserver {
|
||||
server localhost:8000 fail_timeout=0;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl deferred;
|
||||
server_name {{ host_name }};
|
||||
|
||||
ssl_certificate {{ home_path }}/{{ project_name }}.crt;
|
||||
ssl_certificate_key {{ home_path }}/{{ project_name }}.key;
|
||||
ssl_session_cache shared:SSL:32m;
|
||||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
|
||||
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
|
||||
ssl_prefer_server_ciphers on;
|
||||
|
||||
access_log /var/log/nginx/{{ project_name }}.access.log;
|
||||
error_log /var/log/nginx/{{ project_name }}.error.log info;
|
||||
|
||||
keepalive_timeout 5;
|
||||
|
||||
location /static {
|
||||
alias {{ project_path }}/static;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_redirect off;
|
||||
proxy_read_timeout 180s;
|
||||
|
||||
if (!-f $request_filename) {
|
||||
proxy_pass http://appserver;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
29
ansible/roles/nginx/templates/site.conf.j2
Normal file
29
ansible/roles/nginx/templates/site.conf.j2
Normal file
@@ -0,0 +1,29 @@
|
||||
upstream appserver {
|
||||
server localhost:8000 fail_timeout=0;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name {{ host_name }};
|
||||
|
||||
access_log /var/log/nginx/{{ project_name }}.access.log;
|
||||
error_log /var/log/nginx/{{ project_name }}.error.log info;
|
||||
|
||||
keepalive_timeout 5;
|
||||
|
||||
location /static {
|
||||
alias {{ project_path }}/static;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_redirect off;
|
||||
proxy_read_timeout 180s;
|
||||
|
||||
if (-f $request_filename) {
|
||||
proxy_pass http://appserver;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
3
ansible/roles/nginx/vars/main.yml
Normal file
3
ansible/roles/nginx/vars/main.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
---
|
||||
|
||||
host_name: calendar-social.local
|
22
ansible/roles/python/tasks/main.yml
Normal file
22
ansible/roles/python/tasks/main.yml
Normal file
@@ -0,0 +1,22 @@
|
||||
---
|
||||
|
||||
- name: Install common python packages
|
||||
dnf:
|
||||
name: "{{ item }}"
|
||||
state: present
|
||||
with_items:
|
||||
- pipenv
|
||||
|
||||
- name: Delete Python cache files
|
||||
command: find . -type d -name __pycache__ -exec rm -r {} +
|
||||
args:
|
||||
chdir: "{{ project_path }}"
|
||||
changed_when: false
|
||||
|
||||
- name: Install packages
|
||||
command: pipenv install --python=/usr/bin/python3.6m --three --system --deploy
|
||||
|
||||
- name: Install development related packages
|
||||
command: pipenv install --python=/usr/bin/python3.6m --three --system --deploy --dev
|
||||
args:
|
||||
chdir: "{{ project_path }}"
|
Reference in New Issue
Block a user