Add role for ingress controller, move configuration into it and its data structures
This commit is contained in:
parent
37150bf7d1
commit
60bfe91947
@ -12,94 +12,6 @@
|
|||||||
- name: ensure docker network
|
- name: ensure docker network
|
||||||
docker_network: name=web
|
docker_network: name=web
|
||||||
tags: [ docker ]
|
tags: [ docker ]
|
||||||
- name: ensure docker nginx config
|
|
||||||
copy:
|
|
||||||
dest: /data/nginx-certbot/user_conf.d/vhosts.conf
|
|
||||||
mode: "0750"
|
|
||||||
content: |
|
|
||||||
server {
|
|
||||||
listen 443 ssl default_server;
|
|
||||||
server_name desu.ltd;
|
|
||||||
ssl_certificate /etc/letsencrypt/live/desu.ltd/fullchain.pem;
|
|
||||||
ssl_certificate_key /etc/letsencrypt/live/desu.ltd/privkey.pem;
|
|
||||||
ssl_trusted_certificate /etc/letsencrypt/live/desu.ltd/chain.pem;
|
|
||||||
ssl_dhparam /etc/letsencrypt/dhparams/dhparam.pem;
|
|
||||||
location / {
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_pass http://desultd:80;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
server {
|
|
||||||
listen 443 ssl;
|
|
||||||
server_name www.9iron.club;
|
|
||||||
ssl_certificate /etc/letsencrypt/live/desu.ltd/fullchain.pem;
|
|
||||||
ssl_certificate_key /etc/letsencrypt/live/desu.ltd/privkey.pem;
|
|
||||||
ssl_trusted_certificate /etc/letsencrypt/live/desu.ltd/chain.pem;
|
|
||||||
ssl_dhparam /etc/letsencrypt/dhparams/dhparam.pem;
|
|
||||||
return 301 $scheme://9iron.club$request_uri;
|
|
||||||
}
|
|
||||||
server {
|
|
||||||
listen 443 ssl;
|
|
||||||
server_name 9iron.club;
|
|
||||||
ssl_certificate /etc/letsencrypt/live/desu.ltd/fullchain.pem;
|
|
||||||
ssl_certificate_key /etc/letsencrypt/live/desu.ltd/privkey.pem;
|
|
||||||
ssl_trusted_certificate /etc/letsencrypt/live/desu.ltd/chain.pem;
|
|
||||||
ssl_dhparam /etc/letsencrypt/dhparams/dhparam.pem;
|
|
||||||
location / {
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_pass http://9iron:80;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
server {
|
|
||||||
listen 443 ssl;
|
|
||||||
server_name git.desu.ltd;
|
|
||||||
ssl_certificate /etc/letsencrypt/live/desu.ltd/fullchain.pem;
|
|
||||||
ssl_certificate_key /etc/letsencrypt/live/desu.ltd/privkey.pem;
|
|
||||||
ssl_trusted_certificate /etc/letsencrypt/live/desu.ltd/chain.pem;
|
|
||||||
ssl_dhparam /etc/letsencrypt/dhparams/dhparam.pem;
|
|
||||||
location / {
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_pass http://gitea:3000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
server {
|
|
||||||
listen 443 ssl;
|
|
||||||
server_name nc.desu.ltd;
|
|
||||||
ssl_certificate /etc/letsencrypt/live/desu.ltd/fullchain.pem;
|
|
||||||
ssl_certificate_key /etc/letsencrypt/live/desu.ltd/privkey.pem;
|
|
||||||
ssl_trusted_certificate /etc/letsencrypt/live/desu.ltd/chain.pem;
|
|
||||||
ssl_dhparam /etc/letsencrypt/dhparams/dhparam.pem;
|
|
||||||
add_header Strict-Transport-Security "max-age=31536000";
|
|
||||||
client_max_body_size 0;
|
|
||||||
location / {
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_pass http://nextcloud:80;
|
|
||||||
}
|
|
||||||
location ^~ /.well-known {
|
|
||||||
location = /.well-known/carddav { return 301 /remote.php/dav/; }
|
|
||||||
location = /.well-known/caldav { return 301 /remote.php/dav/; }
|
|
||||||
location ^~ /.well-known { return 301 /index.php$uri; }
|
|
||||||
try_files $uri $uri/ =404;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
server {
|
|
||||||
listen 443 ssl;
|
|
||||||
server_name srv.9iron.club;
|
|
||||||
ssl_certificate /etc/letsencrypt/live/desu.ltd/fullchain.pem;
|
|
||||||
ssl_certificate_key /etc/letsencrypt/live/desu.ltd/privkey.pem;
|
|
||||||
ssl_trusted_certificate /etc/letsencrypt/live/desu.ltd/chain.pem;
|
|
||||||
ssl_dhparam /etc/letsencrypt/dhparams/dhparam.pem;
|
|
||||||
location / {
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_pass http://srv:80;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tags: [ docker, ingress ]
|
|
||||||
- name: include tasks for apps
|
- name: include tasks for apps
|
||||||
include_tasks: tasks/app/{{ task }}
|
include_tasks: tasks/app/{{ task }}
|
||||||
with_items:
|
with_items:
|
||||||
@ -116,7 +28,6 @@
|
|||||||
- gitea.yml
|
- gitea.yml
|
||||||
- nextcloud.yml
|
- nextcloud.yml
|
||||||
- srv.yml
|
- srv.yml
|
||||||
- ingress-generic.yml
|
|
||||||
loop_control:
|
loop_control:
|
||||||
loop_var: task
|
loop_var: task
|
||||||
tags: [ always ]
|
tags: [ always ]
|
||||||
@ -139,6 +50,45 @@
|
|||||||
- repo: https://git.desu.ltd/salt/gitea-custom
|
- repo: https://git.desu.ltd/salt/gitea-custom
|
||||||
dest: /data/gitea/data/gitea/custom
|
dest: /data/gitea/data/gitea/custom
|
||||||
tags: [ web, git ]
|
tags: [ web, git ]
|
||||||
|
- role: ingress
|
||||||
|
vars:
|
||||||
|
ingress_servers:
|
||||||
|
# desu.ltd
|
||||||
|
- name: desu.ltd
|
||||||
|
proxies:
|
||||||
|
- location: /
|
||||||
|
pass: http://desultd:80
|
||||||
|
- name: git.desu.ltd
|
||||||
|
proxies:
|
||||||
|
- location: /
|
||||||
|
pass: http://gitea:3000
|
||||||
|
- name: nc.desu.ltd
|
||||||
|
directives:
|
||||||
|
- "add_header Strict-Transport-Security \"max-age=31536000\""
|
||||||
|
- "client_max_body_size 0"
|
||||||
|
proxies:
|
||||||
|
- location: /
|
||||||
|
pass: http://nextcloud:80
|
||||||
|
locations:
|
||||||
|
- location: "^~ /.well-known"
|
||||||
|
contents: |
|
||||||
|
location = /.well-known/carddav { return 301 /remote.php/dav/; }
|
||||||
|
location = /.well-known/caldav { return 301 /remote.php/dav/; }
|
||||||
|
location ^~ /.well-known { return 301 /index.php$uri; }
|
||||||
|
try_files $uri $uri/ =404;
|
||||||
|
# 9iron
|
||||||
|
- name: www.9iron.club
|
||||||
|
directives:
|
||||||
|
- "return 301 $scheme://9iron.club$request_uri"
|
||||||
|
- name: 9iron.club
|
||||||
|
proxies:
|
||||||
|
- location: /
|
||||||
|
pass: http://9iron:80
|
||||||
|
- name: srv.9iron.club
|
||||||
|
proxies:
|
||||||
|
- location: /
|
||||||
|
pass: http://srv:80
|
||||||
|
tags: [ web, docker, ingress ]
|
||||||
- hosts: web2.desu.ltd
|
- hosts: web2.desu.ltd
|
||||||
module_defaults:
|
module_defaults:
|
||||||
docker_container:
|
docker_container:
|
||||||
@ -149,38 +99,6 @@
|
|||||||
- name: ensure docker network
|
- name: ensure docker network
|
||||||
docker_network: name=web
|
docker_network: name=web
|
||||||
tags: [ docker ]
|
tags: [ docker ]
|
||||||
- name: ensure docker nginx config
|
|
||||||
copy:
|
|
||||||
dest: /data/nginx-certbot/user_conf.d/vhosts.conf
|
|
||||||
mode: "0750"
|
|
||||||
content: |
|
|
||||||
server {
|
|
||||||
listen 443 ssl default_server;
|
|
||||||
server_name cowfee.moe;
|
|
||||||
ssl_certificate /etc/letsencrypt/live/cowfee.moe/fullchain.pem;
|
|
||||||
ssl_certificate_key /etc/letsencrypt/live/cowfee.moe/privkey.pem;
|
|
||||||
ssl_trusted_certificate /etc/letsencrypt/live/cowfee.moe/chain.pem;
|
|
||||||
ssl_dhparam /etc/letsencrypt/dhparams/dhparam.pem;
|
|
||||||
location / {
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_pass http://pleroma:4000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
server {
|
|
||||||
listen 443 ssl;
|
|
||||||
server_name tube.cowfee.moe;
|
|
||||||
ssl_certificate /etc/letsencrypt/live/cowfee.moe/fullchain.pem;
|
|
||||||
ssl_certificate_key /etc/letsencrypt/live/cowfee.moe/privkey.pem;
|
|
||||||
ssl_trusted_certificate /etc/letsencrypt/live/cowfee.moe/chain.pem;
|
|
||||||
ssl_dhparam /etc/letsencrypt/dhparams/dhparam.pem;
|
|
||||||
location / {
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_pass http://peertube:9000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tags: [ docker, ingress ]
|
|
||||||
- name: include tasks for apps
|
- name: include tasks for apps
|
||||||
include_tasks: tasks/app/{{ task }}
|
include_tasks: tasks/app/{{ task }}
|
||||||
with_items:
|
with_items:
|
||||||
@ -203,6 +121,18 @@
|
|||||||
backup_s3backup_list_extra:
|
backup_s3backup_list_extra:
|
||||||
- /data
|
- /data
|
||||||
tags: [ backup ]
|
tags: [ backup ]
|
||||||
|
- role: ingress
|
||||||
|
vars:
|
||||||
|
ingress_servers:
|
||||||
|
- name: cowfee.moe
|
||||||
|
proxies:
|
||||||
|
- location: /
|
||||||
|
pass: http://pleroma:4000
|
||||||
|
- name: tube.cowfee.moe
|
||||||
|
proxies:
|
||||||
|
- location: /
|
||||||
|
pass: http://peertube:9000
|
||||||
|
tags: [ web, docker, ingress ]
|
||||||
- hosts: web3.desu.ltd
|
- hosts: web3.desu.ltd
|
||||||
module_defaults:
|
module_defaults:
|
||||||
docker_container:
|
docker_container:
|
||||||
@ -213,51 +143,6 @@
|
|||||||
- name: ensure docker network
|
- name: ensure docker network
|
||||||
docker_network: name=web
|
docker_network: name=web
|
||||||
tags: [ docker ]
|
tags: [ docker ]
|
||||||
- name: ensure docker nginx config
|
|
||||||
copy:
|
|
||||||
dest: /data/nginx-certbot/user_conf.d/vhosts.conf
|
|
||||||
mode: "0750"
|
|
||||||
content: |
|
|
||||||
server {
|
|
||||||
listen 443 ssl default_server;
|
|
||||||
server_name netbox.desu.ltd;
|
|
||||||
ssl_certificate /etc/letsencrypt/live/netbox.desu.ltd/fullchain.pem;
|
|
||||||
ssl_certificate_key /etc/letsencrypt/live/netbox.desu.ltd/privkey.pem;
|
|
||||||
ssl_trusted_certificate /etc/letsencrypt/live/netbox.desu.ltd/chain.pem;
|
|
||||||
ssl_dhparam /etc/letsencrypt/dhparams/dhparam.pem;
|
|
||||||
location / {
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_pass http://netbox:8080;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
server {
|
|
||||||
listen 443 ssl;
|
|
||||||
server_name nagios.desu.ltd;
|
|
||||||
ssl_certificate /etc/letsencrypt/live/netbox.desu.ltd/fullchain.pem;
|
|
||||||
ssl_certificate_key /etc/letsencrypt/live/netbox.desu.ltd/privkey.pem;
|
|
||||||
ssl_trusted_certificate /etc/letsencrypt/live/netbox.desu.ltd/chain.pem;
|
|
||||||
ssl_dhparam /etc/letsencrypt/dhparams/dhparam.pem;
|
|
||||||
location / {
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_pass http://nagios:80;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
server {
|
|
||||||
listen 443 ssl;
|
|
||||||
server_name movie.desu.ltd;
|
|
||||||
ssl_certificate /etc/letsencrypt/live/netbox.desu.ltd/fullchain.pem;
|
|
||||||
ssl_certificate_key /etc/letsencrypt/live/netbox.desu.ltd/privkey.pem;
|
|
||||||
ssl_trusted_certificate /etc/letsencrypt/live/netbox.desu.ltd/chain.pem;
|
|
||||||
ssl_dhparam /etc/letsencrypt/dhparams/dhparam.pem;
|
|
||||||
location / {
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_pass http://movienight:8089;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tags: [ docker, ingress ]
|
|
||||||
- name: include tasks for apps
|
- name: include tasks for apps
|
||||||
include_tasks: tasks/app/{{ task }}
|
include_tasks: tasks/app/{{ task }}
|
||||||
with_items:
|
with_items:
|
||||||
@ -271,7 +156,6 @@
|
|||||||
- movienight.yml
|
- movienight.yml
|
||||||
- netbox.yml
|
- netbox.yml
|
||||||
- nagios.yml
|
- nagios.yml
|
||||||
- ingress-generic.yml
|
|
||||||
loop_control:
|
loop_control:
|
||||||
loop_var: task
|
loop_var: task
|
||||||
tags: [ always ]
|
tags: [ always ]
|
||||||
@ -281,3 +165,19 @@
|
|||||||
backup_s3backup_list_extra:
|
backup_s3backup_list_extra:
|
||||||
- /data
|
- /data
|
||||||
tags: [ backup ]
|
tags: [ backup ]
|
||||||
|
- role: ingress
|
||||||
|
vars:
|
||||||
|
ingress_servers:
|
||||||
|
- name: netbox.desu.ltd
|
||||||
|
proxies:
|
||||||
|
- location: /
|
||||||
|
pass: http://netbox:8080
|
||||||
|
- name: nagios.desu.ltd
|
||||||
|
proxies:
|
||||||
|
- location: /
|
||||||
|
pass: http://nagios:80
|
||||||
|
- name: movie.desu.ltd
|
||||||
|
proxies:
|
||||||
|
- location: /
|
||||||
|
pass: http://movienight:8089
|
||||||
|
tags: [ web, docker, ingress ]
|
||||||
|
39
roles/ingress/defaults/main.yml
Normal file
39
roles/ingress/defaults/main.yml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env ansible-playbook
|
||||||
|
# vim:ft=ansible:
|
||||||
|
|
||||||
|
# Core container configuration
|
||||||
|
ingress_container_image: jonasal/nginx-certbot:latest
|
||||||
|
ingress_container_name: ingress
|
||||||
|
|
||||||
|
# Secondary container configuration
|
||||||
|
ingress_container_http_port: "80"
|
||||||
|
ingress_container_https_port: "443"
|
||||||
|
ingress_container_persist_dir: "/data/nginx-certbot"
|
||||||
|
ingress_container_timezone: America/Chicago
|
||||||
|
|
||||||
|
# Network configuration
|
||||||
|
ingress_container_networks:
|
||||||
|
- name: web
|
||||||
|
aliases: [ "ingress" ]
|
||||||
|
|
||||||
|
# Certbot configuration
|
||||||
|
ingress_container_certbot_email: rehashedsalt@cock.li
|
||||||
|
|
||||||
|
# Vhost configuration
|
||||||
|
# ingress_servers:
|
||||||
|
# - name: example.com
|
||||||
|
# proxies:
|
||||||
|
# - location: /
|
||||||
|
# pass: http://some-container:80
|
||||||
|
# locations:
|
||||||
|
# - location: "^~ /.well-known"
|
||||||
|
# contents: |
|
||||||
|
# location = /.well-known/carddav { return 301 /remote.php/dav/; }
|
||||||
|
# location = /.well-known/caldav { return 301 /remote.php/dav/; }
|
||||||
|
# location ^~ /.well-known { return 301 /index.php$uri; }
|
||||||
|
# try_files $uri $uri/ =404;
|
||||||
|
# - name: redirect.example.com
|
||||||
|
# directives:
|
||||||
|
# # NOTE: Do NOT suffix with a semicolon; that gets added for you
|
||||||
|
# - "return 301 $scheme://example.com$request_uri"
|
||||||
|
ingress_servers: []
|
5
roles/ingress/handlers/main.yml
Normal file
5
roles/ingress/handlers/main.yml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env ansible-playbook
|
||||||
|
# vim:ft=ansible:
|
||||||
|
- name: restart ingress container
|
||||||
|
docker_container: name="{{ ingress_container_name }}" state=started restart=yes
|
||||||
|
become: yes
|
24
roles/ingress/tasks/main.yml
Normal file
24
roles/ingress/tasks/main.yml
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/env ansible-playbook
|
||||||
|
# vim:ft=ansible:
|
||||||
|
- name: assure ingress container persist directories
|
||||||
|
file: path="{{ ingress_container_persist_dir }}/{{ item }}" state=directory owner=root mode=0755
|
||||||
|
with_items:
|
||||||
|
- letsencrypt
|
||||||
|
- user_conf.d
|
||||||
|
- name: template out ingress configuration file
|
||||||
|
template: src=vhosts.conf.j2 dest="{{ ingress_container_persist_dir }}/user_conf.d/vhosts.conf" mode="0640"
|
||||||
|
notify: restart ingress container
|
||||||
|
- name: assure ingress container
|
||||||
|
docker_container:
|
||||||
|
name: ingress
|
||||||
|
image: "{{ ingress_container_image }}"
|
||||||
|
env:
|
||||||
|
TZ: "{{ ingress_container_timezone }}"
|
||||||
|
CERTBOT_EMAIL: "{{ ingress_container_certbot_email }}"
|
||||||
|
networks: "{{ ingress_container_networks }}"
|
||||||
|
ports:
|
||||||
|
- "{{ ingress_container_https_port }}:443"
|
||||||
|
- "{{ ingress_container_http_port }}:80"
|
||||||
|
volumes:
|
||||||
|
- "{{ ingress_container_persist_dir }}/letsencrypt:/etc/letsencrypt"
|
||||||
|
- "{{ ingress_container_persist_dir }}/user_conf.d:/etc/nginx/user_conf.d:ro"
|
44
roles/ingress/templates/vhosts.conf.j2
Normal file
44
roles/ingress/templates/vhosts.conf.j2
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{% for server in ingress_servers %}
|
||||||
|
server {
|
||||||
|
{% if loop.index == 1 %}
|
||||||
|
listen {{ ingress_listen_args }} default_server;
|
||||||
|
{% else %}
|
||||||
|
listen {{ ingress_listen_args }} ssl;
|
||||||
|
{% endif %}
|
||||||
|
server_name {{ server.name }};
|
||||||
|
|
||||||
|
# TLS configuration
|
||||||
|
ssl_certificate /etc/letsencrypt/live/{{ ingress_servers[0].name }}/fullchain.pem;
|
||||||
|
ssl_certificate_key /etc/letsencrypt/live/{{ ingress_servers[0].name }}/privkey.pem;
|
||||||
|
ssl_trusted_certificate /etc/letsencrypt/live/{{ ingress_servers[0].name }}/chain.pem;
|
||||||
|
ssl_dhparam /etc/letsencrypt/dhparams/dhparam.pem;
|
||||||
|
|
||||||
|
{% if server.directives is defined %}
|
||||||
|
# Extra directives
|
||||||
|
{% for directive in server.directives %}
|
||||||
|
{{ directive }};
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if server.proxies is defined %}
|
||||||
|
# Proxy locations
|
||||||
|
{% for proxy in server.proxies %}
|
||||||
|
location {{ proxy.location }} {
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_pass {{ proxy.pass }};
|
||||||
|
}
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if server.locations is defined %}
|
||||||
|
# Extra manually-defined locations
|
||||||
|
{% for location in server.locations %}
|
||||||
|
location {{ location.location }} {
|
||||||
|
{{ location.contents }}
|
||||||
|
}
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
}
|
||||||
|
{% endfor %}
|
Loading…
Reference in New Issue
Block a user