Apply prettier formatting
This commit is contained in:
parent
6b4c4ccde4
commit
c498b3ced8
76 changed files with 123 additions and 202 deletions
11
README.md
11
README.md
|
|
@ -12,7 +12,7 @@ vagrant plugin install vagrant-hosts vagrant-hostsupdater
|
||||||
```
|
```
|
||||||
|
|
||||||
Additionally, since the test setup mirrors the production setup in that it makes use of subdomains for the individual hosted applications,
|
Additionally, since the test setup mirrors the production setup in that it makes use of subdomains for the individual hosted applications,
|
||||||
the server needs to be reachable under a domain name,
|
the server needs to be reachable under a domain name,
|
||||||
not just an IP address.
|
not just an IP address.
|
||||||
For now this is most simply accomplished through editing the hosts file, e.g.:
|
For now this is most simply accomplished through editing the hosts file, e.g.:
|
||||||
|
|
||||||
|
|
@ -23,21 +23,20 @@ For now this is most simply accomplished through editing the hosts file, e.g.:
|
||||||
```
|
```
|
||||||
|
|
||||||
This will allow you to reach the main domain under `http(s)://ansible.test` and sets up two subdomains that can be reached.
|
This will allow you to reach the main domain under `http(s)://ansible.test` and sets up two subdomains that can be reached.
|
||||||
Be aware that the hosts file does not support subdomain wildcards.
|
Be aware that the hosts file does not support subdomain wildcards.
|
||||||
You will have to specify each hostname individually or use a tool such as `dnsmasq`.
|
You will have to specify each hostname individually or use a tool such as `dnsmasq`.
|
||||||
Read more [here](https://serverfault.com/questions/118378/in-my-etc-hosts-file-on-linux-osx-how-do-i-do-a-wildcard-subdomain).
|
Read more [here](https://serverfault.com/questions/118378/in-my-etc-hosts-file-on-linux-osx-how-do-i-do-a-wildcard-subdomain).
|
||||||
|
|
||||||
Then you are ready to run the complete infrastructure setup locally,
|
Then you are ready to run the complete infrastructure setup locally,
|
||||||
simply by executing `ansible-playbook site.yml`.
|
simply by executing `ansible-playbook site.yml`.
|
||||||
You can of course pick and choose what should be executed with host limits, tags, group variables, and so on,
|
You can of course pick and choose what should be executed with host limits, tags, group variables, and so on,
|
||||||
but this should provide an easy way to see if a) the playbook is working as intended and b) what it does is useful.
|
but this should provide an easy way to see if a) the playbook is working as intended and b) what it does is useful.
|
||||||
|
|
||||||
|
|
||||||
## Deployment
|
## Deployment
|
||||||
|
|
||||||
Most variables to be changed should be set either through `group_variables` or `host_variables`.
|
Most variables to be changed should be set either through `group_variables` or `host_variables`.
|
||||||
For my deployment I have a `production` group under `group_variables` which houses both a `vars.yml` containing basic variables
|
For my deployment I have a `production` group under `group_variables` which houses both a `vars.yml` containing basic variables
|
||||||
(like `server_domain`, `caddy_email`, etc.)
|
(like `server_domain`, `caddy_email`, etc.)
|
||||||
and a `vault.yml` which houses everything that should ideally not be lying around in plain-text
|
and a `vault.yml` which houses everything that should ideally not be lying around in plain-text
|
||||||
(individual container and database passwords for the various roles etc).
|
(individual container and database passwords for the various roles etc).
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,21 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
docker_swarm_advertise_addr: eth1
|
docker_swarm_advertise_addr: eth1
|
||||||
|
|
||||||
caddy_use_debug: yes
|
caddy_use_debug: yes
|
||||||
caddy_tls_use_staging: yes
|
caddy_tls_use_staging: yes
|
||||||
|
|
||||||
blog_use_https: no
|
blog_use_https: no
|
||||||
caddy_use_https: no
|
caddy_use_https: no
|
||||||
forgejo_use_https: no
|
forgejo_use_https: no
|
||||||
landingpage_use_https: no
|
landingpage_use_https: no
|
||||||
miniflux_use_https: no
|
miniflux_use_https: no
|
||||||
monica_use_https: no
|
monica_use_https: no
|
||||||
nextcloud_use_https: no
|
nextcloud_use_https: no
|
||||||
ntfy_use_https: no
|
ntfy_use_https: no
|
||||||
searx_use_https: no
|
searx_use_https: no
|
||||||
shaarli_use_https: no
|
shaarli_use_https: no
|
||||||
traggo_use_https: no
|
traggo_use_https: no
|
||||||
wallabag_use_https: no
|
wallabag_use_https: no
|
||||||
whoami_use_https: no
|
whoami_use_https: no
|
||||||
|
|
||||||
server_domain: ansible.test
|
server_domain: ansible.test
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
# Caddy
|
# Caddy
|
||||||
|
|
||||||
Caddy is the reverse proxy for all other services running on the infrastructure.
|
Caddy is the reverse proxy for all other services running on the infrastructure.
|
||||||
It was chosen for its relative ease of use,
|
It was chosen for its relative ease of use,
|
||||||
interactible API and https-by-default setup.
|
interactible API and https-by-default setup.
|
||||||
|
|
||||||
## Variables
|
## Variables
|
||||||
|
|
@ -48,28 +48,27 @@ caddy_version: alpine
|
||||||
|
|
||||||
Sets the docker image version to be used.
|
Sets the docker image version to be used.
|
||||||
|
|
||||||
|
|
||||||
## Internal variables
|
## Internal variables
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
caddy_stack:
|
caddy_stack:
|
||||||
name: caddy
|
name: caddy
|
||||||
compose: "{{ lookup('template', 'docker-stack.yml.j2') | from_yaml }}"
|
compose: "{{ lookup('template', 'docker-stack.yml.j2') | from_yaml }}"
|
||||||
```
|
```
|
||||||
|
|
||||||
Defines the actual docker stack which will later run on the target.
|
Defines the actual docker stack which will later run on the target.
|
||||||
The name can be changed and will be used as a proxy target (`caddy.mydomain.com` or `192.168.1.1/caddy`) ---
|
The name can be changed and will be used as a proxy target (`caddy.mydomain.com` or `192.168.1.1/caddy`) ---
|
||||||
though to be clear there is no intention currently to expose the caddy to the web at the moment.\
|
though to be clear there is no intention currently to expose the caddy to the web at the moment.\
|
||||||
The compose option defines which template to use for the `docker-stack.yml` file. You can either change options for the stack in the template file,
|
The compose option defines which template to use for the `docker-stack.yml` file. You can either change options for the stack in the template file,
|
||||||
or directly here like the following:
|
or directly here like the following:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
compose:
|
compose:
|
||||||
- "{{ lookup('template', 'docker-stack.yml.j2') | from_yaml }}"
|
- "{{ lookup('template', 'docker-stack.yml.j2') | from_yaml }}"
|
||||||
- version: '3'
|
- version: "3"
|
||||||
services:
|
services:
|
||||||
another-container:
|
another-container:
|
||||||
image: nginx:latest
|
image: nginx:latest
|
||||||
# ...
|
# ...
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
caddy_version: alpine
|
caddy_version: alpine
|
||||||
caddy_caddyfile_dir: "{{ docker_stack_files_dir }}/caddy"
|
caddy_caddyfile_dir: "{{ docker_stack_files_dir }}/caddy"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
caddy_stack:
|
caddy_stack:
|
||||||
name: caddy
|
name: caddy
|
||||||
compose: "{{ lookup('template', 'docker-stack.yml.j2') | from_yaml }}"
|
compose: "{{ lookup('template', 'docker-stack.yml.j2') | from_yaml }}"
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
# Caddy
|
# Caddy
|
||||||
|
|
||||||
Caddy is the reverse proxy for all other services running on the infrastructure.
|
Caddy is the reverse proxy for all other services running on the infrastructure.
|
||||||
It was chosen for its relative ease of use,
|
It was chosen for its relative ease of use,
|
||||||
interactible API and https-by-default setup.
|
interactible API and https-by-default setup.
|
||||||
|
|
||||||
## Variables
|
## Variables
|
||||||
|
|
@ -48,28 +48,27 @@ caddy_version: alpine
|
||||||
|
|
||||||
Sets the docker image version to be used.
|
Sets the docker image version to be used.
|
||||||
|
|
||||||
|
|
||||||
## Internal variables
|
## Internal variables
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
caddy_stack:
|
caddy_stack:
|
||||||
name: caddy
|
name: caddy
|
||||||
compose: "{{ lookup('template', 'docker-stack.yml.j2') | from_yaml }}"
|
compose: "{{ lookup('template', 'docker-stack.yml.j2') | from_yaml }}"
|
||||||
```
|
```
|
||||||
|
|
||||||
Defines the actual docker stack which will later run on the target.
|
Defines the actual docker stack which will later run on the target.
|
||||||
The name can be changed and will be used as a proxy target (`caddy.mydomain.com` or `192.168.1.1/caddy`) ---
|
The name can be changed and will be used as a proxy target (`caddy.mydomain.com` or `192.168.1.1/caddy`) ---
|
||||||
though to be clear there is no intention currently to expose the caddy to the web at the moment.\
|
though to be clear there is no intention currently to expose the caddy to the web at the moment.\
|
||||||
The compose option defines which template to use for the `docker-stack.yml` file. You can either change options for the stack in the template file,
|
The compose option defines which template to use for the `docker-stack.yml` file. You can either change options for the stack in the template file,
|
||||||
or directly here like the following:
|
or directly here like the following:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
compose:
|
compose:
|
||||||
- "{{ lookup('template', 'docker-stack.yml.j2') | from_yaml }}"
|
- "{{ lookup('template', 'docker-stack.yml.j2') | from_yaml }}"
|
||||||
- version: '3'
|
- version: "3"
|
||||||
services:
|
services:
|
||||||
another-container:
|
another-container:
|
||||||
image: nginx:latest
|
image: nginx:latest
|
||||||
# ...
|
# ...
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
docker_stack_files_dir: /stacks
|
docker_stack_files_dir: /stacks
|
||||||
docker_swarm_public_network_name: public
|
docker_swarm_public_network_name: public
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- docker
|
- docker
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "{{ docker_stack_files_dir }}"
|
path: "{{ docker_stack_files_dir }}"
|
||||||
state: directory
|
state: directory
|
||||||
mode: '0755'
|
mode: "0755"
|
||||||
become: true
|
become: true
|
||||||
tags:
|
tags:
|
||||||
- fs
|
- fs
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,8 @@ The docker image version to be used in stack creation.
|
||||||
subdomain_alias: git
|
subdomain_alias: git
|
||||||
```
|
```
|
||||||
|
|
||||||
If the deployed container should be served over a uri that is not the stack name.
|
If the deployed container should be served over a uri that is not the stack name.
|
||||||
By default, it will be set to `git.yourdomain.com` -
|
By default, it will be set to `git.yourdomain.com` -
|
||||||
if this option is not set it will be served on `forgejo.yourdomain.com` instead.
|
if this option is not set it will be served on `forgejo.yourdomain.com` instead.
|
||||||
|
|
||||||
For now forgejo will still need to be initially set up after installation.
|
For now forgejo will still need to be initially set up after installation.
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
forgejo_version: 7
|
forgejo_version: 7
|
||||||
|
|
||||||
forgejo_upstream_file_dir: "{{ docker_stack_files_dir }}/{{ stack_name }}"
|
forgejo_upstream_file_dir: "{{ docker_stack_files_dir }}/{{ stack_name }}"
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
galaxy_info:
|
galaxy_info:
|
||||||
author: Marty Oehme
|
author: Marty Oehme
|
||||||
description: Light-weight git hosting
|
description: Light-weight git hosting
|
||||||
|
|
|
||||||
|
|
@ -9,4 +9,3 @@
|
||||||
- apt
|
- apt
|
||||||
- download
|
- download
|
||||||
- packages
|
- packages
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "/app/forgejo/"
|
path: "/app/forgejo/"
|
||||||
state: directory
|
state: directory
|
||||||
mode: '0770'
|
mode: "0770"
|
||||||
owner: "{{ git_user['uid'] }}"
|
owner: "{{ git_user['uid'] }}"
|
||||||
group: "{{ git_user['group'] }}"
|
group: "{{ git_user['group'] }}"
|
||||||
become: true
|
become: true
|
||||||
|
|
@ -47,7 +47,7 @@
|
||||||
dest: "/app/forgejo/forgejo"
|
dest: "/app/forgejo/forgejo"
|
||||||
owner: "{{ git_user['uid'] }}"
|
owner: "{{ git_user['uid'] }}"
|
||||||
group: "{{ git_user['group'] }}"
|
group: "{{ git_user['group'] }}"
|
||||||
mode: '0750'
|
mode: "0750"
|
||||||
become: true
|
become: true
|
||||||
|
|
||||||
- name: Host machine forgejo command points to passthrough command
|
- name: Host machine forgejo command points to passthrough command
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
stack_name: forgejo
|
stack_name: forgejo
|
||||||
|
|
||||||
stack_image: "codeberg.org/forgejo/forgejo"
|
stack_image: "codeberg.org/forgejo/forgejo"
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
# landingpage
|
# landingpage
|
||||||
|
|
||||||
The public face of my server.
|
The public face of my server.
|
||||||
Not much to see here honestly,
|
Not much to see here honestly,
|
||||||
just a few simple lines of html explaining what this server is about and how to contact me.
|
just a few simple lines of html explaining what this server is about and how to contact me.
|
||||||
|
|
||||||
I don't see anybody else benefiting massively from this role but me,
|
I don't see anybody else benefiting massively from this role but me,
|
||||||
but if you want the same web presence go for it I suppose 😉
|
but if you want the same web presence go for it I suppose 😉
|
||||||
|
|
||||||
## Defaults
|
## Defaults
|
||||||
|
|
@ -31,7 +31,6 @@ The docker image version to be used in stack creation.
|
||||||
subdomain_alias: www
|
subdomain_alias: www
|
||||||
```
|
```
|
||||||
|
|
||||||
If the deployed container should be served over a uri that is not the stack name.
|
If the deployed container should be served over a uri that is not the stack name.
|
||||||
By default, it will be set to `www.yourdomain.com` -
|
By default, it will be set to `www.yourdomain.com` -
|
||||||
if this option is not set it will be served on `landingpage.yourdomain.com` instead.
|
if this option is not set it will be served on `landingpage.yourdomain.com` instead.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
landingpage_version: latest
|
landingpage_version: latest
|
||||||
|
|
||||||
landingpage_upstream_file_dir: "{{ docker_stack_files_dir }}/{{ stack_name }}"
|
landingpage_upstream_file_dir: "{{ docker_stack_files_dir }}/{{ stack_name }}"
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "{{ landingpage_upstream_file_dir }}"
|
path: "{{ landingpage_upstream_file_dir }}"
|
||||||
state: directory
|
state: directory
|
||||||
mode: '0755'
|
mode: "0755"
|
||||||
become: true
|
become: true
|
||||||
listen: "update landingpage upstream"
|
listen: "update landingpage upstream"
|
||||||
|
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
community.docker.docker_container_exec:
|
community.docker.docker_container_exec:
|
||||||
container: "{{ caddy_container_id }}"
|
container: "{{ caddy_container_id }}"
|
||||||
command: >
|
command: >
|
||||||
curl -X POST -H "Content-Type: application/json" -d @{{ landingpage_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (landingpage_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
curl -X POST -H "Content-Type: application/json" -d @{{ landingpage_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (landingpage_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
||||||
become: true
|
become: true
|
||||||
listen: "update landingpage upstream"
|
listen: "update landingpage upstream"
|
||||||
|
|
||||||
|
|
@ -50,4 +50,3 @@
|
||||||
state: absent
|
state: absent
|
||||||
become: true
|
become: true
|
||||||
listen: "update landingpage upstream"
|
listen: "update landingpage upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
galaxy_info:
|
galaxy_info:
|
||||||
author: Marty Oehme
|
author: Marty Oehme
|
||||||
description: Installs my personal public facing landing page as a docker stack service
|
description: Installs my personal public facing landing page as a docker stack service
|
||||||
|
|
@ -7,7 +6,6 @@ galaxy_info:
|
||||||
min_ansible_version: "2.9"
|
min_ansible_version: "2.9"
|
||||||
galaxy_tags: []
|
galaxy_tags: []
|
||||||
|
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
- caddy_id
|
- caddy_id
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,3 @@
|
||||||
tags:
|
tags:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
notify: "update landingpage upstream"
|
notify: "update landingpage upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
stack_name: landingpage
|
stack_name: landingpage
|
||||||
|
|
||||||
stack_image: "martyo/cloudserve-landing"
|
stack_image: "martyo/cloudserve-landing"
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,6 @@ The docker image version to be used in stack creation.
|
||||||
subdomain_alias: rss
|
subdomain_alias: rss
|
||||||
```
|
```
|
||||||
|
|
||||||
If the deployed container should be served over a uri that is not the stack name.
|
If the deployed container should be served over a uri that is not the stack name.
|
||||||
By default, it will be set to `rss.yourdomain.com` -
|
By default, it will be set to `rss.yourdomain.com` -
|
||||||
if this option is not set it will be served on `miniflux.yourdomain.com` instead.
|
if this option is not set it will be served on `miniflux.yourdomain.com` instead.
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
miniflux_version: latest
|
miniflux_version: latest
|
||||||
|
|
||||||
miniflux_upstream_file_dir: "{{ docker_stack_files_dir }}/{{ stack_name }}"
|
miniflux_upstream_file_dir: "{{ docker_stack_files_dir }}/{{ stack_name }}"
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "{{ miniflux_upstream_file_dir }}"
|
path: "{{ miniflux_upstream_file_dir }}"
|
||||||
state: directory
|
state: directory
|
||||||
mode: '0755'
|
mode: "0755"
|
||||||
become: true
|
become: true
|
||||||
listen: "update miniflux upstream"
|
listen: "update miniflux upstream"
|
||||||
|
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
community.docker.docker_container_exec:
|
community.docker.docker_container_exec:
|
||||||
container: "{{ caddy_container_id }}"
|
container: "{{ caddy_container_id }}"
|
||||||
command: >
|
command: >
|
||||||
curl -X POST -H "Content-Type: application/json" -d @{{ miniflux_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (miniflux_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
curl -X POST -H "Content-Type: application/json" -d @{{ miniflux_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (miniflux_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
||||||
become: true
|
become: true
|
||||||
listen: "update miniflux upstream"
|
listen: "update miniflux upstream"
|
||||||
|
|
||||||
|
|
@ -50,4 +50,3 @@
|
||||||
state: absent
|
state: absent
|
||||||
become: true
|
become: true
|
||||||
listen: "update miniflux upstream"
|
listen: "update miniflux upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
galaxy_info:
|
galaxy_info:
|
||||||
author: Marty Oehme
|
author: Marty Oehme
|
||||||
description: Installs miniflux as a docker stack service
|
description: Installs miniflux as a docker stack service
|
||||||
|
|
@ -7,7 +6,6 @@ galaxy_info:
|
||||||
min_ansible_version: "2.9"
|
min_ansible_version: "2.9"
|
||||||
galaxy_tags: []
|
galaxy_tags: []
|
||||||
|
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
- caddy_id
|
- caddy_id
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,3 @@
|
||||||
tags:
|
tags:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
notify: "update miniflux upstream"
|
notify: "update miniflux upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
stack_name: miniflux
|
stack_name: miniflux
|
||||||
|
|
||||||
stack_image: "miniflux/miniflux"
|
stack_image: "miniflux/miniflux"
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,8 @@ The docker image version to be used in stack creation.
|
||||||
subdomain_alias: prm
|
subdomain_alias: prm
|
||||||
```
|
```
|
||||||
|
|
||||||
If the deployed container should be served over a uri that is not the stack name.
|
If the deployed container should be served over a uri that is not the stack name.
|
||||||
By default, it will be set to `prm.yourdomain.com` (personal relationship manager) -
|
By default, it will be set to `prm.yourdomain.com` (personal relationship manager) -
|
||||||
if this option is not set it will be served on `monica.yourdomain.com` instead.
|
if this option is not set it will be served on `monica.yourdomain.com` instead.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
@ -38,14 +38,14 @@ monica_db_password: mymonicadbpassword
|
||||||
```
|
```
|
||||||
|
|
||||||
Set the default username and password combination on first container start.
|
Set the default username and password combination on first container start.
|
||||||
If loading from an existing volume this does nothing, otherwise it sets the
|
If loading from an existing volume this does nothing, otherwise it sets the
|
||||||
first user so you can instantly log in.
|
first user so you can instantly log in.
|
||||||
|
|
||||||
```
|
```
|
||||||
monica_app_disable_signups: true
|
monica_app_disable_signups: true
|
||||||
```
|
```
|
||||||
|
|
||||||
Sets the behavior on the login screen ---
|
Sets the behavior on the login screen ---
|
||||||
if set to true (default) will not let anyone but the first user sign up,
|
if set to true (default) will not let anyone but the first user sign up,
|
||||||
who automatically becomes an administrative user.
|
who automatically becomes an administrative user.
|
||||||
If set to false will allow multiple users to sign up on the instance.
|
If set to false will allow multiple users to sign up on the instance.
|
||||||
|
|
@ -57,13 +57,13 @@ monica_app_weather_api_key: <your-darksky-key>
|
||||||
|
|
||||||
If `monica_app_geolocation_api_key` is set, Monica will translate addresses
|
If `monica_app_geolocation_api_key` is set, Monica will translate addresses
|
||||||
input into the app to geographical latitude/ longitude data.
|
input into the app to geographical latitude/ longitude data.
|
||||||
It requires an api key from https://locationiq.com/, which are free for
|
It requires an api key from https://locationiq.com/, which are free for
|
||||||
10.000 daily requests.
|
10.000 daily requests.
|
||||||
|
|
||||||
Similarly, if `monica_app_weather_api_key` is set, monica will (afaik) show
|
Similarly, if `monica_app_weather_api_key` is set, monica will (afaik) show
|
||||||
weather data for the location of individual contacts.
|
weather data for the location of individual contacts.
|
||||||
It requires an API key from https://darksky.net/dev/register, where
|
It requires an API key from https://darksky.net/dev/register, where
|
||||||
1.000 daily requests are free.
|
1.000 daily requests are free.
|
||||||
Be aware, however, that since darksky's sale to Apple, no new API signups are possible.
|
Be aware, however, that since darksky's sale to Apple, no new API signups are possible.
|
||||||
To use this feature, `monica_app_geolocation_api_key` must also be filled out.
|
To use this feature, `monica_app_geolocation_api_key` must also be filled out.
|
||||||
|
|
||||||
|
|
@ -71,8 +71,8 @@ To use this feature, `monica_app_geolocation_api_key` must also be filled out.
|
||||||
monica_mail_host: smtp.eu.mailgun.org
|
monica_mail_host: smtp.eu.mailgun.org
|
||||||
monica_mail_port: 465
|
monica_mail_port: 465
|
||||||
monica_mail_encryption: tls
|
monica_mail_encryption: tls
|
||||||
monica_mail_username:
|
monica_mail_username:
|
||||||
monica_mail_password:
|
monica_mail_password:
|
||||||
monica_mail_from: monica@yourserver.com
|
monica_mail_from: monica@yourserver.com
|
||||||
monica_mail_from_name: Monica
|
monica_mail_from_name: Monica
|
||||||
monica_mail_new_user_notification_address: "{{ caddy_email }}"
|
monica_mail_new_user_notification_address: "{{ caddy_email }}"
|
||||||
|
|
@ -81,5 +81,5 @@ monica_mail_new_user_notification_address: "{{ caddy_email }}"
|
||||||
Sets up the necessary details for Monica to send out registration and reminder e-mails.
|
Sets up the necessary details for Monica to send out registration and reminder e-mails.
|
||||||
Requires an smtp server set up, most easily doable through things like mailgun or sendgrid.
|
Requires an smtp server set up, most easily doable through things like mailgun or sendgrid.
|
||||||
Variables should be relatively self-explanatory,
|
Variables should be relatively self-explanatory,
|
||||||
with `monica_mail_new_user_notification_address` being the address the notifications should be sent *to*,
|
with `monica_mail_new_user_notification_address` being the address the notifications should be sent _to_,
|
||||||
so in all probability some sort of administration address.
|
so in all probability some sort of administration address.
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
monica_version: latest
|
monica_version: latest
|
||||||
|
|
||||||
monica_upstream_file_dir: "{{ docker_stack_files_dir }}/{{ stack_name }}"
|
monica_upstream_file_dir: "{{ docker_stack_files_dir }}/{{ stack_name }}"
|
||||||
|
|
@ -19,8 +18,8 @@ monica_db_password: mymonicadbpassword
|
||||||
#monica_app_weather_api_key:
|
#monica_app_weather_api_key:
|
||||||
|
|
||||||
#monica_mail_host: smtp.eu.mailgun.org
|
#monica_mail_host: smtp.eu.mailgun.org
|
||||||
#monica_mail_username:
|
#monica_mail_username:
|
||||||
#monica_mail_password:
|
#monica_mail_password:
|
||||||
monica_mail_port: 465
|
monica_mail_port: 465
|
||||||
monica_mail_encryption: tls
|
monica_mail_encryption: tls
|
||||||
#monica_mail_from: monica@yourserver.com
|
#monica_mail_from: monica@yourserver.com
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "{{ monica_upstream_file_dir }}"
|
path: "{{ monica_upstream_file_dir }}"
|
||||||
state: directory
|
state: directory
|
||||||
mode: '0755'
|
mode: "0755"
|
||||||
become: true
|
become: true
|
||||||
listen: "update monica upstream"
|
listen: "update monica upstream"
|
||||||
|
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
community.docker.docker_container_exec:
|
community.docker.docker_container_exec:
|
||||||
container: "{{ caddy_container_id }}"
|
container: "{{ caddy_container_id }}"
|
||||||
command: >
|
command: >
|
||||||
curl -X POST -H "Content-Type: application/json" -d @{{ monica_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (monica_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
curl -X POST -H "Content-Type: application/json" -d @{{ monica_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (monica_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
||||||
become: true
|
become: true
|
||||||
listen: "update monica upstream"
|
listen: "update monica upstream"
|
||||||
|
|
||||||
|
|
@ -50,4 +50,3 @@
|
||||||
state: absent
|
state: absent
|
||||||
become: true
|
become: true
|
||||||
listen: "update monica upstream"
|
listen: "update monica upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
galaxy_info:
|
galaxy_info:
|
||||||
author: Marty Oehme
|
author: Marty Oehme
|
||||||
description: Installs monica as a docker stack service
|
description: Installs monica as a docker stack service
|
||||||
|
|
@ -7,7 +6,6 @@ galaxy_info:
|
||||||
min_ansible_version: "2.9"
|
min_ansible_version: "2.9"
|
||||||
galaxy_tags: []
|
galaxy_tags: []
|
||||||
|
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
- caddy_id
|
- caddy_id
|
||||||
|
|
|
||||||
|
|
@ -9,4 +9,3 @@
|
||||||
- apt
|
- apt
|
||||||
- download
|
- download
|
||||||
- packages
|
- packages
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,7 @@
|
||||||
ansible.builtin.shell: echo -n 'base64:'; openssl rand -base64 32
|
ansible.builtin.shell: echo -n 'base64:'; openssl rand -base64 32
|
||||||
register: monica_app_key
|
register: monica_app_key
|
||||||
|
|
||||||
- set_fact:
|
- set_fact: monica_app_key={{ monica_app_key.stdout }}
|
||||||
monica_app_key={{ monica_app_key.stdout }}
|
|
||||||
|
|
||||||
## install container
|
## install container
|
||||||
- name: Check upstream status
|
- name: Check upstream status
|
||||||
|
|
@ -37,4 +36,3 @@
|
||||||
tags:
|
tags:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
notify: "update monica upstream"
|
notify: "update monica upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
stack_name: monica
|
stack_name: monica
|
||||||
|
|
||||||
stack_image: "monica"
|
stack_image: "monica"
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,14 @@ A full office suite and groupware proposition,
|
||||||
though its main draw for most is the file synchronization abilities.
|
though its main draw for most is the file synchronization abilities.
|
||||||
AKA Dropbox replacement.
|
AKA Dropbox replacement.
|
||||||
|
|
||||||
This software can grow enormous and enormously complicated,
|
This software can grow enormous and enormously complicated,
|
||||||
this Ansible setup role concentrates on 3 things:
|
this Ansible setup role concentrates on 3 things:
|
||||||
* a stable and secure base setup from the official docker container
|
|
||||||
* automatic setup of an email pipeline so users can reset passwords and be updated of changes
|
|
||||||
* the ability to use S3 object storage as the primary way of storing users' files
|
|
||||||
|
|
||||||
The rest should be taken care of either automatically,
|
- a stable and secure base setup from the official docker container
|
||||||
|
- automatic setup of an email pipeline so users can reset passwords and be updated of changes
|
||||||
|
- the ability to use S3 object storage as the primary way of storing users' files
|
||||||
|
|
||||||
|
The rest should be taken care of either automatically,
|
||||||
or supplied after the fact (if using different plugins or similar).
|
or supplied after the fact (if using different plugins or similar).
|
||||||
|
|
||||||
## Defaults
|
## Defaults
|
||||||
|
|
@ -32,7 +33,7 @@ nextcloud_version: fpm
|
||||||
nextcloud_db_version: 12
|
nextcloud_db_version: 12
|
||||||
```
|
```
|
||||||
|
|
||||||
The docker image version to be used in stack creation.
|
The docker image version to be used in stack creation.
|
||||||
The role sets up the `php-fpm` version of the official Nextcloud image.
|
The role sets up the `php-fpm` version of the official Nextcloud image.
|
||||||
That means, Caddy is used in front as the server which presents all pages
|
That means, Caddy is used in front as the server which presents all pages
|
||||||
and access to files, the Nextcloud image itself only serves as the PHP data store.
|
and access to files, the Nextcloud image itself only serves as the PHP data store.
|
||||||
|
|
@ -41,17 +42,17 @@ If changing the version to one relying on Nextcloud's in-built Apache server,
|
||||||
take care to change where the upstream proxy is pointing to since the Caddy server in front loses its meaning.
|
take care to change where the upstream proxy is pointing to since the Caddy server in front loses its meaning.
|
||||||
|
|
||||||
The second variable points to the docker image that should be used for the PostgreSQL database,
|
The second variable points to the docker image that should be used for the PostgreSQL database,
|
||||||
with 12 pre-filled as default.
|
with 12 pre-filled as default.
|
||||||
You can put this to latest, but should take care to migrate the database correctly when an update rolls around,
|
You can put this to latest, but should take care to migrate the database correctly when an update rolls around,
|
||||||
or it *will* destroy your data at some point.
|
or it _will_ destroy your data at some point.
|
||||||
Generally, it seems easier to pin this to a specific version and then only update manually.
|
Generally, it seems easier to pin this to a specific version and then only update manually.
|
||||||
|
|
||||||
```yml
|
```yml
|
||||||
subdomain_alias: files
|
subdomain_alias: files
|
||||||
```
|
```
|
||||||
|
|
||||||
If the deployed container should be served over a uri that is not the stack name.
|
If the deployed container should be served over a uri that is not the stack name.
|
||||||
By default, it will be set to `files.yourdomain.com` -
|
By default, it will be set to `files.yourdomain.com` -
|
||||||
if this option is not set it will be served on `nextcloud.yourdomain.com` instead.
|
if this option is not set it will be served on `nextcloud.yourdomain.com` instead.
|
||||||
If you change or delete this, you should also change what `nextcloud_trusted_domains` points to.
|
If you change or delete this, you should also change what `nextcloud_trusted_domains` points to.
|
||||||
|
|
||||||
|
|
@ -66,7 +67,7 @@ nextcloud_db_password: secretnextcloud
|
||||||
```
|
```
|
||||||
|
|
||||||
Sets the default username and password for application and database.
|
Sets the default username and password for application and database.
|
||||||
All of these variables are necessary to circumvent the manual installation process
|
All of these variables are necessary to circumvent the manual installation process
|
||||||
you would usually be faced with on first creating a Nextcloud instance.
|
you would usually be faced with on first creating a Nextcloud instance.
|
||||||
Ideally change all of these for your personal setup,
|
Ideally change all of these for your personal setup,
|
||||||
but it is especially important to change the app admin login data since they are what is public facing.
|
but it is especially important to change the app admin login data since they are what is public facing.
|
||||||
|
|
@ -77,7 +78,7 @@ nextcloud_trusted_domains: "{{ subdomain_alias }}.{{ server_domain }}"
|
||||||
|
|
||||||
The domains that are allowed to access your Nextcloud instance.
|
The domains that are allowed to access your Nextcloud instance.
|
||||||
Should point to any domains that you want it accessible on,
|
Should point to any domains that you want it accessible on,
|
||||||
can be a space-separated list of them.
|
can be a space-separated list of them.
|
||||||
Take care to include the sub-domain if your are accessing it through one of them.
|
Take care to include the sub-domain if your are accessing it through one of them.
|
||||||
[Further explanation](https://blog.martyoeh.me/posts/2021-11-18-nextcloud-trusted-domains/).
|
[Further explanation](https://blog.martyoeh.me/posts/2021-11-18-nextcloud-trusted-domains/).
|
||||||
|
|
||||||
|
|
@ -130,7 +131,6 @@ If your details are correct, Nextcloud should automatically set up S3 as its pri
|
||||||
|
|
||||||
Be careful if you switch an existing data volume of the Nextcloud image to S3
|
Be careful if you switch an existing data volume of the Nextcloud image to S3
|
||||||
as you will lose all access to existing files.
|
as you will lose all access to existing files.
|
||||||
The files *should* not be deleted at this point,
|
The files _should_ not be deleted at this point,
|
||||||
only access will be lost,
|
only access will be lost,
|
||||||
but you are playing with fire at this point.
|
but you are playing with fire at this point.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
# set preferred application version
|
# set preferred application version
|
||||||
nextcloud_version: 28-fpm-alpine
|
nextcloud_version: 28-fpm-alpine
|
||||||
# set preferred postgres version
|
# set preferred postgres version
|
||||||
|
|
@ -31,7 +30,6 @@ nextcloud_smtp_authtype: LOGIN
|
||||||
# nextcloud_smtp_password: <smtp-password>
|
# nextcloud_smtp_password: <smtp-password>
|
||||||
nextcloud_smtp_from_address: noreply
|
nextcloud_smtp_from_address: noreply
|
||||||
nextcloud_smtp_from_domain: "{{ server_domain }}"
|
nextcloud_smtp_from_domain: "{{ server_domain }}"
|
||||||
|
|
||||||
# the following block is required *fully* for primary object storage
|
# the following block is required *fully* for primary object storage
|
||||||
# nextcloud_s3_host: s3.eu-central-1.wasabisys.com
|
# nextcloud_s3_host: s3.eu-central-1.wasabisys.com
|
||||||
# nextcloud_s3_bucket: nextcloud
|
# nextcloud_s3_bucket: nextcloud
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "{{ nextcloud_upstream_file_dir }}"
|
path: "{{ nextcloud_upstream_file_dir }}"
|
||||||
state: directory
|
state: directory
|
||||||
mode: '0755'
|
mode: "0755"
|
||||||
become: true
|
become: true
|
||||||
listen: "update nextcloud upstream"
|
listen: "update nextcloud upstream"
|
||||||
|
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
community.docker.docker_container_exec:
|
community.docker.docker_container_exec:
|
||||||
container: "{{ caddy_container_id }}"
|
container: "{{ caddy_container_id }}"
|
||||||
command: >
|
command: >
|
||||||
curl -X POST -H "Content-Type: application/json" -d @{{ nextcloud_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (nextcloud_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
curl -X POST -H "Content-Type: application/json" -d @{{ nextcloud_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (nextcloud_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
||||||
become: true
|
become: true
|
||||||
listen: "update nextcloud upstream"
|
listen: "update nextcloud upstream"
|
||||||
|
|
||||||
|
|
@ -50,4 +50,3 @@
|
||||||
state: absent
|
state: absent
|
||||||
become: true
|
become: true
|
||||||
listen: "update nextcloud upstream"
|
listen: "update nextcloud upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
galaxy_info:
|
galaxy_info:
|
||||||
author: Marty Oehme
|
author: Marty Oehme
|
||||||
description: Installs nextcloud as a docker stack service
|
description: Installs nextcloud as a docker stack service
|
||||||
|
|
@ -7,7 +6,6 @@ galaxy_info:
|
||||||
min_ansible_version: "2.9"
|
min_ansible_version: "2.9"
|
||||||
galaxy_tags: []
|
galaxy_tags: []
|
||||||
|
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
- caddy_id
|
- caddy_id
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "{{ nextcloud_upstream_file_dir }}"
|
path: "{{ nextcloud_upstream_file_dir }}"
|
||||||
state: directory
|
state: directory
|
||||||
mode: '0755'
|
mode: "0755"
|
||||||
become: true
|
become: true
|
||||||
notify: "update nextcloud upstream"
|
notify: "update nextcloud upstream"
|
||||||
|
|
||||||
|
|
@ -36,4 +36,3 @@
|
||||||
tags:
|
tags:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
notify: "update nextcloud upstream"
|
notify: "update nextcloud upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
stack_name: nextcloud
|
stack_name: nextcloud
|
||||||
|
|
||||||
stack_image: "nextcloud"
|
stack_image: "nextcloud"
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ The on-target directory where the proxy configuration file should be stashed.
|
||||||
ntfy_use_https: true
|
ntfy_use_https: true
|
||||||
```
|
```
|
||||||
|
|
||||||
Whether the service should be reachable through http (port 80) or through https (port 443) and provision an https certificate.
|
Whether the service should be reachable through http (port 80) or through https (port 443) and provision an https certificate.
|
||||||
Usually you will want this to stay `true`,
|
Usually you will want this to stay `true`,
|
||||||
especially on the public facing web.
|
especially on the public facing web.
|
||||||
|
|
||||||
|
|
@ -33,8 +33,8 @@ The docker image version to be used in stack creation.
|
||||||
subdomain_alias: push
|
subdomain_alias: push
|
||||||
```
|
```
|
||||||
|
|
||||||
If the deployed container should be served over a uri that is not the stack name.
|
If the deployed container should be served over a uri that is not the stack name.
|
||||||
By default, it will be set to `push.yourdomain.com` -
|
By default, it will be set to `push.yourdomain.com` -
|
||||||
if this option is not set it will be served on `ntfy.yourdomain.com` instead.
|
if this option is not set it will be served on `ntfy.yourdomain.com` instead.
|
||||||
|
|
||||||
The individual `ntfy` options to be changed are very well described on
|
The individual `ntfy` options to be changed are very well described on
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "{{ ntfy_upstream_file_dir }}"
|
path: "{{ ntfy_upstream_file_dir }}"
|
||||||
state: directory
|
state: directory
|
||||||
mode: '0755'
|
mode: "0755"
|
||||||
become: true
|
become: true
|
||||||
listen: "update ntfy upstream"
|
listen: "update ntfy upstream"
|
||||||
|
|
||||||
|
|
@ -40,7 +40,6 @@
|
||||||
community.docker.docker_container_exec:
|
community.docker.docker_container_exec:
|
||||||
container: "{{ caddy_container_id }}"
|
container: "{{ caddy_container_id }}"
|
||||||
command: >
|
command: >
|
||||||
curl -X POST -H "Content-Type: application/json" -d @{{ ntfy_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (ntfy_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
curl -X POST -H "Content-Type: application/json" -d @{{ ntfy_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (ntfy_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
||||||
become: true
|
become: true
|
||||||
listen: "update ntfy upstream"
|
listen: "update ntfy upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
galaxy_info:
|
galaxy_info:
|
||||||
author: Marty Oehme
|
author: Marty Oehme
|
||||||
description: Installs a self-hosted push notification service through docker-swarm.
|
description: Installs a self-hosted push notification service through docker-swarm.
|
||||||
|
|
@ -7,7 +6,6 @@ galaxy_info:
|
||||||
min_ansible_version: "2.9"
|
min_ansible_version: "2.9"
|
||||||
galaxy_tags: []
|
galaxy_tags: []
|
||||||
|
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
- caddy_id
|
- caddy_id
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "{{ ntfy_upstream_file_dir }}"
|
path: "{{ ntfy_upstream_file_dir }}"
|
||||||
state: directory
|
state: directory
|
||||||
mode: '0755'
|
mode: "0755"
|
||||||
become: true
|
become: true
|
||||||
|
|
||||||
- name: Move ntfy configuration file to target dir
|
- name: Move ntfy configuration file to target dir
|
||||||
|
|
@ -35,4 +35,3 @@
|
||||||
tags:
|
tags:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
notify: "update ntfy upstream"
|
notify: "update ntfy upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
stack_name: ntfy
|
stack_name: ntfy
|
||||||
|
|
||||||
stack_image: "binwiederhier/ntfy"
|
stack_image: "binwiederhier/ntfy"
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,8 @@ The docker image version to be used in stack creation.
|
||||||
subdomain_alias: search
|
subdomain_alias: search
|
||||||
```
|
```
|
||||||
|
|
||||||
If the deployed container should be served over a uri that is not the stack name.
|
If the deployed container should be served over a uri that is not the stack name.
|
||||||
By default, it will be set to `search.yourdomain.com` -
|
By default, it will be set to `search.yourdomain.com` -
|
||||||
if this option is not set it will be served on `searx.yourdomain.com` instead.
|
if this option is not set it will be served on `searx.yourdomain.com` instead.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
@ -39,11 +39,11 @@ searx_authentication:
|
||||||
By default, the searx instance is not protected with a login, however you
|
By default, the searx instance is not protected with a login, however you
|
||||||
can have caddy provide a basic auth login form by using this variable.
|
can have caddy provide a basic auth login form by using this variable.
|
||||||
|
|
||||||
You can either change the login to suit you by generating a combination
|
You can either change the login to suit you by generating a combination
|
||||||
(or multiple, it will also work with an arbitrary amount of logins),
|
(or multiple, it will also work with an arbitrary amount of logins),
|
||||||
or remove the necessity to login altogether by not setting the
|
or remove the necessity to login altogether by not setting the
|
||||||
`searx_authentication` variable to anything.
|
`searx_authentication` variable to anything.
|
||||||
|
|
||||||
The password needs to be in a hashed format, which is easiest to accomplish
|
The password needs to be in a hashed format, which is easiest to accomplish
|
||||||
with the help of caddy itself --- simply doing `caddy hash-password` will
|
with the help of caddy itself --- simply doing `caddy hash-password` will
|
||||||
allow you to create a new hashed password.
|
allow you to create a new hashed password.
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
searx_version: latest
|
searx_version: latest
|
||||||
|
|
||||||
searx_upstream_file_dir: "{{ docker_stack_files_dir }}/{{ stack_name }}"
|
searx_upstream_file_dir: "{{ docker_stack_files_dir }}/{{ stack_name }}"
|
||||||
|
|
@ -8,7 +7,6 @@ searx_use_https: true
|
||||||
|
|
||||||
# the subdomain link searx will be reachable under
|
# the subdomain link searx will be reachable under
|
||||||
subdomain_alias: search
|
subdomain_alias: search
|
||||||
|
|
||||||
# searx_authentication:
|
# searx_authentication:
|
||||||
# - username: mysearxusername
|
# - username: mysearxusername
|
||||||
# password: JDJhJDE0JFdjUnQ5WWllcU8wa01xS0JBS2dlMy5zMEhRTmxqTXdIZmdjcTN6ZGFwRjJlYUdoSHAwRUhL # mysearxpassword
|
# password: JDJhJDE0JFdjUnQ5WWllcU8wa01xS0JBS2dlMy5zMEhRTmxqTXdIZmdjcTN6ZGFwRjJlYUdoSHAwRUhL # mysearxpassword
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "{{ searx_upstream_file_dir }}"
|
path: "{{ searx_upstream_file_dir }}"
|
||||||
state: directory
|
state: directory
|
||||||
mode: '0755'
|
mode: "0755"
|
||||||
become: true
|
become: true
|
||||||
listen: "update searx upstream"
|
listen: "update searx upstream"
|
||||||
|
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
community.docker.docker_container_exec:
|
community.docker.docker_container_exec:
|
||||||
container: "{{ caddy_container_id }}"
|
container: "{{ caddy_container_id }}"
|
||||||
command: >
|
command: >
|
||||||
curl -X POST -H "Content-Type: application/json" -d @{{ searx_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (searx_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
curl -X POST -H "Content-Type: application/json" -d @{{ searx_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (searx_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
||||||
become: true
|
become: true
|
||||||
listen: "update searx upstream"
|
listen: "update searx upstream"
|
||||||
|
|
||||||
|
|
@ -50,4 +50,3 @@
|
||||||
state: absent
|
state: absent
|
||||||
become: true
|
become: true
|
||||||
listen: "update searx upstream"
|
listen: "update searx upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
galaxy_info:
|
galaxy_info:
|
||||||
author: Marty Oehme
|
author: Marty Oehme
|
||||||
description: Installs searx as a docker stack service
|
description: Installs searx as a docker stack service
|
||||||
|
|
@ -7,7 +6,6 @@ galaxy_info:
|
||||||
min_ansible_version: "2.9"
|
min_ansible_version: "2.9"
|
||||||
galaxy_tags: []
|
galaxy_tags: []
|
||||||
|
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
- caddy_id
|
- caddy_id
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,3 @@
|
||||||
tags:
|
tags:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
notify: "update searx upstream"
|
notify: "update searx upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
stack_name: searx
|
stack_name: searx
|
||||||
|
|
||||||
stack_image: "searxng/searxng"
|
stack_image: "searxng/searxng"
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,11 @@
|
||||||
A simple and fast bookmark manager.
|
A simple and fast bookmark manager.
|
||||||
Can be deployed in minutes and takes minimum amount of resources.
|
Can be deployed in minutes and takes minimum amount of resources.
|
||||||
|
|
||||||
Be aware that shaarli installations can *not* be fully automated.
|
Be aware that shaarli installations can _not_ be fully automated.
|
||||||
That means after running this ansible role you will still have to setup up the first run wizard and create a user and so forth
|
That means after running this ansible role you will still have to setup up the first run wizard and create a user and so forth
|
||||||
(if not running with an existing data-store).
|
(if not running with an existing data-store).
|
||||||
Do this quickly after setup,
|
Do this quickly after setup,
|
||||||
*especially* if your instance is public-facing!
|
_especially_ if your instance is public-facing!
|
||||||
{: .alert .alert-warning}
|
{: .alert .alert-warning}
|
||||||
|
|
||||||
## Defaults
|
## Defaults
|
||||||
|
|
@ -34,7 +34,6 @@ The docker image version to be used in stack creation.
|
||||||
subdomain_alias: links
|
subdomain_alias: links
|
||||||
```
|
```
|
||||||
|
|
||||||
If the deployed container should be served over a uri that is not the stack name.
|
If the deployed container should be served over a uri that is not the stack name.
|
||||||
By default, it will be set to `links.yourdomain.com` -
|
By default, it will be set to `links.yourdomain.com` -
|
||||||
if this option is not set it will be served on `shaarli.yourdomain.com` instead.
|
if this option is not set it will be served on `shaarli.yourdomain.com` instead.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
shaarli_version: release # they offer: latest and release (stable) versions
|
shaarli_version: release # they offer: latest and release (stable) versions
|
||||||
|
|
||||||
shaarli_upstream_file_dir: "{{ docker_stack_files_dir }}/{{ stack_name }}"
|
shaarli_upstream_file_dir: "{{ docker_stack_files_dir }}/{{ stack_name }}"
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "{{ shaarli_upstream_file_dir }}"
|
path: "{{ shaarli_upstream_file_dir }}"
|
||||||
state: directory
|
state: directory
|
||||||
mode: '0755'
|
mode: "0755"
|
||||||
become: true
|
become: true
|
||||||
listen: "update shaarli upstream"
|
listen: "update shaarli upstream"
|
||||||
|
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
community.docker.docker_container_exec:
|
community.docker.docker_container_exec:
|
||||||
container: "{{ caddy_container_id }}"
|
container: "{{ caddy_container_id }}"
|
||||||
command: >
|
command: >
|
||||||
curl -X POST -H "Content-Type: application/json" -d @{{ shaarli_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (shaarli_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
curl -X POST -H "Content-Type: application/json" -d @{{ shaarli_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (shaarli_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
||||||
become: true
|
become: true
|
||||||
listen: "update shaarli upstream"
|
listen: "update shaarli upstream"
|
||||||
|
|
||||||
|
|
@ -50,4 +50,3 @@
|
||||||
state: absent
|
state: absent
|
||||||
become: true
|
become: true
|
||||||
listen: "update shaarli upstream"
|
listen: "update shaarli upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
galaxy_info:
|
galaxy_info:
|
||||||
author: Marty Oehme
|
author: Marty Oehme
|
||||||
description: Installs shaarli as a docker stack service
|
description: Installs shaarli as a docker stack service
|
||||||
|
|
@ -7,7 +6,6 @@ galaxy_info:
|
||||||
min_ansible_version: "2.9"
|
min_ansible_version: "2.9"
|
||||||
galaxy_tags: []
|
galaxy_tags: []
|
||||||
|
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
- caddy_id
|
- caddy_id
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,3 @@
|
||||||
tags:
|
tags:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
notify: "update shaarli upstream"
|
notify: "update shaarli upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
stack_name: shaarli
|
stack_name: shaarli
|
||||||
|
|
||||||
stack_image: "ghcr.io/shaarli/shaarli"
|
stack_image: "ghcr.io/shaarli/shaarli"
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,8 @@ The docker image version to be used in stack creation.
|
||||||
subdomain_alias: time
|
subdomain_alias: time
|
||||||
```
|
```
|
||||||
|
|
||||||
If the deployed container should be served over a uri that is not the stack name.
|
If the deployed container should be served over a uri that is not the stack name.
|
||||||
By default, it will be set to `time.yourdomain.com` -
|
By default, it will be set to `time.yourdomain.com` -
|
||||||
if this option is not set it will be served on `traggo.yourdomain.com` instead.
|
if this option is not set it will be served on `traggo.yourdomain.com` instead.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
@ -37,5 +37,5 @@ traggo_password: mytraggopassword
|
||||||
```
|
```
|
||||||
|
|
||||||
Set the default username and password combination on first container start.
|
Set the default username and password combination on first container start.
|
||||||
If loading from an existing volume this does nothing, otherwise it sets the
|
If loading from an existing volume this does nothing, otherwise it sets the
|
||||||
first user so you can instantly log in.
|
first user so you can instantly log in.
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
traggo_version: latest
|
traggo_version: latest
|
||||||
|
|
||||||
traggo_upstream_file_dir: "{{ docker_stack_files_dir }}/{{ stack_name }}"
|
traggo_upstream_file_dir: "{{ docker_stack_files_dir }}/{{ stack_name }}"
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "{{ traggo_upstream_file_dir }}"
|
path: "{{ traggo_upstream_file_dir }}"
|
||||||
state: directory
|
state: directory
|
||||||
mode: '0755'
|
mode: "0755"
|
||||||
become: true
|
become: true
|
||||||
listen: "update traggo upstream"
|
listen: "update traggo upstream"
|
||||||
|
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
community.docker.docker_container_exec:
|
community.docker.docker_container_exec:
|
||||||
container: "{{ caddy_container_id }}"
|
container: "{{ caddy_container_id }}"
|
||||||
command: >
|
command: >
|
||||||
curl -X POST -H "Content-Type: application/json" -d @{{ traggo_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (traggo_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
curl -X POST -H "Content-Type: application/json" -d @{{ traggo_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (traggo_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
||||||
become: true
|
become: true
|
||||||
listen: "update traggo upstream"
|
listen: "update traggo upstream"
|
||||||
|
|
||||||
|
|
@ -50,4 +50,3 @@
|
||||||
state: absent
|
state: absent
|
||||||
become: true
|
become: true
|
||||||
listen: "update traggo upstream"
|
listen: "update traggo upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
galaxy_info:
|
galaxy_info:
|
||||||
author: Marty Oehme
|
author: Marty Oehme
|
||||||
description: Installs traggo as a docker stack service
|
description: Installs traggo as a docker stack service
|
||||||
|
|
@ -7,7 +6,6 @@ galaxy_info:
|
||||||
min_ansible_version: "2.9"
|
min_ansible_version: "2.9"
|
||||||
galaxy_tags: []
|
galaxy_tags: []
|
||||||
|
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
- caddy_id
|
- caddy_id
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,3 @@
|
||||||
tags:
|
tags:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
notify: "update traggo upstream"
|
notify: "update traggo upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
stack_name: traggo
|
stack_name: traggo
|
||||||
|
|
||||||
stack_image: "traggo/server"
|
stack_image: "traggo/server"
|
||||||
|
|
|
||||||
|
|
@ -39,4 +39,3 @@ stack_image: "wallabag/wallabag"
|
||||||
```
|
```
|
||||||
|
|
||||||
The docker hub image to be use in provisioning.
|
The docker hub image to be use in provisioning.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
wallabag_version: latest
|
wallabag_version: latest
|
||||||
|
|
||||||
wallabag_upstream_file_dir: "{{ docker_stack_files_dir }}/{{ stack_name }}"
|
wallabag_upstream_file_dir: "{{ docker_stack_files_dir }}/{{ stack_name }}"
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "{{ wallabag_upstream_file_dir }}"
|
path: "{{ wallabag_upstream_file_dir }}"
|
||||||
state: directory
|
state: directory
|
||||||
mode: '0755'
|
mode: "0755"
|
||||||
become: true
|
become: true
|
||||||
listen: "update wallabag upstream"
|
listen: "update wallabag upstream"
|
||||||
|
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
community.docker.docker_container_exec:
|
community.docker.docker_container_exec:
|
||||||
container: "{{ caddy_container_id }}"
|
container: "{{ caddy_container_id }}"
|
||||||
command: >
|
command: >
|
||||||
curl -X POST -H "Content-Type: application/json" -d @{{ wallabag_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (wallabag_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
curl -X POST -H "Content-Type: application/json" -d @{{ wallabag_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (wallabag_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
||||||
become: true
|
become: true
|
||||||
listen: "update wallabag upstream"
|
listen: "update wallabag upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
galaxy_info:
|
galaxy_info:
|
||||||
author: Marty Oehme
|
author: Marty Oehme
|
||||||
description: Installs wallabag as a docker stack service
|
description: Installs wallabag as a docker stack service
|
||||||
|
|
@ -7,7 +6,6 @@ galaxy_info:
|
||||||
min_ansible_version: "2.9"
|
min_ansible_version: "2.9"
|
||||||
galaxy_tags: []
|
galaxy_tags: []
|
||||||
|
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
- caddy_id
|
- caddy_id
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
stack_name: wallabag
|
stack_name: wallabag
|
||||||
|
|
||||||
stack_image: "wallabag/wallabag"
|
stack_image: "wallabag/wallabag"
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
whoami_version: latest
|
whoami_version: latest
|
||||||
|
|
||||||
whoami_upstream_file_dir: "{{ docker_stack_files_dir }}/{{ stack.name }}"
|
whoami_upstream_file_dir: "{{ docker_stack_files_dir }}/{{ stack.name }}"
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "{{ whoami_upstream_file_dir }}"
|
path: "{{ whoami_upstream_file_dir }}"
|
||||||
state: directory
|
state: directory
|
||||||
mode: '0755'
|
mode: "0755"
|
||||||
become: true
|
become: true
|
||||||
listen: "update whoami upstream"
|
listen: "update whoami upstream"
|
||||||
|
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
community.docker.docker_container_exec:
|
community.docker.docker_container_exec:
|
||||||
container: "{{ caddy_container_id }}"
|
container: "{{ caddy_container_id }}"
|
||||||
command: >
|
command: >
|
||||||
curl -X POST -H "Content-Type: application/json" -d @{{ whoami_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (whoami_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
curl -X POST -H "Content-Type: application/json" -d @{{ whoami_upstream_file_dir }}/upstream.json localhost:2019/config/apps/http/servers/{{ (whoami_use_https == True) | ternary(caddy_https_server_name, caddy_http_server_name) }}/routes/0/
|
||||||
become: true
|
become: true
|
||||||
listen: "update whoami upstream"
|
listen: "update whoami upstream"
|
||||||
|
|
||||||
|
|
@ -50,4 +50,3 @@
|
||||||
state: absent
|
state: absent
|
||||||
become: true
|
become: true
|
||||||
listen: "update whoami upstream"
|
listen: "update whoami upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
- caddy_id
|
- caddy_id
|
||||||
|
|
|
||||||
|
|
@ -22,4 +22,3 @@
|
||||||
tags:
|
tags:
|
||||||
- docker-swarm
|
- docker-swarm
|
||||||
notify: "update whoami upstream"
|
notify: "update whoami upstream"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,4 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
stack:
|
stack:
|
||||||
name: whoami
|
name: whoami
|
||||||
compose: "{{ lookup('template', 'docker-stack.yml.j2') | from_yaml }}"
|
compose: "{{ lookup('template', 'docker-stack.yml.j2') | from_yaml }}"
|
||||||
|
|
|
||||||
4
site.yml
4
site.yml
|
|
@ -21,13 +21,13 @@
|
||||||
- name: Install caddy reverse proxy
|
- name: Install caddy reverse proxy
|
||||||
import_role:
|
import_role:
|
||||||
role: caddy
|
role: caddy
|
||||||
tags:
|
tags:
|
||||||
- caddy
|
- caddy
|
||||||
|
|
||||||
- name: Grab caddy container id for all following services
|
- name: Grab caddy container id for all following services
|
||||||
import_role:
|
import_role:
|
||||||
role: caddy_id
|
role: caddy_id
|
||||||
tags:
|
tags:
|
||||||
- caddy_id
|
- caddy_id
|
||||||
- always
|
- always
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue