From 6b8fb0916fb2e79a05fb062e1ce011fd5a62fbf7 Mon Sep 17 00:00:00 2001
From: Yohann D'ANELLO <ynerant@crans.org>
Date: Mon, 22 Feb 2021 21:22:07 +0100
Subject: [PATCH] [nginx/moinmoin] Extract nginx configuration

Signed-off-by: Yohann D'ANELLO <ynerant@crans.org>
---
 group_vars/nginx.yml                          |  2 +-
 group_vars/wiki.yml                           | 37 +++++++++++
 host_vars/kiwi.adm.crans.org.yml              |  2 +-
 host_vars/sputnik.adm.crans.org               |  5 --
 host_vars/sputnik.adm.crans.org.yml           | 64 ++++++++++++++++++-
 hosts                                         |  8 +++
 plays/moinmoin.yml                            | 12 +++-
 roles/moinmoin/handlers/main.yml              |  5 --
 roles/moinmoin/tasks/main.yml                 | 13 ----
 .../templates/nginx/sites-available/wiki.j2   | 31 ---------
 10 files changed, 121 insertions(+), 58 deletions(-)
 create mode 100644 group_vars/wiki.yml
 delete mode 100644 host_vars/sputnik.adm.crans.org
 delete mode 100644 roles/moinmoin/templates/nginx/sites-available/wiki.j2

diff --git a/group_vars/nginx.yml b/group_vars/nginx.yml
index 774fa0e1..e2868541 100644
--- a/group_vars/nginx.yml
+++ b/group_vars/nginx.yml
@@ -28,5 +28,5 @@ glob_nginx:
   default_ssl_domain: crans.org
   real_ip_from:
     - "172.16.0.0/16"
-    - "2a0c:700:0:2::/64"
+    - "fd00:0:0:10::/64"
   deploy_robots_file: false
diff --git a/group_vars/wiki.yml b/group_vars/wiki.yml
new file mode 100644
index 00000000..310fe049
--- /dev/null
+++ b/group_vars/wiki.yml
@@ -0,0 +1,37 @@
+---
+glob_moinmoin:
+  main: false
+
+loc_nginx:
+  service_name: wiki
+  ssl: []
+  servers:
+    - server_name: "{{ query('ldap', 'ip', ansible_hostname, 'adm') | ipwrap + [ansible_hostname, ansible_hostname + '.adm.crans.org'] }}"
+      default: true
+      access_log: "/var/log/nginx/wiki.log combined"
+      error_log: "/var/log/nginx/wiki.error.log"
+      additional_params:
+        - "rewrite ^/$ $scheme://wiki.crans.org/PageAccueil"
+        - "client_max_body_size 15M"
+
+      locations:
+        - filter: "/wiki"
+          params:
+            - "alias /var/local/wiki/htdocs/"
+
+        - filter: "/robots.txt"
+          params:
+            - "alias /var/local/wiki/robots.txt"
+
+        - filter: "/favicon.ico"
+          params:
+            - "/var/local/wiki/favicon.ico"
+
+        - filter: "/www-sitemap.xml"
+          params:
+            - "alias /var/local/wiki/www-sitemap.xml"
+
+        - filter: "/"
+          params:
+            - "uwsgi_pass unix:///var/run/uwsgi/app/moinmoin/socket"
+            - "include uwsgi_params"
diff --git a/host_vars/kiwi.adm.crans.org.yml b/host_vars/kiwi.adm.crans.org.yml
index 162f1944..5ed64596 100644
--- a/host_vars/kiwi.adm.crans.org.yml
+++ b/host_vars/kiwi.adm.crans.org.yml
@@ -31,5 +31,5 @@ to_backup:
   read_only: "yes",
   }
 
-moinmoin:
+loc_moinmoin:
   main: true
diff --git a/host_vars/sputnik.adm.crans.org b/host_vars/sputnik.adm.crans.org
deleted file mode 100644
index 2878a578..00000000
--- a/host_vars/sputnik.adm.crans.org
+++ /dev/null
@@ -1,5 +0,0 @@
----
-loc_slapd:
-  ip: "{{ query('ldap', 'ip', 'sputnik', 'adm') | ipv4 | first }}"
-  replica: true
-  replica_rid: 4
diff --git a/host_vars/sputnik.adm.crans.org.yml b/host_vars/sputnik.adm.crans.org.yml
index 6b2473f1..c0aa02b8 100644
--- a/host_vars/sputnik.adm.crans.org.yml
+++ b/host_vars/sputnik.adm.crans.org.yml
@@ -23,5 +23,67 @@ to_backup:
   hosts_allow: ["zephir.adm.crans.org", "10.231.136.6", "172.31.0.1"],
   }
 
-moinmoin:
+loc_slapd:
+  ip: "{{ query('ldap', 'ip', 'sputnik', 'adm') | ipv4 | first }}"
+  replica: true
+  replica_rid: 4
+
+loc_moinmoin:
   main: false
+
+loc_certbot:
+  - dns_rfc2136_server: '172.16.10.147'
+    dns_rfc2136_name: certbot_adm_challenge.
+    dns_rfc2136_secret: "{{ vault.certbot_adm_dns_secret }}"
+    mail: root@crans.org
+    certname: adm.crans.org
+    domains: "*.adm.crans.org"
+  - dns_rfc2136_server: '172.16.10.147'
+    dns_rfc2136_name: certbot_challenge.
+    dns_rfc2136_secret: "{{ vault.certbot_dns_secret }}"
+    mail: root@crans.org
+    certname: crans.org
+    domains: "git2.crans.org, status.crans.org, wiki.crans.org"
+
+loc_nginx:
+  service_name: wiki
+  ssl:
+    - name: adm.crans.org
+      cert: /etc/letsencrypt/live/adm.crans.org/fullchain.pem
+      cert_key: /etc/letsencrypt/live/adm.crans.org/privkey.pem
+      trusted_cert: /etc/letsencrypt/live/adm.crans.org/chain.pem
+    - name: crans.org
+      cert: /etc/letsencrypt/live/crans.org/fullchain.pem
+      cert_key: /etc/letsencrypt/live/crans.org/privkey.pem
+      trusted_cert: /etc/letsencrypt/live/crans.org/chain.pem
+  servers:
+    - server_name:
+        - "wiki2.crans.org"
+      ssl : "crans.org"
+      access_log: "/var/log/nginx/wiki.log combined"
+      error_log: "/var/log/nginx/wiki.error.log"
+      additional_params:
+        - "rewrite ^/$ $scheme://wiki2.crans.org/PageAccueil"
+        - "client_max_body_size 15M"
+
+      locations:
+        - filter: "/wiki"
+          params:
+            - "alias /var/local/wiki/htdocs/"
+
+        - filter: "/robots.txt"
+          params:
+            - "alias /var/local/wiki/robots.txt"
+
+        - filter: "/favicon.ico"
+          params:
+            - "/var/local/wiki/favicon.ico"
+
+        - filter: "/www-sitemap.xml"
+          params:
+            - "alias /var/local/wiki/www-sitemap.xml"
+
+        - filter: "/"
+          params:
+            - "uwsgi_pass unix:///var/run/uwsgi/app/moinmoin/socket"
+            - "include uwsgi_params"
diff --git a/hosts b/hosts
index a42cb4f7..59945c46 100644
--- a/hosts
+++ b/hosts
@@ -20,6 +20,9 @@ tealc.adm.crans.org
 [belenios]
 belenios.adm.crans.org
 
+[certbot]
+sputnik.adm.crans.org
+
 [certbot:children]
 dovecot
 git
@@ -93,6 +96,7 @@ mailman
 reverseproxy
 roundcube
 thelounge
+wiki
 
 [ntp_server]
 charybde.adm.crans.org
@@ -136,6 +140,10 @@ daniel.adm.crans.org
 jack.adm.crans.org
 sam.adm.crans.org
 
