Add tls support via lets-encrypt

This commit is contained in:
Kacper Donat 2021-04-10 23:11:33 +02:00
parent 928d0fcb60
commit b22dc1c5b4
15 changed files with 53 additions and 7 deletions

7
inventory/m2.ini Normal file
View File

@ -0,0 +1,7 @@
[main]
m2.kadet.net
[main:vars]
ansible_user=kadet
main_domain=kadet.net
swarm_addr=2a01:4f8:c2c:db18::1

View File

@ -4,4 +4,7 @@
[main:vars]
ansible_user=vagrant
ansible_ssh_private_key_file=./.vagrant/machines/default/virtualbox/private_key
ansible_ssh_common_args='-o StrictHostKeyChecking=no'
ansible_ssh_common_args='-o StrictHostKeyChecking=no'
main_domain=kadet.local
swarm_addr=eth0
lets_encrypt_url=https://acme-staging-v02.api.letsencrypt.org/directory

View File

@ -15,6 +15,8 @@ services:
- traefik.enable=true
- traefik.http.routers.{{ service }}-api.rule=(Host(`{{ service }}.{{ main_domain }}`) || Host(`cojedzie.pl`)) && PathPrefix(`/api/`)
- traefik.http.routers.{{ service }}-api.priority=100
- traefik.http.routers.{{ service }}-api.tls=true
- traefik.http.routers.{{ service }}-api.tls.certresolver=lets-encrypt
- traefik.http.services.{{ service }}-api.loadbalancer.server.port=8080
update-job:
@ -55,6 +57,8 @@ services:
labels:
- traefik.enable=true
- traefik.http.routers.{{ service }}-front.rule=Host(`{{ service }}.{{ main_domain }}`) || Host(`cojedzie.pl`)
- traefik.http.routers.{{ service }}-front.tls=true
- traefik.http.routers.{{ service }}-front.tls.certresolver=lets-encrypt
- traefik.http.services.{{ service }}-front.loadbalancer.server.port=3000
volumes:

View File

@ -29,4 +29,6 @@ services:
labels:
- traefik.enable=true
- traefik.http.routers.{{ service }}.rule=Host(`git.{{ main_domain }}`)
- traefik.http.routers.{{ service }}.tls=true
- traefik.http.routers.{{ service }}.tls.certresolver=lets-encrypt
- traefik.http.services.{{ service }}.loadbalancer.server.port=3000

View File

@ -29,6 +29,8 @@ services:
labels:
- traefik.enable=true
- traefik.http.routers.{{ service }}.rule=Host(`{{ service }}.{{ main_domain }}`)
- traefik.http.routers.{{ service }}.tls=true
- traefik.http.routers.{{ service }}.tls.certresolver=lets-encrypt
- traefik.http.services.{{ service }}.loadbalancer.server.port=9000
networks:

View File

@ -4,3 +4,5 @@ http:
alcoholic-calendar:
rule: Host(`alcoholic.{{ main_domain }}`)
service: legacy@docker
tls:
certresolver: lets-encrypt

View File

@ -6,6 +6,8 @@ http:
dashboard:
rule: Host(`traefik.{{ main_domain }}`)
service: api@internal
tls:
certresolver: lets-encrypt
{% if dashboard_users is defined %}
middlewares:
- dashboard_auth

View File

@ -4,3 +4,5 @@ http:
nginx:
rule: Host(`{{ main_domain }}`)
service: legacy@docker
tls:
certresolver: lets-encrypt

View File

@ -4,3 +4,5 @@ http:
paa:
rule: Host(`paa.{{ main_domain }}`)
service: legacy@docker
tls:
certresolver: lets-encrypt

View File

@ -4,3 +4,5 @@ http:
pastebin:
rule: Host(`bin.{{ main_domain }}`)
service: legacy@docker
tls:
certresolver: lets-encrypt

View File

@ -9,6 +9,12 @@ global:
entryPoints:
web:
address: :80
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: :443
@ -59,3 +65,11 @@ providers:
swarmMode: true
exposedByDefault: false
network: "traefik"
certificatesResolvers:
lets-encrypt:
acme:
caServer: "{{ lets_encrypt_url|default('https://acme-v02.api.letsencrypt.org/directory') }}"
email: "kacper@kadet.net"
storage: "/etc/traefik/acme/lets-encrypt.json"
tlsChallenge: {}

View File

@ -5,9 +5,9 @@ services:
image: traefik:v2.4
ports:
- 80:80
- 8080:8080
- 443:443
volumes:
- ./config/acme:/etc/traefik/acme
- ./config/traefik.yaml:/etc/traefik/traefik.yaml:ro
- ./config/dynamic:/etc/traefik/dynamic:ro
- /var/run/docker.sock:/var/run/docker.sock:ro

View File

@ -1,6 +1,6 @@
---
- name: 'Copy static config for "{{ service }}"'
copy:
template:
src: "{{ service_path }}/config/traefik.yaml"
dest: "{{ remote_service_path }}/config/traefik.yaml"
tags:
@ -14,6 +14,14 @@
tags:
- config
- name: 'Ensure acme config directory exists'
file:
path: "{{ remote_service_path }}/config/acme"
state: directory
owner: "{{ ansible_user }}"
tags:
- config
- name: 'Copy dynamic config'
template:
src: "{{ file }}"

View File

@ -8,7 +8,6 @@ ansible_python_interpreter: /usr/bin/python3
pip_package: python3-pip
pip_executable: pip3
swarm_addr: eth0
swarm_global_networks:
- name: traefik
swarm_host_address: "{{ ansible_docker0.ipv4.address }}"

View File

@ -8,11 +8,8 @@ remote_services_root: /var/services
remote_service_path: "{{ remote_services_root }}/{{ service }}"
compose_version: "3.7"
ingress_network: traefik
main_domain: kadet.local
database_mysql_host: "{{ swarm_host_address }}"
services_to_restart: []