feat: Add nginx-proxy role for nginx and certbot
This commit is contained in:
@@ -1,26 +1,94 @@
|
|||||||
zfs_pool_name: bigpool
|
---
|
||||||
ip: 192.168.5.7
|
mydomain: matous.vondrejka.cz
|
||||||
ip_admin: 192.168.6.7
|
|
||||||
mysql_host: "{{ ip_admin }}"
|
|
||||||
gateway: 192.168.6.1
|
|
||||||
|
|
||||||
wireguard-server:
|
servernames:
|
||||||
wstunnel-download-url: https://github.com/erebe/wstunnel/releases/download/v10.5.2/wstunnel_10.5.2_linux_amd64.tar.gz
|
jellyfin:
|
||||||
internal-port: 51822
|
internal: true
|
||||||
|
upgraded: false
|
||||||
wireguard-client:
|
server: "jellyfin"
|
||||||
ntb:
|
port: 8096
|
||||||
ip: 10.0.0.2
|
nextcloud:
|
||||||
tata:
|
internal: false
|
||||||
ip: 10.0.0.4
|
upgraded: false
|
||||||
pi:
|
server: "192.168.100.11"
|
||||||
ip: 10.0.0.5
|
port: 8080
|
||||||
desktop:
|
jellyfin-public:
|
||||||
ip: 10.0.0.6
|
internal: false
|
||||||
|
upgraded: false
|
||||||
samba_users:
|
server: "192.168.100.21"
|
||||||
- name: warezjoe
|
port: 8096
|
||||||
path: /warezjoe
|
name_override: jellyfin
|
||||||
|
transmission:
|
||||||
- name: tata
|
internal: true
|
||||||
path: /tata
|
upgraded: true
|
||||||
|
server: "192.168.100.18"
|
||||||
|
port: 9091
|
||||||
|
herodes:
|
||||||
|
internal: true
|
||||||
|
upgraded: false
|
||||||
|
server: "192.168.100.2"
|
||||||
|
port: 8006
|
||||||
|
prometheus:
|
||||||
|
internal: true
|
||||||
|
upgraded: false
|
||||||
|
server: "192.168.100.14"
|
||||||
|
port: 9090
|
||||||
|
n8n:
|
||||||
|
internal: false
|
||||||
|
upgraded: true
|
||||||
|
server: "192.168.100.19"
|
||||||
|
port: 5678
|
||||||
|
glance:
|
||||||
|
internal: false
|
||||||
|
upgraded: false
|
||||||
|
server: "192.168.100.11"
|
||||||
|
port: 81
|
||||||
|
uptimekuma:
|
||||||
|
internal: true
|
||||||
|
upgraded: false
|
||||||
|
server: "192.168.100.13"
|
||||||
|
port: 3001
|
||||||
|
photoprism:
|
||||||
|
internal: false
|
||||||
|
upgraded: true
|
||||||
|
server: "192.168.100.7"
|
||||||
|
port: 2342
|
||||||
|
openclaw:
|
||||||
|
internal: false
|
||||||
|
upgraded: true
|
||||||
|
server: "192.168.100.22"
|
||||||
|
port: 18789
|
||||||
|
wireguard:
|
||||||
|
internal: false
|
||||||
|
upgraded: true
|
||||||
|
server: "192.168.100.5"
|
||||||
|
port: 8080
|
||||||
|
pi-hole:
|
||||||
|
internal: true
|
||||||
|
upgraded: false
|
||||||
|
server: "192.168.100.6"
|
||||||
|
port: 80
|
||||||
|
server_names:
|
||||||
|
- pi-hole.admin.matous.vondrejka.cz
|
||||||
|
- pi-hole.lan
|
||||||
|
gitea:
|
||||||
|
internal: false
|
||||||
|
upgraded: false
|
||||||
|
server: "192.168.100.8"
|
||||||
|
port: 3000
|
||||||
|
nginx-admin:
|
||||||
|
internal: true
|
||||||
|
upgraded: false
|
||||||
|
server: "localhost"
|
||||||
|
port: 81
|
||||||
|
name_override: nginx.admin
|
||||||
|
grafana:
|
||||||
|
internal: true
|
||||||
|
upgraded: false
|
||||||
|
server: "192.168.100.15"
|
||||||
|
port: 3000
|
||||||
|
loki:
|
||||||
|
internal: true
|
||||||
|
upgraded: false
|
||||||
|
server: "loki"
|
||||||
|
port: 3100
|
||||||
|
|||||||
5
playbooks/services/nginx-proxy.yml
Normal file
5
playbooks/services/nginx-proxy.yml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
- name: nginx proxy init
|
||||||
|
hosts: proxy-clean
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- nginx-proxy
|
||||||
5
roles/nginx-proxy/handlers/main.yml
Normal file
5
roles/nginx-proxy/handlers/main.yml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
- name: Restart Nginx
|
||||||
|
ansible.builtin.service:
|
||||||
|
name: nginx
|
||||||
|
state: restarted
|
||||||
10
roles/nginx-proxy/tasks/create_vhosts.yml
Normal file
10
roles/nginx-proxy/tasks/create_vhosts.yml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
- name: Create Nginx vhost configurations
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: nginx-vhost.conf.j2
|
||||||
|
dest: "/etc/nginx/conf.d/{{ item.key }}.conf"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: '0644'
|
||||||
|
loop: "{{ servernames | dict2items }}"
|
||||||
|
notify: Restart Nginx
|
||||||
23
roles/nginx-proxy/tasks/generate_certs.yml
Normal file
23
roles/nginx-proxy/tasks/generate_certs.yml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
- name: Stop Nginx before Certbot (if it is running)
|
||||||
|
ansible.builtin.service:
|
||||||
|
name: nginx
|
||||||
|
state: stopped
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- name: Generate Certbot certificates
|
||||||
|
ansible.builtin.command: >
|
||||||
|
certbot certonly --standalone
|
||||||
|
--non-interactive
|
||||||
|
--agree-tos
|
||||||
|
--email {{ certbot_email | default("admin@" + mydomain) }}
|
||||||
|
-d {{ item.key + "." + mydomain if not item.value.internal else item.key + ".internal." + mydomain }}
|
||||||
|
loop: "{{ servernames | dict2items }}"
|
||||||
|
when: not item.value.internal
|
||||||
|
args:
|
||||||
|
creates: "/etc/letsencrypt/live/{{ item.key + "." + mydomain if not item.value.internal else item.key + ".internal." + mydomain }}/fullchain.pem"
|
||||||
|
|
||||||
|
- name: Start Nginx after Certbot
|
||||||
|
ansible.builtin.service:
|
||||||
|
name: nginx
|
||||||
|
state: started
|
||||||
7
roles/nginx-proxy/tasks/install_certbot.yml
Normal file
7
roles/nginx-proxy/tasks/install_certbot.yml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
- name: Install Certbot and Nginx plugin
|
||||||
|
ansible.builtin.apt:
|
||||||
|
name:
|
||||||
|
- certbot
|
||||||
|
- python3-certbot-nginx
|
||||||
|
state: present
|
||||||
48
roles/nginx-proxy/tasks/install_nginx.yml
Normal file
48
roles/nginx-proxy/tasks/install_nginx.yml
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
---
|
||||||
|
- name: Install Nginx
|
||||||
|
ansible.builtin.apt:
|
||||||
|
name: nginx
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Ensure Nginx is enabled and started
|
||||||
|
ansible.builtin.service:
|
||||||
|
name: nginx
|
||||||
|
state: started
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
- name: Create Nginx includes directory
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: /etc/nginx/conf.d/include
|
||||||
|
state: directory
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: Create proxy.conf include
|
||||||
|
ansible.builtin.copy:
|
||||||
|
content: |
|
||||||
|
add_header X-Served-By $host;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Forwarded-Scheme $scheme;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_pass $forward_scheme://$server:$port$request_uri;
|
||||||
|
dest: /etc/nginx/conf.d/include/proxy.conf
|
||||||
|
|
||||||
|
- name: Create internal.conf include (access rules)
|
||||||
|
ansible.builtin.copy:
|
||||||
|
content: |
|
||||||
|
deny 192.168.5.1;
|
||||||
|
allow 192.168.100.0/24;
|
||||||
|
allow 10.0.0.1/24;
|
||||||
|
deny all;
|
||||||
|
satisfy all;
|
||||||
|
dest: /etc/nginx/conf.d/include/internal.conf
|
||||||
|
|
||||||
|
- name: Create upgrade.conf include
|
||||||
|
ansible.builtin.copy:
|
||||||
|
content: |
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
proxy_pass_header X-Transmission-Session-Id;
|
||||||
|
dest: /etc/nginx/conf.d/include/upgrade.conf
|
||||||
|
|
||||||
16
roles/nginx-proxy/tasks/main.yml
Normal file
16
roles/nginx-proxy/tasks/main.yml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
- name: Include Nginx installation and configuration tasks
|
||||||
|
ansible.builtin.include_tasks:
|
||||||
|
file: install_nginx.yml
|
||||||
|
|
||||||
|
- name: Include Certbot installation and configuration tasks
|
||||||
|
ansible.builtin.include_tasks:
|
||||||
|
file: install_certbot.yml
|
||||||
|
|
||||||
|
- name: Include Generate Certs tasks
|
||||||
|
ansible.builtin.include_tasks:
|
||||||
|
file: generate_certs.yml
|
||||||
|
|
||||||
|
- name: Include Create Vhosts tasks
|
||||||
|
ansible.builtin.include_tasks:
|
||||||
|
file: create_vhosts.yml
|
||||||
34
roles/nginx-proxy/templates/nginx-vhost.conf.j2
Normal file
34
roles/nginx-proxy/templates/nginx-vhost.conf.j2
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
listen [::]:80;
|
||||||
|
|
||||||
|
listen 443 ssl;
|
||||||
|
listen [::]:443 ssl;
|
||||||
|
|
||||||
|
server_name {{ item.key + "." + mydomain if not item.value.internal else item.key + ".internal." + mydomain }};
|
||||||
|
|
||||||
|
ssl_certificate /etc/letsencrypt/live/{{ item.key + "." + mydomain if not item.value.internal else item.key + ".internal." + mydomain }}/fullchain.pem;
|
||||||
|
ssl_certificate_key /etc/letsencrypt/live/{{ item.key + "." + mydomain if not item.value.internal else item.key + ".internal." + mydomain }}/privkey.pem;
|
||||||
|
|
||||||
|
include /etc/nginx/conf.d/include/ssl-ciphers.conf;
|
||||||
|
include /etc/nginx/conf.d/include/ssl-cache.conf;
|
||||||
|
include /etc/nginx/conf.d/include/force-ssl.conf;
|
||||||
|
|
||||||
|
access_log /var/log/nginx/{{ item.key }}_access.log;
|
||||||
|
error_log /var/log/nginx/{{ item.key }}_error.log warn;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
{% if item.value.upgraded %}
|
||||||
|
include /etc/nginx/conf.d/include/upgrade.conf;
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if item.value.internal %}
|
||||||
|
include /etc/nginx/conf.d/include/internal.conf;
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
set $forward_scheme http;
|
||||||
|
set $server "{{ item.value.server }}";
|
||||||
|
set $port {{ item.value.port }};
|
||||||
|
include /etc/nginx/conf.d/include/proxy.conf;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user