From 3b040fac09eb158caf963d7c956610f99f8e0c17 Mon Sep 17 00:00:00 2001 From: Johannes Stoelp Date: Mon, 5 Dec 2022 21:42:17 +0100 Subject: initial ansible setup --- roles/webserver/files/user_conf.d/memzero.conf | 43 ++++++++++++++++++++++ roles/webserver/files/www/git/index.html | 1 + roles/webserver/files/www/memzero/index.html | 1 + roles/webserver/handlers/main.yml | 6 ++++ roles/webserver/tasks/main.yml | 49 ++++++++++++++++++++++++++ 5 files changed, 100 insertions(+) create mode 100644 roles/webserver/files/user_conf.d/memzero.conf create mode 100644 roles/webserver/files/www/git/index.html create mode 100644 roles/webserver/files/www/memzero/index.html create mode 100644 roles/webserver/handlers/main.yml create mode 100644 roles/webserver/tasks/main.yml (limited to 'roles/webserver') diff --git a/roles/webserver/files/user_conf.d/memzero.conf b/roles/webserver/files/user_conf.d/memzero.conf new file mode 100644 index 0000000..5419eb8 --- /dev/null +++ b/roles/webserver/files/user_conf.d/memzero.conf @@ -0,0 +1,43 @@ +server { + # Listen to port 443 on both IPv4 and IPv6. + listen 443 ssl; + listen [::]:443 ssl; + + # Domain names this server should respond to. + server_name memzero.de www.memzero.de; + + # Load the certificate files. + ssl_certificate /etc/letsencrypt/live/memzero/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/memzero/privkey.pem; + ssl_trusted_certificate /etc/letsencrypt/live/memzero/chain.pem; + + # Load the Diffie-Hellman parameter. + ssl_dhparam /etc/letsencrypt/dhparams/dhparam.pem; + + root /www/memzero; +} + +server { + # Listen to port 443 on both IPv4 and IPv6. + listen 443 ssl; + listen [::]:443 ssl; + + # Domain names this server should respond to. + server_name git.memzero.de; + + # Load the certificate files. + ssl_certificate /etc/letsencrypt/live/memzero/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/memzero/privkey.pem; + ssl_trusted_certificate /etc/letsencrypt/live/memzero/chain.pem; + + # Load the Diffie-Hellman parameter. + ssl_dhparam /etc/letsencrypt/dhparams/dhparam.pem; + + root /www/git; +} + +server { + # Drop any request that does not match any of the other server names. + listen 443 ssl default_server; + ssl_reject_handshake on; +} diff --git a/roles/webserver/files/www/git/index.html b/roles/webserver/files/www/git/index.html new file mode 100644 index 0000000..a6978b1 --- /dev/null +++ b/roles/webserver/files/www/git/index.html @@ -0,0 +1 @@ +

Hello git!

diff --git a/roles/webserver/files/www/memzero/index.html b/roles/webserver/files/www/memzero/index.html new file mode 100644 index 0000000..4df77a4 --- /dev/null +++ b/roles/webserver/files/www/memzero/index.html @@ -0,0 +1 @@ +

Hello memzero!

diff --git a/roles/webserver/handlers/main.yml b/roles/webserver/handlers/main.yml new file mode 100644 index 0000000..3e327d5 --- /dev/null +++ b/roles/webserver/handlers/main.yml @@ -0,0 +1,6 @@ +--- +- name: Restart nginx + containers.podman.podman_container: + name: webserver + state: started + restart: yes \ No newline at end of file diff --git a/roles/webserver/tasks/main.yml b/roles/webserver/tasks/main.yml new file mode 100644 index 0000000..a849f2c --- /dev/null +++ b/roles/webserver/tasks/main.yml @@ -0,0 +1,49 @@ +--- +- name: Copy webserver files + ansible.builtin.copy: + src: "{{ item }}" + dest: "{{ DATA_ROOT }}/nginx" + owner: "{{ USER }}" + group: "{{ USER }}" + loop: + - www + - user_conf.d + notify: Restart nginx + +- name: Setup nginx + containers.podman.podman_container: + name: webserver + image: docker.io/jonasal/nginx-certbot + network: "{{ NETWORK }}" + ports: + - "8080:80" + - "8443:443" + env: + CERTBOT_EMAIL: "johannes@memzero.de" + STAGING: "1" + DEBUG: "1" + volumes: + # Use 'Z' to privately relable selinux contexts. + - "{{ DATA_ROOT }}/nginx/user_conf.d:/etc/nginx/user_conf.d:ro,Z" + - "{{ DATA_ROOT }}/nginx/www:/www:ro,Z" + +# All services run in rootless-podman and nginx is the only entry point from +# the outside acting as webserver and reverse proxy. +# Since we dont want to lower the *unprivileged* port start (1024) we install +# two forwarding routes from +# 80 -> 8080 +# 443 -> 8443 +- name: Forward port 80/443 to 8080/8443 + ansible.builtin.iptables: + table: nat + chain: PREROUTING + protocol: tcp + match: tcp + destination_port: "{{ item.from }}" + jump: REDIRECT + to_ports: "{{ item.to }}" + comment: "Redirect web traffic {{ item.from }} -> {{ item.to }}" + become: yes + loop: + - { from: 80 , to: 8080 } + - { from: 443, to: 8443 } \ No newline at end of file -- cgit v1.2.3