diff --git a/group_vars/mailman.yml b/group_vars/mailman.yml index d101e33bcf406596d81e22b2162746c70ec5b53d..f04dd88f07e750d55b6ac0b2e95d60361d4d3fa6 100644 --- a/group_vars/mailman.yml +++ b/group_vars/mailman.yml @@ -7,6 +7,58 @@ loc_certbot: certname: crans.org domains: "*.crans.org" +loc_nginx: + service_name: mailman3 + upstreams: + - name: mailman3 + server: "unix:/run/mailman3-web/uwsgi.sock fail_timeout=0" + servers: + - ssl: false + server_name: + - "localhost" + locations: + - filter: "/" + params: + - "uwsgi_pass mailman3" + - "include /etc/nginx/uwsgi_params" + + - ssl: crans.org + default: true + server_name: + - "mailman.crans.org" + locations: + - filter: "/" + params: + - "uwsgi_pass mailman3" + - "satisfy any" + - "allow 185.230.76.0/22" + - "allow 2a0c:700:0::/40" + - "deny all" + - "auth_basic \"On n'aime pas les spambots, donc on a mis un mot de passe. Le login est Stop et le mot de passe est Spam.\"" + - "auth_basic_user_file /etc/nginx/passwd" + - "error_page 401 /error/401.html" + + - filter: "/mailman3/static" + params: + - "alias /var/lib/mailman3/web/static" + + - filter: "/mailman3/static/favicon.ico" + params: + - "alias /var/lib/mailman3/web/static/postorius/img/favicon.ico" + + - filter: "/error/" + params: + - "internal" + - "alias /var/www/" + + - filter: "/robots.txt" + params: + - "alias /var/www/robots.txt" + + auth_passwd: + Stop: "$apr1$NXaV5H7Q$J3ora3Jo5h775Y1nm93PN1" # Spam + deploy_robots_file: true + glob_mailman3: site_owner: root@crans.org database: diff --git a/plays/mailman.yml b/plays/mailman.yml index 2182e778e92268d08ed1e9b7c6961f3f0bb5dbe1..ae0231f6fa44571c53fed99637c5eb1032072de4 100755 --- a/plays/mailman.yml +++ b/plays/mailman.yml @@ -5,7 +5,9 @@ vars: certbot: '{{ loc_certbot | default(glob_certbot | default([])) }}' mailman3: '{{ glob_mailman3 | default({}) | combine(loc_mailman3 | default({})) }}' + nginx: '{{ glob_nginx | default({}) | combine(loc_nginx | default({})) }}' roles: - certbot + - nginx - mailman3 - postfix-mailman3 diff --git a/roles/mailman3/handlers/main.yml b/roles/mailman3/handlers/main.yml index 01c64c13fcad218496b79ba36933939618ff157a..cea846677dabedc22c205219310d8ba0a411b087 100644 --- a/roles/mailman3/handlers/main.yml +++ b/roles/mailman3/handlers/main.yml @@ -8,8 +8,3 @@ service: name: mailman3-web state: restarted - -- name: Restart nginx - service: - name: nginx - state: restarted diff --git a/roles/mailman3/tasks/main.yml b/roles/mailman3/tasks/main.yml index 57ad9799788e46e90b0809ff2dae8e83c6728156..6c507eaa05541df6f0fa30566d114c983002ea33 100644 --- a/roles/mailman3/tasks/main.yml +++ b/roles/mailman3/tasks/main.yml @@ -7,7 +7,6 @@ name: - dbconfig-no-thanks # Do not autoconfigure database - mailman3-full - - nginx - postgresql - python3-pip # CAS - python3-lxml # CAS @@ -54,21 +53,8 @@ group: www-data notify: Restart mailman3-web -- name: Configure nginx site - template: - src: nginx/sites-available/mailman3.j2 - dest: /etc/nginx/sites-available/mailman3 - notify: Restart nginx - -- name: Enable nginx site - file: - src: /etc/nginx/sites-available/mailman3 - dest: /etc/nginx/sites-enabled/mailman3 - state: link - notify: Restart nginx - - name: Indicate role in motd template: src: update-motd.d/05-service.j2 - dest: /etc/update-motd.d/04-mailman3 + dest: /etc/update-motd.d/05-mailman3 mode: 0755 diff --git a/roles/mailman3/templates/letsencrypt/conf.d/mailman.ini.j2 b/roles/mailman3/templates/letsencrypt/conf.d/mailman.ini.j2 deleted file mode 100644 index a5e63741d7a67f90792f284a9094e253d6377bd3..0000000000000000000000000000000000000000 --- a/roles/mailman3/templates/letsencrypt/conf.d/mailman.ini.j2 +++ /dev/null @@ -1,23 +0,0 @@ -{{ ansible_header | comment }} - -# To generate the certificate, please use the following command -# certbot --config /etc/letsencrypt/conf.d/mailman.ini certonly - -# Use a 4096 bit RSA key instead of 2048 -rsa-key-size = 4096 - -# Always use the staging/testing server -# server = https://acme-staging.api.letsencrypt.org/directory - -# Uncomment and update to register with the specified e-mail address -email = {{ mailman3.site_owner }} - -# Uncomment to use a text interface instead of ncurses -text = True - -# Use DNS-01 challenge -authenticator = nginx - -# Domains -cert-name = mailman.crans.org -domains = mailman.crans.org diff --git a/roles/mailman3/templates/nginx/sites-available/mailman3.j2 b/roles/mailman3/templates/nginx/sites-available/mailman3.j2 deleted file mode 100644 index 2d664910339290417c1e1bb5f86637ebb3c210c3..0000000000000000000000000000000000000000 --- a/roles/mailman3/templates/nginx/sites-available/mailman3.j2 +++ /dev/null @@ -1,76 +0,0 @@ -{{ ansible_header | comment }} - -upstream mailman3 { - server unix:/run/mailman3-web/uwsgi.sock fail_timeout=0; -} - -# Local hyperkitty API -server { - listen 80; - listen [::]:80; - - server_name localhost; - - location / { - uwsgi_pass mailman3; - include /etc/nginx/uwsgi_params; - } - - # Log into separate log files - access_log /var/log/nginx/mailman3_access.log combined; - error_log /var/log/nginx/mailman3_error.log; -} - -# Redirect http://mailman.crans.org to https://mailman.crans.org -server { - listen 80; - listen [::]:80; - - server_name mailman.crans.org; - - location / { - return 302 https://$host$request_uri; - } -} - -# Reverse proxify https://mailman.crans.org to UWSGI -server { - listen 443 ssl http2; - listen [::]:443 ssl http2; - - server_name mailman.crans.org; - server_tokens off; - - # SSL common conf - ssl_certificate /etc/letsencrypt/live/crans.org/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/crans.org/privkey.pem; - ssl_session_timeout 1d; - ssl_session_cache shared:MozSSL:10m; - ssl_session_tickets off; - ssl_dhparam /etc/letsencrypt/dhparam; - ssl_protocols TLSv1.2 TLSv1.3; - ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; - ssl_prefer_server_ciphers off; - - # Enable OCSP Stapling, point to certificate chain - ssl_stapling on; - ssl_stapling_verify on; - ssl_trusted_certificate /etc/letsencrypt/live/crans.org/chain.pem; - - location / { - uwsgi_pass mailman3; - include /etc/nginx/uwsgi_params; - } - - location /mailman3/static { - alias /var/lib/mailman3/web/static; - } - - location /mailman3/static/favicon.ico { - alias /var/lib/mailman3/web/static/postorius/img/favicon.ico; - } - - # Log into separate log files - access_log /var/log/nginx/mailman3_access.log combined; - error_log /var/log/nginx/mailman3_error.log; -} diff --git a/roles/nginx/templates/nginx/sites-available/service.j2 b/roles/nginx/templates/nginx/sites-available/service.j2 index 297d069df9ccb4018012c5df5e06ae560b2294ae..66c952493fb077b9806d54cd63e69440e02c5df7 100644 --- a/roles/nginx/templates/nginx/sites-available/service.j2 +++ b/roles/nginx/templates/nginx/sites-available/service.j2 @@ -91,8 +91,8 @@ server { listen [::]:443{% if server.default is defined and server.default %} default_server{% endif %} ssl; include "/etc/nginx/snippets/options-ssl.{{ server.ssl }}.conf"; {% else -%} - listen 80 default; - listen [::]:80 default; + listen 80{% if server.default is defined and server.default %} default_server{% endif %}; + listen [::]:80{% if server.default is defined and server.default %} default_server{% endif %}; {% endif -%} server_name {{ server.server_name|join(" ") }};