task 1-4
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
woodpecker_domain: "ci.poc.mehl.mx"
|
||||
zot_domain: "registry.ci.poc.mehl.mx"
|
||||
zot_port: 5000
|
||||
letsencrypt_email: "dqdpoq@dwqiofiw.de"
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
- name: Restart nginx
|
||||
ansible.builtin.systemd_service:
|
||||
name: nginx
|
||||
state: restarted
|
||||
@@ -0,0 +1,32 @@
|
||||
---
|
||||
# Two-phase TLS setup: nginx first serves plain HTTP (for the certbot
|
||||
# webroot challenge), then certbot obtains real certs, then the TLS
|
||||
# vhosts (proxying to Woodpecker and Zot) are deployed and nginx reloaded.
|
||||
|
||||
- name: Ensure certbot webroot directory exists
|
||||
ansible.builtin.file:
|
||||
path: "{{ certbot_webroot }}"
|
||||
state: directory
|
||||
mode: "0755"
|
||||
|
||||
- name: Include geerlingguy.nginx role (HTTP-only vhosts for ACME challenge)
|
||||
ansible.builtin.include_role:
|
||||
name: geerlingguy.nginx
|
||||
|
||||
- name: Include geerlingguy.certbot role (obtain certificates)
|
||||
ansible.builtin.include_role:
|
||||
name: geerlingguy.certbot
|
||||
|
||||
- name: Deploy TLS vhost for Woodpecker
|
||||
ansible.builtin.template:
|
||||
src: woodpecker.conf.j2
|
||||
dest: "/etc/nginx/sites-enabled/{{ woodpecker_domain }}.conf"
|
||||
mode: "0644"
|
||||
notify: Restart nginx
|
||||
|
||||
- name: Deploy TLS vhost for Zot
|
||||
ansible.builtin.template:
|
||||
src: zot.conf.j2
|
||||
dest: "/etc/nginx/sites-enabled/{{ zot_domain }}.conf"
|
||||
mode: "0644"
|
||||
notify: Restart nginx
|
||||
@@ -0,0 +1,36 @@
|
||||
server {
|
||||
listen 443 ssl;
|
||||
listen [::]:443 ssl;
|
||||
server_name {{ woodpecker_domain }};
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/{{ woodpecker_domain }}/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/{{ woodpecker_domain }}/privkey.pem;
|
||||
|
||||
client_max_body_size 64m;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:8000;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
# Required for Woodpecker's websocket-based log streaming.
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
}
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name {{ woodpecker_domain }};
|
||||
|
||||
location /.well-known/acme-challenge/ {
|
||||
root /var/www/letsencrypt;
|
||||
}
|
||||
location / {
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
server {
|
||||
listen 443 ssl;
|
||||
listen [::]:443 ssl;
|
||||
server_name {{ zot_domain }};
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/{{ zot_domain }}/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/{{ zot_domain }}/privkey.pem;
|
||||
|
||||
# Large blob/layer uploads for container images and OCI artifacts.
|
||||
client_max_body_size 0;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:{{ zot_port }};
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
# Ensure a well-formed Content-Length reaches Zot instead of
|
||||
# chunked transfer encoding, which Zot rejects on blob uploads.
|
||||
proxy_request_buffering on;
|
||||
}
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name {{ zot_domain }};
|
||||
|
||||
location /.well-known/acme-challenge/ {
|
||||
root /var/www/letsencrypt;
|
||||
}
|
||||
location / {
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
---
|
||||
# HTTP-only vhosts, used for the initial certbot webroot challenge and
|
||||
# permanently for redirecting to HTTPS afterwards.
|
||||
nginx_vhosts:
|
||||
- server_name: "{{ woodpecker_domain }}"
|
||||
filename: "{{ woodpecker_domain }}.conf"
|
||||
root: "/var/www/letsencrypt"
|
||||
extra_parameters: |
|
||||
location /.well-known/acme-challenge/ {
|
||||
root /var/www/letsencrypt;
|
||||
}
|
||||
location / {
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
|
||||
- server_name: "{{ zot_domain }}"
|
||||
filename: "{{ zot_domain }}.conf"
|
||||
root: "/var/www/letsencrypt"
|
||||
extra_parameters: |
|
||||
location /.well-known/acme-challenge/ {
|
||||
root /var/www/letsencrypt;
|
||||
}
|
||||
location / {
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
|
||||
certbot_create_if_missing: true
|
||||
certbot_create_method: webroot
|
||||
certbot_webroot: /var/www/letsencrypt
|
||||
certbot_admin_email: "{{ letsencrypt_email }}"
|
||||
certbot_certs:
|
||||
- domains:
|
||||
- "{{ woodpecker_domain }}"
|
||||
- domains:
|
||||
- "{{ zot_domain }}"
|
||||
Reference in New Issue
Block a user