+[wiki]
+kiwi.adm.crans.org
+sputnik.adm.crans.org
+
 [crans_routeurs:children]
 # dhcp  TODO: Really needed ?
 # keepalived
diff --git a/plays/moinmoin.yml b/plays/moinmoin.yml
index b9c63047..35207855 100755
--- a/plays/moinmoin.yml
+++ b/plays/moinmoin.yml
@@ -1,6 +1,16 @@
 #!/usr/bin/env ansible-playbook
 ---
+- hosts: certbot:&wiki
+  vars:
+    certbot: '{{ loc_certbot | default(glob_certbot | default([])) }}'
+  roles:
+    - certbot
+
 # Deploy MoinMoin Wiki
-- hosts: kiwi.adm.crans.org,soyouz.adm.crans.org,sputnik.adm.crans.org
+- hosts: wiki
+  vars:
+    moinmoin: '{{ glob_moinmoin | default({}) | combine(loc_moinmoin | default({})) }}'
+    nginx: '{{ glob_nginx | default({}) | combine(loc_nginx | default({})) }}'
   roles:
     - moinmoin
+    - nginx
diff --git a/roles/moinmoin/handlers/main.yml b/roles/moinmoin/handlers/main.yml
index ea116cb8..ba46876d 100644
--- a/roles/moinmoin/handlers/main.yml
+++ b/roles/moinmoin/handlers/main.yml
@@ -3,8 +3,3 @@
   service:
     name: uwsgi
     state: restarted
-
-- name: Restart nginx
-  service:
-    name: nginx
-    state: restarted
diff --git a/roles/moinmoin/tasks/main.yml b/roles/moinmoin/tasks/main.yml
index 50049b03..bef5dc51 100644
--- a/roles/moinmoin/tasks/main.yml
+++ b/roles/moinmoin/tasks/main.yml
@@ -40,19 +40,6 @@
     enabled: true
     state: started
 
-- name: Configure nginx
-  template:
-    src: nginx/sites-available/wiki.j2
-    dest: /etc/nginx/sites-available/wiki
-  notify: Restart nginx
-
-- name: Activate nginx site
-  file:
-    src: /etc/nginx/sites-available/wiki
-    dest: /etc/nginx/sites-enabled/wiki
-    state: link
-  notify: Restart nginx
-
 - name: Indicate role in motd
   template:
     src: update-motd.d/05-service.j2
diff --git a/roles/moinmoin/templates/nginx/sites-available/wiki.j2 b/roles/moinmoin/templates/nginx/sites-available/wiki.j2
deleted file mode 100644
index 4c7482f0..00000000
--- a/roles/moinmoin/templates/nginx/sites-available/wiki.j2
+++ /dev/null
@@ -1,31 +0,0 @@
-{{ ansible_header | comment }}
-
-server {
-    listen 80;
-    listen [::]:80;
-    server_name wiki.adm.crans.org;
-
-    access_log /var/log/nginx/wiki.log combined;
-    error_log /var/log/nginx/wiki.error.log;
-
-    # Redirect to home page
-    rewrite ^/$ $scheme://wiki.crans.org/PageAccueil;
-
-    # Limit uploads
-    client_max_body_size 15M;
-
-    # MoinMoin paths
-    location /wiki/ { alias /var/local/wiki/htdocs/; }
-    location /robots.txt { alias /var/local/wiki/robots.txt; }
-    location /favicon.ico { alias /var/local/wiki/favicon.ico; }
-    location /www-sitemap.xml { alias /var/local/wiki/www-sitemap.xml; }
-
-    location / {
-        uwsgi_pass unix:///var/run/uwsgi/app/moinmoin/socket;
-        include uwsgi_params;
-    }
-
-    set_real_ip_from 172.16.10.0/24;
-    set_real_ip_from fd00:0:0:10::/64;
-    real_ip_header X-Real-Ip;
-}
-- 
GitLab