From 9f188c26748a27d8175c6164ed669e64c883791b Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Thu, 29 Jul 2021 14:35:41 +0200 Subject: [PATCH] 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. --- roles/caddy/defaults/main.yml | 13 +++++++++++ roles/caddy/meta/main.yml | 5 +++++ roles/caddy/tasks/main.yml | 27 +++++++++++++++++++++++ roles/caddy/templates/Caddyfile.j2 | 26 ++++++++++++++++++++++ roles/caddy/templates/docker-stack.yml.j2 | 22 ++++++++++++++++++ roles/caddy/vars/main.yml | 5 +++++ playbook.yml => site.yml | 4 ++++ 7 files changed, 102 insertions(+) create mode 100644 roles/caddy/defaults/main.yml create mode 100644 roles/caddy/meta/main.yml create mode 100644 roles/caddy/tasks/main.yml create mode 100644 roles/caddy/templates/Caddyfile.j2 create mode 100644 roles/caddy/templates/docker-stack.yml.j2 create mode 100644 roles/caddy/vars/main.yml rename playbook.yml => site.yml (58%) diff --git a/roles/caddy/defaults/main.yml b/roles/caddy/defaults/main.yml new file mode 100644 index 0000000..a830f81 --- /dev/null +++ b/roles/caddy/defaults/main.yml @@ -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 diff --git a/roles/caddy/meta/main.yml b/roles/caddy/meta/main.yml new file mode 100644 index 0000000..5863772 --- /dev/null +++ b/roles/caddy/meta/main.yml @@ -0,0 +1,5 @@ +--- + +dependencies: + - docker + - docker-swarm diff --git a/roles/caddy/tasks/main.yml b/roles/caddy/tasks/main.yml new file mode 100644 index 0000000..4484e8a --- /dev/null +++ b/roles/caddy/tasks/main.yml @@ -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 diff --git a/roles/caddy/templates/Caddyfile.j2 b/roles/caddy/templates/Caddyfile.j2 new file mode 100644 index 0000000..5af154e --- /dev/null +++ b/roles/caddy/templates/Caddyfile.j2 @@ -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 %} + diff --git a/roles/caddy/templates/docker-stack.yml.j2 b/roles/caddy/templates/docker-stack.yml.j2 new file mode 100644 index 0000000..1ceb8ce --- /dev/null +++ b/roles/caddy/templates/docker-stack.yml.j2 @@ -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 diff --git a/roles/caddy/vars/main.yml b/roles/caddy/vars/main.yml new file mode 100644 index 0000000..3edaa66 --- /dev/null +++ b/roles/caddy/vars/main.yml @@ -0,0 +1,5 @@ +--- + +caddy_stack: + - name: caddy + compose: "{{ lookup('template', 'docker-stack.yml.j2') | from_yaml }}" diff --git a/playbook.yml b/site.yml similarity index 58% rename from playbook.yml rename to site.yml index 3e181ca..c6c0fa6 100644 --- a/playbook.yml +++ b/site.yml @@ -5,3 +5,7 @@ - system-upgrade - docker - docker-swarm + +- hosts: docker_swarm_manager_node + roles: + - caddy