2020-11-30 10:40:31 +00:00
|
|
|
---
|
|
|
|
|
|
|
|
- hosts: webservers
|
|
|
|
tasks:
|
|
|
|
- name: Basic setup
|
|
|
|
include_role: name=common
|
|
|
|
|
2021-03-16 13:22:04 +00:00
|
|
|
- name: Install irker
|
|
|
|
apt:
|
|
|
|
name: irker
|
|
|
|
state: present
|
|
|
|
|
2020-11-30 10:40:31 +00:00
|
|
|
- name: Setup pydocteur.afpy.org
|
2021-11-18 12:53:32 +00:00
|
|
|
include_role: name=nginx
|
2020-11-30 10:40:31 +00:00
|
|
|
vars:
|
|
|
|
nginx_owner: pydocteur-afpy-org
|
|
|
|
nginx_domain: pydocteur.afpy.org
|
|
|
|
nginx_certificates: [pydocteur.afpy.org]
|
|
|
|
nginx_public_deploy_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDPqZ20aNdTDrePRQT0obzUF0yn/o3cWEFwaf/MtAOmVxpJZiTZzaikU58qLVaTxfZpULMf2yIB9a1v0FhUOHde30+FFyxuGCMmV9lHT7wA4TS3Ucqj2kqzV2Qby/3IjxI41MXpbIFBj7K7TaJKfCPb2ToAuxbyiSiLXDre+xpSfR8qNAz1nObJPR/NbrJRzHnLywml1b7j1kPbbGfUvh3jtMa9a9eN3xotxGsLM8Da+R86xagC6lChJqxzM2zlsqXMhwnf/ntNAIJC6CpVpwdKTF6S8VIVC2UyB9oMnP43B1ijAETuNYG/nm4nE5IkQ14SiiQyRqdfX7+y5Pt2BfOxwVEedvcdAHZIj3v0fDr+23lf2AXR2v9V2JWT0BVLSJ6s2DHrumXkbS+XQkJWjxSZUUN7zg+J/+sPRrYERo+wIzLxXGGycrRgmQKLH6OJIy2/n/L8KtZfvxm6u90WIHu6RYTU9rqvzoqtEImDegOtzPqDFsljm8simginlqQo5gk= pydocteur"
|
|
|
|
nginx_conf: |
|
|
|
|
server
|
|
|
|
{
|
2021-12-30 20:33:48 +00:00
|
|
|
listen [::]:80; listen 80;
|
2020-11-30 10:40:31 +00:00
|
|
|
server_name pydocteur.afpy.org;
|
|
|
|
return 301 https://$host$request_uri;
|
|
|
|
}
|
|
|
|
|
|
|
|
server
|
|
|
|
{
|
2023-02-13 21:40:47 +00:00
|
|
|
listen [::]:443 ssl http2; listen 443 ssl http2;
|
2020-11-30 10:40:31 +00:00
|
|
|
server_name pydocteur.afpy.org;
|
|
|
|
include snippets/letsencrypt-pydocteur.afpy.org.conf;
|
|
|
|
location /
|
|
|
|
{
|
|
|
|
include proxy_params;
|
|
|
|
proxy_pass http://unix:/home/pydocteur-afpy-org/wsgi.sock;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
- name: PyDocTeur have its own systemd user daemon started at boot
|
|
|
|
command:
|
|
|
|
cmd: loginctl enable-linger pydocteur-afpy-org
|
|
|
|
creates: "/var/lib/systemd/linger/pydocteur-afpy-org"
|
|
|
|
|
|
|
|
- name: Initial clone
|
|
|
|
become: true
|
|
|
|
become_user: pydocteur-afpy-org
|
|
|
|
git:
|
|
|
|
repo: https://github.com/AFPy/PyDocTeur/
|
|
|
|
dest: /home/pydocteur-afpy-org/src/
|
|
|
|
update: no
|
|
|
|
|
|
|
|
- name: pip install requirements
|
|
|
|
become: true
|
|
|
|
become_user: pydocteur-afpy-org
|
|
|
|
pip:
|
|
|
|
requirements: /home/pydocteur-afpy-org/src/requirements.txt
|
|
|
|
virtualenv_command: /usr/bin/python3 -m venv
|
|
|
|
virtualenv: "/home/pydocteur-afpy-org/venv/"
|
|
|
|
|
2021-03-16 13:22:04 +00:00
|
|
|
- name: pip install gunicorn and irker-handler
|
2020-11-30 10:40:31 +00:00
|
|
|
become: true
|
|
|
|
become_user: pydocteur-afpy-org
|
|
|
|
pip:
|
2021-12-31 10:43:26 +00:00
|
|
|
name: [gunicorn, irker-handler]
|
2020-11-30 10:40:31 +00:00
|
|
|
virtualenv_command: /usr/bin/python3 -m venv
|
|
|
|
virtualenv: "/home/pydocteur-afpy-org/venv/"
|
|
|
|
|
|
|
|
- name: systemd user directory
|
|
|
|
file:
|
|
|
|
path: /home/pydocteur-afpy-org/.local/share/systemd/user/
|
|
|
|
state: directory
|
|
|
|
|
|
|
|
- name: systemd pydocteur.afpy.org service
|
|
|
|
copy:
|
|
|
|
dest: /home/pydocteur-afpy-org/.local/share/systemd/user/pydocteur.service
|
|
|
|
content: |
|
|
|
|
[Unit]
|
|
|
|
Description=PyDocTeur Github hook
|
|
|
|
After=network.target
|
|
|
|
|
|
|
|
[Service]
|
|
|
|
PIDFile=/home/pydocteur-afpy-org/service.pid
|
|
|
|
WorkingDirectory=/home/pydocteur-afpy-org/src/
|
2021-03-16 13:22:04 +00:00
|
|
|
ExecStart=/home/pydocteur-afpy-org/venv/bin/gunicorn \
|
|
|
|
--workers 1 \
|
2020-11-30 10:40:31 +00:00
|
|
|
--pid /home/pydocteur-afpy-org/service.pid \
|
|
|
|
--bind unix:/home/pydocteur-afpy-org/wsgi.sock \
|
|
|
|
wsgi
|
|
|
|
|
|
|
|
ExecReload=/bin/kill -s HUP $MAINPID
|
|
|
|
ExecStop=/bin/kill -s TERM $MAINPID
|
|
|
|
PrivateTmp=true
|
|
|
|
|
|
|
|
[Install]
|
|
|
|
WantedBy=multi-user.target
|
|
|
|
|
|
|
|
- name: Configure PyDocTeur
|
|
|
|
copy:
|
2020-12-18 08:30:01 +00:00
|
|
|
content: |
|
|
|
|
{{ vault_pydocteur_env }}
|
|
|
|
LOGGING=/home/pydocteur-afpy-org/logging.yml
|
2020-11-30 10:40:31 +00:00
|
|
|
dest: /home/pydocteur-afpy-org/src/.env
|
|
|
|
|
2021-03-16 13:22:04 +00:00
|
|
|
|
2020-12-18 08:30:01 +00:00
|
|
|
- name: Configure PyDocTeur logging
|
|
|
|
notify: restart pydocteur
|
|
|
|
copy:
|
2021-03-16 13:22:04 +00:00
|
|
|
dest: /home/pydocteur-afpy-org/logging.yml
|
2020-12-18 08:30:01 +00:00
|
|
|
content: |
|
|
|
|
---
|
|
|
|
|
|
|
|
version: 1
|
|
|
|
disable_existing_loggers: false
|
|
|
|
handlers:
|
|
|
|
stderr:
|
|
|
|
class: logging.StreamHandler
|
|
|
|
stream: ext://sys.stderr
|
|
|
|
level: DEBUG
|
|
|
|
email:
|
|
|
|
class: logging.handlers.SMTPHandler
|
|
|
|
mailhost: 127.0.0.1
|
|
|
|
fromaddr: pydocteur@afpy.org
|
|
|
|
toaddrs: [afpy-web@lists.afpy.org]
|
|
|
|
subject: PyDocTeur Exception
|
|
|
|
level: ERROR
|
2021-03-16 13:22:04 +00:00
|
|
|
irc:
|
|
|
|
class: irker_handler.IrkerHandler
|
2021-05-21 06:45:08 +00:00
|
|
|
to: irc://irc.libera.chat/python-docs-fr
|
2021-03-17 10:50:03 +00:00
|
|
|
level: WARNING
|
2020-12-18 08:30:01 +00:00
|
|
|
loggers:
|
2021-03-16 13:22:04 +00:00
|
|
|
gunicorn.error:
|
|
|
|
level: INFO
|
|
|
|
handlers: [stderr, email]
|
2020-12-18 08:30:01 +00:00
|
|
|
pydocteur:
|
|
|
|
level: DEBUG
|
2021-03-16 13:22:04 +00:00
|
|
|
handlers: [irc, stderr, email]
|
2020-12-18 08:30:01 +00:00
|
|
|
urllib3:
|
|
|
|
level: INFO
|
|
|
|
handlers: [stderr]
|
|
|
|
reqests:
|
|
|
|
level: INFO
|
|
|
|
handlers: [stderr]
|
|
|
|
github:
|
|
|
|
level: INFO
|
|
|
|
handlers: [stderr]
|
|
|
|
|
|
|
|
|
2020-11-30 10:40:31 +00:00
|
|
|
- name: Start PyDocTeur
|
|
|
|
become: true
|
|
|
|
become_user: pydocteur-afpy-org
|
|
|
|
systemd:
|
|
|
|
daemon_reload: yes
|
|
|
|
scope: user
|
|
|
|
state: started
|
|
|
|
name: pydocteur
|
|
|
|
|
|
|
|
handlers:
|
2020-12-18 08:30:01 +00:00
|
|
|
- name: restart pydocteur
|
|
|
|
become: true
|
|
|
|
become_user: pydocteur-afpy-org
|
|
|
|
systemd:
|
|
|
|
daemon_reload: yes
|
|
|
|
scope: user
|
|
|
|
state: restarted
|
|
|
|
name: pydocteur
|
|
|
|
|
2020-11-30 10:40:31 +00:00
|
|
|
- name: reload nginx
|
|
|
|
service: name=nginx state=reloaded
|