Add basic caddy swarm role

Added caddy as swarm container. Uses templated Caddyfile which can be
set up for testing purposes for now.
Depends on docker and docker-swarm, and will keep its stuff where
docker-swarm sets itself up.
This commit is contained in:
Marty Oehme 2021-07-29 14:35:41 +02:00
parent 453cd2fd2b
commit 9f188c2674
Signed by: Marty
GPG key ID: B7538B8F50A1C800
7 changed files with 102 additions and 0 deletions

View file

@ -0,0 +1,13 @@
---
caddy_version: alpine
caddy_caddyfile_dir: "{{ docker_stack_files_dir }}/caddy"
caddy_use_debug: no
caddy_use_https: yes
caddy_tls_use_staging: no
# caddy_email: your@email.here
# sets up a quick test server on port 80 to see if the container is set up correctly
caddy_create_test_file_server: no

View file

@ -0,0 +1,5 @@
---
dependencies:
- docker
- docker-swarm

View file

@ -0,0 +1,27 @@
---
# install caddy as a docker stack
- name: Ensure Caddyfile directory exists
ansible.builtin.file:
path: "{{ caddy_caddyfile_dir }}"
state: directory
mode: '0755'
become: true
- name: Ensure Caddyfile exists
ansible.builtin.template:
src: Caddyfile.j2
dest: "{{ caddy_caddyfile_dir }}/Caddyfile"
validate: "docker run --rm -v %s:/Caddyfile caddy caddy validate --config /Caddyfile"
become: true
- name: Deploy caddy to swarm
community.general.docker_stack:
name: "{{ item.name }}"
state: present
prune: yes
compose:
- "{{ item.compose }}"
with_items: "{{ caddy_stack }}"
when: caddy_stack is defined
become: yes

View file

@ -0,0 +1,26 @@
{
{%- if caddy_email is not none %}
email {{ caddy_email }}
{% endif %}
{% if caddy_tls_use_staging is sameas true %}
acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
{% endif %}
{% if caddy_use_debug is sameas true %}
debug
{% endif %}
{% if caddy_use_https is sameas false %}
auto_https off
{% endif %}
}
{% if caddy_create_test_file_server is sameas true %}
:80 {
file_server {
browse
}
}
{% endif %}

View file

@ -0,0 +1,22 @@
version: "3.7"
services:
app:
image: caddy:{{ caddy_version }}
ports:
- "80:80"
- "443:443"
volumes:
- "{{ caddy_caddyfile_dir }}:/etc/caddy"
- data:/data
- config:/config
networks:
- "{{ docker_swarm_public_network_name }}"
volumes:
data:
config:
networks:
"{{ docker_swarm_public_network_name }}":
external: true

View file

@ -0,0 +1,5 @@
---
caddy_stack:
- name: caddy
compose: "{{ lookup('template', 'docker-stack.yml.j2') | from_yaml }}"

View file

@ -5,3 +5,7 @@
- system-upgrade - system-upgrade
- docker - docker
- docker-swarm - docker-swarm
- hosts: docker_swarm_manager_node
roles:
- caddy