docs(collection): document all roles and fix metadata drift
Replace ansible-galaxy init placeholders across the collection and correct documentation that drifted from the code, after a multi-agent review of every role README against its defaults, tasks and templates. Collection level: - README: role table for all 16 roles, requirements and role-ordering - galaxy.yml: declare community.docker and community.general deps, real description/tags/urls; normalize license to MIT-0 - meta/runtime.yml: requires_ansible '>=2.15.0' - plugins/README: document the homarr_layout filter and garage_credentials lookup instead of scaffold boilerplate Per-role meta/main.yml and README for the placeholder roles (389ds, authentik, authentik_outpost_ldap, base, collabora, drawio, garage, homarr, httpbin, keycloak, nextcloud, opencloud, traefik). Correctness fixes found during review: - keycloak: wrong domain default, drop invented keycloak_cert_resolver, document the provisioning feature - garage: root_domain is .s3.<first-entry>, not the bare domain - opnform: jwt/front_api secrets use `openssl rand -hex 32`; align the validation fail_msg in tasks/main.yml accordingly - send: S3 example references garage_s3_domains[0] (was singular) - opencloud: document required opencloud_wopi_domain License normalized to MIT-0 across galaxy.yml, role meta and READMEs to match the SPDX headers.
This commit is contained in:
parent
518d80ec71
commit
03bf0efe44
38 changed files with 740 additions and 625 deletions
69
README.md
69
README.md
|
|
@ -1,3 +1,68 @@
|
|||
# Ansible Collection - digitalboard.core
|
||||
# Ansible Collection — digitalboard.core
|
||||
|
||||
Documentation for the collection.
|
||||
This collection bundles the Ansible roles used to deploy the
|
||||
[Digitalboard](https://git.digitalboard.ch/Digitalboard) platform: a set of
|
||||
self-hosted, Docker-Compose-based services running behind Traefik, with
|
||||
single sign-on provided by authentik or Keycloak.
|
||||
|
||||
Each role provisions one service (or building block) as a self-contained
|
||||
Docker Compose stack. Roles are consumed from the deployment repository
|
||||
[reference-ansible](https://git.digitalboard.ch/Digitalboard/reference-ansible),
|
||||
where inventories and playbooks tie the roles to concrete hosts.
|
||||
|
||||
## Roles
|
||||
|
||||
| Role | Description |
|
||||
| --- | --- |
|
||||
| `base` | Host baseline: Docker, apt packages and convenience tooling on Debian/Ubuntu. |
|
||||
| `traefik` | Traefik v3 reverse proxy as a public DMZ proxy (file provider) or backend proxy (docker provider). |
|
||||
| `authentik` | [authentik](https://goauthentik.io) IdP (server + worker + Postgres); resources via blueprints. |
|
||||
| `authentik_outpost_ldap` | authentik LDAP outpost exposing an LDAP interface for apps that cannot speak OIDC. |
|
||||
| `keycloak` | [Keycloak](https://www.keycloak.org/) IdP with a PostgreSQL backend. |
|
||||
| `389ds` | [389 Directory Server](https://www.port389.org/) LDAP directory via Docker Compose. |
|
||||
| `nextcloud` | [Nextcloud](https://nextcloud.com/) (fpm) + Postgres + Redis, optional Collabora/draw.io/notify_push. |
|
||||
| `opencloud` | [OpenCloud](https://opencloud.eu/) file platform via Docker Compose. |
|
||||
| `collabora` | [Collabora Online](https://www.collaboraonline.com/) (CODE), used as the WOPI backend for Nextcloud. |
|
||||
| `bookstack` | [BookStack](https://www.bookstackapp.com/) wiki (LSIO + MariaDB) with OIDC SSO and daily backups. |
|
||||
| `drawio` | [draw.io](https://www.drawio.com/) diagram editor, with optional authentik ForwardAuth gating. |
|
||||
| `homarr` | [Homarr](https://github.com/homarr-labs/homarr) dashboard with seeded admin user and OIDC group. |
|
||||
| `opnform` | [OpnForm](https://github.com/OpnForm/OpnForm) self-hosted form builder (api + ui + db + redis). |
|
||||
| `send` | [Send](https://github.com/timvisee/send) (timvisee fork) file sharing with a Redis backend. |
|
||||
| `garage` | [Garage](https://garagehq.deuxfleurs.fr/) S3-compatible object storage with key/bucket provisioning. |
|
||||
| `httpbin` | [httpbin](https://httpbin.org/) HTTP request/response testing service for validating Traefik ingress. |
|
||||
|
||||
## Usage
|
||||
|
||||
Roles are not run from this repository directly. They are consumed from the
|
||||
deployment repository
|
||||
[reference-ansible](https://git.digitalboard.ch/Digitalboard/reference-ansible),
|
||||
which holds the inventories, group/host variables and playbooks. See that
|
||||
repository's `docs/` directory for getting-started instructions, how to run
|
||||
Ansible and how secrets are managed.
|
||||
|
||||
Per-role variables and their defaults are documented in each role's own
|
||||
`README.md` and `meta/argument_specs.yml`.
|
||||
|
||||
## Requirements
|
||||
|
||||
- A Debian/Ubuntu target host (the `base` role bootstraps Docker there).
|
||||
- ansible-core 2.15 or newer on the controller.
|
||||
- The `community.docker` collection (used by nearly every role) and
|
||||
`community.general` (used by the `keycloak` role). Both are declared as
|
||||
`dependencies` in `galaxy.yml` and pulled in automatically when this
|
||||
collection is installed via `ansible-galaxy`.
|
||||
|
||||
The role READMEs use `community.hashi_vault` lookups in their examples to source
|
||||
secrets from HashiCorp Vault. That is a documented convention, not a hard
|
||||
dependency of the roles — supply the variables however you prefer.
|
||||
|
||||
## Role ordering
|
||||
|
||||
Within a play, apply the roles in dependency order: `base` first (Docker and the
|
||||
host baseline), then `traefik` (the shared reverse proxy and its Docker network),
|
||||
then the individual service roles (`authentik`, `keycloak`, `nextcloud`, …),
|
||||
which attach to Traefik's network and expect Docker to be present.
|
||||
|
||||
## License
|
||||
|
||||
MIT-0. See individual roles for per-role license metadata.
|
||||
|
|
|
|||
25
galaxy.yml
25
galaxy.yml
|
|
@ -23,12 +23,12 @@ authors:
|
|||
|
||||
### OPTIONAL but strongly recommended
|
||||
# A short summary description of the collection
|
||||
description: your collection description
|
||||
description: Ansible roles to deploy the Digitalboard self-hosted service platform (Docker Compose + Traefik + SSO)
|
||||
|
||||
# Either a single license or a list of licenses for content inside of a collection. Ansible Galaxy currently only
|
||||
# accepts L(SPDX,https://spdx.org/licenses/) licenses. This key is mutually exclusive with 'license_file'
|
||||
license:
|
||||
- GPL-2.0-or-later
|
||||
- MIT-0
|
||||
|
||||
# The path to the license file for the collection. This path is relative to the root of the collection. This key is
|
||||
# mutually exclusive with 'license'
|
||||
|
|
@ -36,25 +36,36 @@ license_file: ''
|
|||
|
||||
# A list of tags you want to associate with the collection for indexing/searching. A tag name has the same character
|
||||
# requirements as 'namespace' and 'name'
|
||||
tags: []
|
||||
tags:
|
||||
- digitalboard
|
||||
- docker
|
||||
- traefik
|
||||
- sso
|
||||
- selfhosted
|
||||
|
||||
# Collections that this collection requires to be installed for it to be usable. The key of the dict is the
|
||||
# collection label 'namespace.name'. The value is a version range
|
||||
# L(specifiers,https://python-semanticversion.readthedocs.io/en/latest/#requirement-specification). Multiple version
|
||||
# range specifiers can be set and are separated by ','
|
||||
dependencies: {}
|
||||
dependencies:
|
||||
# Used by nearly every role: docker_compose_v2, docker_container,
|
||||
# docker_container_exec, docker_network. Hard runtime dependency.
|
||||
community.docker: '>=3.0.0'
|
||||
# Used by the keycloak role (keycloak_realm/client/group/user and
|
||||
# related modules) in roles/keycloak/tasks/provisioning.yml.
|
||||
community.general: '>=7.0.0'
|
||||
|
||||
# The URL of the originating SCM repository
|
||||
repository: https://git.digitalboard.ch/Digitalboard/digitalboard.core
|
||||
|
||||
# The URL to any online docs
|
||||
documentation: http://docs.example.com
|
||||
documentation: https://git.digitalboard.ch/Digitalboard/digitalboard.core
|
||||
|
||||
# The URL to the homepage of the collection/project
|
||||
homepage: http://example.com
|
||||
homepage: https://git.digitalboard.ch/Digitalboard/digitalboard.core
|
||||
|
||||
# The URL to the collection issue tracker
|
||||
issues: http://example.com/issue/tracker
|
||||
issues: https://git.digitalboard.ch/Digitalboard/digitalboard.core/issues
|
||||
|
||||
# A list of file glob-like patterns used to filter any files or directories that should not be included in the build
|
||||
# artifact. A pattern is matched from the relative path of the file or directory of the collection directory. This
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
#SPDX-License-Identifier: MIT-0
|
||||
---
|
||||
# Collections must specify a minimum required ansible version to upload
|
||||
# to galaxy
|
||||
# requires_ansible: '>=2.9.10'
|
||||
# to galaxy. Aligned with the highest min_ansible_version declared by the
|
||||
# roles (the traefik role requires ansible-core 2.15).
|
||||
requires_ansible: '>=2.15.0'
|
||||
|
||||
# Content that Ansible needs to load from another location or that has
|
||||
# been deprecated/removed
|
||||
|
|
|
|||
|
|
@ -1,31 +1,32 @@
|
|||
# Collections Plugins Directory
|
||||
# Collection Plugins — digitalboard.core
|
||||
|
||||
This directory can be used to ship various plugins inside an Ansible collection. Each plugin is placed in a folder that
|
||||
is named after the type of plugin it is in. It can also include the `module_utils` and `modules` directory that
|
||||
would contain module utils and modules respectively.
|
||||
This collection ships a small number of custom plugins that support the roles.
|
||||
They are addressed by their fully qualified name, `digitalboard.core.<name>`.
|
||||
|
||||
Here is an example directory of the majority of plugins currently supported by Ansible:
|
||||
## Filter plugins (`filter/`)
|
||||
|
||||
```
|
||||
└── plugins
|
||||
├── action
|
||||
├── become
|
||||
├── cache
|
||||
├── callback
|
||||
├── cliconf
|
||||
├── connection
|
||||
├── filter
|
||||
├── httpapi
|
||||
├── inventory
|
||||
├── lookup
|
||||
├── module_utils
|
||||
├── modules
|
||||
├── netconf
|
||||
├── shell
|
||||
├── strategy
|
||||
├── terminal
|
||||
├── test
|
||||
└── vars
|
||||
`homarr_layout` — computes Homarr dashboard grid layouts (desktop / tablet /
|
||||
mobile breakpoints) from a list of apps, returning a ready-to-render data
|
||||
structure for the SQL seed. Used by the `homarr` role.
|
||||
|
||||
```yaml
|
||||
- name: Compute Homarr app layouts
|
||||
ansible.builtin.set_fact:
|
||||
homarr_layout: "{{ homarr_apps | digitalboard.core.homarr_compute_layouts }}"
|
||||
```
|
||||
|
||||
A full list of plugin types can be found at [Working With Plugins](https://docs.ansible.com/ansible-core/2.19/plugins/plugins.html).
|
||||
## Lookup plugins (`lookup/`)
|
||||
|
||||
`garage_credentials` — returns S3 credentials (`key_id`, `secret_key`) for a
|
||||
named Garage key by executing a docker command on the target host. Used to wire
|
||||
Garage object storage into consuming roles such as `nextcloud`.
|
||||
|
||||
```yaml
|
||||
nextcloud_s3_key: >-
|
||||
{{ lookup('digitalboard.core.garage_credentials', 'nextcloud', host='backend')['key_id'] }}
|
||||
nextcloud_s3_secret: >-
|
||||
{{ lookup('digitalboard.core.garage_credentials', 'nextcloud', host='backend')['secret_key'] }}
|
||||
```
|
||||
|
||||
No other plugin types (modules, action, callback, inventory, etc.) are currently
|
||||
shipped by this collection.
|
||||
|
|
|
|||
|
|
@ -1,38 +1,43 @@
|
|||
Role Name
|
||||
=========
|
||||
# 389ds
|
||||
|
||||
A brief description of the role goes here.
|
||||
Deploys [389 Directory Server](https://www.port389.org/) (`389ds/dirsrv`)
|
||||
as an LDAP directory via Docker Compose. After the container starts, the
|
||||
role creates the configured suffix and a set of base organizational
|
||||
units (e.g. `users`, `groups`).
|
||||
|
||||
Requirements
|
||||
------------
|
||||
## Requirements
|
||||
|
||||
Any pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required.
|
||||
- Docker and Docker Compose on the target host (e.g. via
|
||||
`digitalboard.core.base`)
|
||||
- Ansible collection: `community.docker`
|
||||
|
||||
Role Variables
|
||||
--------------
|
||||
## Role variables
|
||||
|
||||
A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well.
|
||||
| Variable | Default | Description |
|
||||
| --- | --- | --- |
|
||||
| `ds389_image` | `docker.io/389ds/dirsrv:3.1` | Container image. |
|
||||
| `ds389_suffix` | `dc=example,dc=com` | Root suffix of the directory. |
|
||||
| `ds389_root_dn` | `cn=Directory Manager` | Directory Manager bind DN. |
|
||||
| `ds389_root_password` | `changeme` | Directory Manager password — **override this**. |
|
||||
| `ds389_instance_name` | `localhost` | Directory server instance name (slapd config dir). |
|
||||
| `ds389_hostname` | `389ds` | Container hostname (defaults to `ds389_service_name`). |
|
||||
| `ds389_backend_network` | `backend` | Docker network LDAP clients connect over (created by Compose). |
|
||||
| `ds389_ldap_port` | `3389` | Published LDAP port (container port 3389). |
|
||||
| `ds389_ldaps_port` | `3636` | Published LDAPS port (container port 3636). |
|
||||
| `ds389_base_ous` | `[users, groups]` | Base OUs created after startup. |
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
## Example
|
||||
|
||||
A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles.
|
||||
```yaml
|
||||
- hosts: directory
|
||||
become: true
|
||||
roles:
|
||||
- role: digitalboard.core.389ds
|
||||
vars:
|
||||
ds389_suffix: "dc=example,dc=org"
|
||||
ds389_root_password: "{{ vault_ds389_root_password }}"
|
||||
```
|
||||
|
||||
Example Playbook
|
||||
----------------
|
||||
## License
|
||||
|
||||
Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too:
|
||||
|
||||
- hosts: servers
|
||||
roles:
|
||||
- { role: username.rolename, x: 42 }
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
BSD
|
||||
|
||||
Author Information
|
||||
------------------
|
||||
|
||||
An optional section for the role authors to include contact information, or a website (HTML is not allowed).
|
||||
MIT-0
|
||||
|
|
|
|||
|
|
@ -1,35 +1,26 @@
|
|||
#SPDX-License-Identifier: MIT-0
|
||||
galaxy_info:
|
||||
author: your name
|
||||
description: your role description
|
||||
company: your company (optional)
|
||||
author: digitalboard
|
||||
description: Deploy 389 Directory Server (LDAP) via Docker Compose
|
||||
company: Digitalboard
|
||||
license: MIT-0
|
||||
|
||||
# If the issue tracker for your role is not on github, uncomment the
|
||||
# next line and provide a value
|
||||
# issue_tracker_url: http://example.com/issue/tracker
|
||||
min_ansible_version: "2.14"
|
||||
|
||||
# Choose a valid license ID from https://spdx.org - some suggested licenses:
|
||||
# - BSD-3-Clause (default)
|
||||
# - MIT
|
||||
# - GPL-2.0-or-later
|
||||
# - GPL-3.0-only
|
||||
# - Apache-2.0
|
||||
# - CC-BY-4.0
|
||||
license: license (GPL-2.0-or-later, MIT, etc)
|
||||
platforms:
|
||||
- name: Debian
|
||||
versions:
|
||||
- bookworm
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- jammy
|
||||
- noble
|
||||
|
||||
min_ansible_version: 2.2
|
||||
|
||||
# If this a Container Enabled role, provide the minimum Ansible Container version.
|
||||
# min_ansible_container_version:
|
||||
|
||||
galaxy_tags: []
|
||||
# List tags for your role here, one per line. A tag is a keyword that describes
|
||||
# and categorizes the role. Users find roles by searching for tags. Be sure to
|
||||
# remove the '[]' above, if you add tags to this list.
|
||||
#
|
||||
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
|
||||
# Maximum 20 tags per role.
|
||||
galaxy_tags:
|
||||
- 389ds
|
||||
- ldap
|
||||
- directory
|
||||
- docker
|
||||
- digitalboard
|
||||
|
||||
dependencies: []
|
||||
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
|
||||
# if you add dependencies to this list.
|
||||
|
|
|
|||
|
|
@ -101,8 +101,13 @@ from the list to keep state clean.
|
|||
|
||||
## Dependencies
|
||||
|
||||
- Traefik network (`authentik_traefik_network`, default `proxy`)
|
||||
- Internal backend network (`authentik_backend_network`, default `backend`)
|
||||
- Run `digitalboard.core.base` first (Docker) and have the `community.docker`
|
||||
collection installed; the role drives the stack via
|
||||
`community.docker.docker_compose_v2`.
|
||||
- Traefik network (`authentik_traefik_network`, default `proxy`) must exist
|
||||
beforehand (e.g. created by the traefik role); it is referenced as an
|
||||
external network in the Compose file.
|
||||
- Internal backend network (`authentik_backend_network`, default `backend`).
|
||||
|
||||
## Example playbook
|
||||
|
||||
|
|
|
|||
|
|
@ -1,35 +1,28 @@
|
|||
#SPDX-License-Identifier: MIT-0
|
||||
galaxy_info:
|
||||
author: your name
|
||||
description: your role description
|
||||
company: your company (optional)
|
||||
author: digitalboard
|
||||
description: Deploy authentik (server + worker + Postgres) via Docker Compose with blueprint-provisioned resources
|
||||
company: Digitalboard
|
||||
license: MIT-0
|
||||
|
||||
# If the issue tracker for your role is not on github, uncomment the
|
||||
# next line and provide a value
|
||||
# issue_tracker_url: http://example.com/issue/tracker
|
||||
min_ansible_version: "2.14"
|
||||
|
||||
# Choose a valid license ID from https://spdx.org - some suggested licenses:
|
||||
# - BSD-3-Clause (default)
|
||||
# - MIT
|
||||
# - GPL-2.0-or-later
|
||||
# - GPL-3.0-only
|
||||
# - Apache-2.0
|
||||
# - CC-BY-4.0
|
||||
license: license (GPL-2.0-or-later, MIT, etc)
|
||||
platforms:
|
||||
- name: Debian
|
||||
versions:
|
||||
- bookworm
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- jammy
|
||||
- noble
|
||||
|
||||
min_ansible_version: 2.2
|
||||
|
||||
# If this a Container Enabled role, provide the minimum Ansible Container version.
|
||||
# min_ansible_container_version:
|
||||
|
||||
galaxy_tags: []
|
||||
# List tags for your role here, one per line. A tag is a keyword that describes
|
||||
# and categorizes the role. Users find roles by searching for tags. Be sure to
|
||||
# remove the '[]' above, if you add tags to this list.
|
||||
#
|
||||
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
|
||||
# Maximum 20 tags per role.
|
||||
galaxy_tags:
|
||||
- authentik
|
||||
- oidc
|
||||
- sso
|
||||
- idp
|
||||
- docker
|
||||
- traefik
|
||||
- digitalboard
|
||||
|
||||
dependencies: []
|
||||
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
|
||||
# if you add dependencies to this list.
|
||||
|
|
|
|||
|
|
@ -1,38 +1,44 @@
|
|||
Role Name
|
||||
=========
|
||||
# authentik_outpost_ldap
|
||||
|
||||
A brief description of the role goes here.
|
||||
Deploys an [authentik](https://goauthentik.io) LDAP outpost via Docker
|
||||
Compose. The outpost exposes an LDAP interface backed by authentik, so
|
||||
applications that cannot speak OIDC (e.g. Nextcloud or OpenCloud LDAP
|
||||
backends) can still authenticate against the central IdP.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
The outpost connects back to an authentik server using an outpost token
|
||||
issued in the authentik admin interface. The image version must match
|
||||
the authentik server version.
|
||||
|
||||
Any pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required.
|
||||
## Requirements
|
||||
|
||||
Role Variables
|
||||
--------------
|
||||
- Docker and Docker Compose on the target host (e.g. via
|
||||
`digitalboard.core.base`)
|
||||
- Ansible collection: `community.docker`
|
||||
|
||||
A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well.
|
||||
## Role variables
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
| Variable | Default | Description |
|
||||
| --- | --- | --- |
|
||||
| `authentik_outpost_ldap_image` | `ghcr.io/goauthentik/ldap:2026.2.2` | Outpost image (match the server version). |
|
||||
| `authentik_outpost_ldap_host` | `https://authentik.local.test` | URL of the authentik server. |
|
||||
| `authentik_outpost_ldap_token` | `changeme` | Outpost token — **override this**. |
|
||||
| `authentik_outpost_ldap_insecure` | `"true"` | Skip TLS verification toward the authentik server. |
|
||||
| `authentik_outpost_ldap_network` | `ldap` | Docker network LDAP clients connect over (created by the role). |
|
||||
| `authentik_outpost_ldap_authentik_network` | _unset_ | Optional extra external network to the authentik server. |
|
||||
| `authentik_outpost_ldap_extra_hosts` | `[]` | Extra `host:ip` entries for in-container DNS. |
|
||||
|
||||
A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles.
|
||||
## Example
|
||||
|
||||
Example Playbook
|
||||
----------------
|
||||
```yaml
|
||||
- hosts: directory
|
||||
become: true
|
||||
roles:
|
||||
- role: digitalboard.core.authentik_outpost_ldap
|
||||
vars:
|
||||
authentik_outpost_ldap_host: "https://auth.example.com"
|
||||
authentik_outpost_ldap_token: "{{ vault_authentik_ldap_outpost_token }}"
|
||||
```
|
||||
|
||||
Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too:
|
||||
## License
|
||||
|
||||
- hosts: servers
|
||||
roles:
|
||||
- { role: username.rolename, x: 42 }
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
BSD
|
||||
|
||||
Author Information
|
||||
------------------
|
||||
|
||||
An optional section for the role authors to include contact information, or a website (HTML is not allowed).
|
||||
MIT-0
|
||||
|
|
|
|||
|
|
@ -1,35 +1,27 @@
|
|||
#SPDX-License-Identifier: MIT-0
|
||||
galaxy_info:
|
||||
author: your name
|
||||
description: your role description
|
||||
company: your company (optional)
|
||||
author: digitalboard
|
||||
description: Deploy an authentik LDAP outpost via Docker Compose for applications that cannot use OIDC
|
||||
company: Digitalboard
|
||||
license: MIT-0
|
||||
|
||||
# If the issue tracker for your role is not on github, uncomment the
|
||||
# next line and provide a value
|
||||
# issue_tracker_url: http://example.com/issue/tracker
|
||||
min_ansible_version: "2.14"
|
||||
|
||||
# Choose a valid license ID from https://spdx.org - some suggested licenses:
|
||||
# - BSD-3-Clause (default)
|
||||
# - MIT
|
||||
# - GPL-2.0-or-later
|
||||
# - GPL-3.0-only
|
||||
# - Apache-2.0
|
||||
# - CC-BY-4.0
|
||||
license: license (GPL-2.0-or-later, MIT, etc)
|
||||
platforms:
|
||||
- name: Debian
|
||||
versions:
|
||||
- bookworm
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- jammy
|
||||
- noble
|
||||
|
||||
min_ansible_version: 2.2
|
||||
|
||||
# If this a Container Enabled role, provide the minimum Ansible Container version.
|
||||
# min_ansible_container_version:
|
||||
|
||||
galaxy_tags: []
|
||||
# List tags for your role here, one per line. A tag is a keyword that describes
|
||||
# and categorizes the role. Users find roles by searching for tags. Be sure to
|
||||
# remove the '[]' above, if you add tags to this list.
|
||||
#
|
||||
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
|
||||
# Maximum 20 tags per role.
|
||||
galaxy_tags:
|
||||
- authentik
|
||||
- ldap
|
||||
- outpost
|
||||
- sso
|
||||
- docker
|
||||
- digitalboard
|
||||
|
||||
dependencies: []
|
||||
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
|
||||
# if you add dependencies to this list.
|
||||
|
|
|
|||
|
|
@ -1,38 +1,45 @@
|
|||
Role Name
|
||||
=========
|
||||
# base
|
||||
|
||||
A brief description of the role goes here.
|
||||
Host baseline for the Digitalboard platform. Installs Docker (engine,
|
||||
CLI, containerd, buildx, compose plugin) and a small set of apt and
|
||||
convenience packages on Debian/Ubuntu, and sets the shared directory
|
||||
layout every other role builds on.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
This role is intended to run first on every host, before any
|
||||
service role.
|
||||
|
||||
Any pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required.
|
||||
## What it does
|
||||
|
||||
Role Variables
|
||||
--------------
|
||||
- Installs Docker prerequisites (`apt-transport-https`, `ca-certificates`,
|
||||
`curl`, `gnupg`, `lsb-release`, `apache2-utils` for `htpasswd`) plus
|
||||
convenience packages (`htop`, `ncdu`, `vim`) and Docker itself
|
||||
(`docker-ce`, `docker-ce-cli`, `containerd.io`, `docker-buildx-plugin`,
|
||||
`docker-compose-plugin`).
|
||||
- Optionally configures Docker registry mirrors via `/etc/docker/daemon.json`.
|
||||
- Starts and enables the Docker service and writes a custom `/etc/motd`.
|
||||
|
||||
A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well.
|
||||
This role defines the shared directory-layout variables
|
||||
(`docker_compose_base_dir`, `docker_volume_base_dir`) that every service
|
||||
role consumes, but the per-service subdirectories are created by the
|
||||
respective service roles, not here.
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
## Role variables
|
||||
|
||||
A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles.
|
||||
| Variable | Default | Description |
|
||||
| --- | --- | --- |
|
||||
| `docker_compose_base_dir` | `/etc/docker/compose` | Root directory for per-service Compose projects. |
|
||||
| `docker_volume_base_dir` | `/srv/data` | Root directory for per-service persistent volumes. |
|
||||
| `docker_registry_mirrors` | `[]` | Optional list of registry mirror URLs; empty disables mirrors. |
|
||||
|
||||
Example Playbook
|
||||
----------------
|
||||
## Example
|
||||
|
||||
Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too:
|
||||
```yaml
|
||||
- hosts: all
|
||||
become: true
|
||||
roles:
|
||||
- digitalboard.core.base
|
||||
```
|
||||
|
||||
- hosts: servers
|
||||
roles:
|
||||
- { role: username.rolename, x: 42 }
|
||||
## License
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
BSD
|
||||
|
||||
Author Information
|
||||
------------------
|
||||
|
||||
An optional section for the role authors to include contact information, or a website (HTML is not allowed).
|
||||
MIT-0
|
||||
|
|
|
|||
|
|
@ -1,35 +1,25 @@
|
|||
#SPDX-License-Identifier: MIT-0
|
||||
galaxy_info:
|
||||
author: your name
|
||||
description: your role description
|
||||
company: your company (optional)
|
||||
author: digitalboard
|
||||
description: Host baseline — install Docker, required apt packages and convenience tooling on Debian/Ubuntu
|
||||
company: Digitalboard
|
||||
license: MIT-0
|
||||
|
||||
# If the issue tracker for your role is not on github, uncomment the
|
||||
# next line and provide a value
|
||||
# issue_tracker_url: http://example.com/issue/tracker
|
||||
min_ansible_version: "2.14"
|
||||
|
||||
# Choose a valid license ID from https://spdx.org - some suggested licenses:
|
||||
# - BSD-3-Clause (default)
|
||||
# - MIT
|
||||
# - GPL-2.0-or-later
|
||||
# - GPL-3.0-only
|
||||
# - Apache-2.0
|
||||
# - CC-BY-4.0
|
||||
license: license (GPL-2.0-or-later, MIT, etc)
|
||||
platforms:
|
||||
- name: Debian
|
||||
versions:
|
||||
- bookworm
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- jammy
|
||||
- noble
|
||||
|
||||
min_ansible_version: 2.1
|
||||
|
||||
# If this a Container Enabled role, provide the minimum Ansible Container version.
|
||||
# min_ansible_container_version:
|
||||
|
||||
galaxy_tags: []
|
||||
# List tags for your role here, one per line. A tag is a keyword that describes
|
||||
# and categorizes the role. Users find roles by searching for tags. Be sure to
|
||||
# remove the '[]' above, if you add tags to this list.
|
||||
#
|
||||
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
|
||||
# Maximum 20 tags per role.
|
||||
galaxy_tags:
|
||||
- base
|
||||
- docker
|
||||
- bootstrap
|
||||
- digitalboard
|
||||
|
||||
dependencies: []
|
||||
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
|
||||
# if you add dependencies to this list.
|
||||
|
|
|
|||
|
|
@ -151,4 +151,4 @@ Restore procedure:
|
|||
|
||||
## License
|
||||
|
||||
MIT
|
||||
MIT-0
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ galaxy_info:
|
|||
author: digitalboard
|
||||
description: Deploy BookStack as a self-contained Docker Compose stack behind Traefik
|
||||
company: digitalboard
|
||||
license: MIT
|
||||
license: MIT-0
|
||||
|
||||
min_ansible_version: "2.14"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,38 +1,42 @@
|
|||
Role Name
|
||||
=========
|
||||
# collabora
|
||||
|
||||
A brief description of the role goes here.
|
||||
Deploys [Collabora Online](https://www.collaboraonline.com/) (CODE,
|
||||
`collabora/code`) via Docker Compose behind Traefik. Collabora is the
|
||||
WOPI backend that renders office documents for Nextcloud and OpenCloud.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
The role templates `coolwsd.xml` to declare which WOPI hosts may call
|
||||
Collabora and which origins may embed it in an iframe.
|
||||
|
||||
Any pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required.
|
||||
## Role variables
|
||||
|
||||
Role Variables
|
||||
--------------
|
||||
| Variable | Default | Description |
|
||||
| --- | --- | --- |
|
||||
| `collabora_domains` | `[office.local.test]` | FQDNs the router accepts; first is canonical. |
|
||||
| `collabora_image` | `collabora/code:latest` | Container image. |
|
||||
| `collabora_port` | `9980` | Container port Traefik forwards to. |
|
||||
| `collabora_traefik_network` | `proxy` | Docker network shared with Traefik. |
|
||||
| `collabora_use_ssl` | `true` | Enable the TLS resolver on the router. |
|
||||
| `collabora_ssl_verification` | `true` | Verify TLS on WOPI callbacks (false for self-signed). |
|
||||
| `collabora_allowed_domains` | `[nextcloud.local.test]` | WOPI hosts allowed to call Collabora (regex). |
|
||||
| `collabora_frame_ancestors` | `[nextcloud.local.test]` | Origins allowed to embed Collabora in an iframe. |
|
||||
| `collabora_extra_hosts` | `[]` | Extra `host:ip` entries for in-container DNS. |
|
||||
|
||||
A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well.
|
||||
## Example
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
```yaml
|
||||
- hosts: services
|
||||
become: true
|
||||
roles:
|
||||
- role: digitalboard.core.collabora
|
||||
vars:
|
||||
collabora_domains:
|
||||
- "office.example.com"
|
||||
collabora_allowed_domains:
|
||||
- "cloud.example.com"
|
||||
collabora_frame_ancestors:
|
||||
- "cloud.example.com"
|
||||
```
|
||||
|
||||
A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles.
|
||||
## License
|
||||
|
||||
Example Playbook
|
||||
----------------
|
||||
|
||||
Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too:
|
||||
|
||||
- hosts: servers
|
||||
roles:
|
||||
- { role: username.rolename, x: 42 }
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
BSD
|
||||
|
||||
Author Information
|
||||
------------------
|
||||
|
||||
An optional section for the role authors to include contact information, or a website (HTML is not allowed).
|
||||
MIT-0
|
||||
|
|
|
|||
|
|
@ -1,35 +1,27 @@
|
|||
#SPDX-License-Identifier: MIT-0
|
||||
galaxy_info:
|
||||
author: your name
|
||||
description: your role description
|
||||
company: your company (optional)
|
||||
author: digitalboard
|
||||
description: Deploy Collabora Online (CODE) as a WOPI backend via Docker Compose behind Traefik
|
||||
company: Digitalboard
|
||||
license: MIT-0
|
||||
|
||||
# If the issue tracker for your role is not on github, uncomment the
|
||||
# next line and provide a value
|
||||
# issue_tracker_url: http://example.com/issue/tracker
|
||||
min_ansible_version: "2.14"
|
||||
|
||||
# Choose a valid license ID from https://spdx.org - some suggested licenses:
|
||||
# - BSD-3-Clause (default)
|
||||
# - MIT
|
||||
# - GPL-2.0-or-later
|
||||
# - GPL-3.0-only
|
||||
# - Apache-2.0
|
||||
# - CC-BY-4.0
|
||||
license: license (GPL-2.0-or-later, MIT, etc)
|
||||
platforms:
|
||||
- name: Debian
|
||||
versions:
|
||||
- bookworm
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- jammy
|
||||
- noble
|
||||
|
||||
min_ansible_version: 2.2
|
||||
|
||||
# If this a Container Enabled role, provide the minimum Ansible Container version.
|
||||
# min_ansible_container_version:
|
||||
|
||||
galaxy_tags: []
|
||||
# List tags for your role here, one per line. A tag is a keyword that describes
|
||||
# and categorizes the role. Users find roles by searching for tags. Be sure to
|
||||
# remove the '[]' above, if you add tags to this list.
|
||||
#
|
||||
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
|
||||
# Maximum 20 tags per role.
|
||||
galaxy_tags:
|
||||
- collabora
|
||||
- office
|
||||
- wopi
|
||||
- nextcloud
|
||||
- docker
|
||||
- digitalboard
|
||||
|
||||
dependencies: []
|
||||
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
|
||||
# if you add dependencies to this list.
|
||||
|
|
|
|||
|
|
@ -1,35 +1,26 @@
|
|||
#SPDX-License-Identifier: MIT-0
|
||||
galaxy_info:
|
||||
author: your name
|
||||
description: your role description
|
||||
company: your company (optional)
|
||||
author: digitalboard
|
||||
description: Deploy the draw.io diagram editor via Docker Compose behind Traefik, with optional authentik ForwardAuth
|
||||
company: Digitalboard
|
||||
license: MIT-0
|
||||
|
||||
# If the issue tracker for your role is not on github, uncomment the
|
||||
# next line and provide a value
|
||||
# issue_tracker_url: http://example.com/issue/tracker
|
||||
min_ansible_version: "2.14"
|
||||
|
||||
# Choose a valid license ID from https://spdx.org - some suggested licenses:
|
||||
# - BSD-3-Clause (default)
|
||||
# - MIT
|
||||
# - GPL-2.0-or-later
|
||||
# - GPL-3.0-only
|
||||
# - Apache-2.0
|
||||
# - CC-BY-4.0
|
||||
license: license (GPL-2.0-or-later, MIT, etc)
|
||||
platforms:
|
||||
- name: Debian
|
||||
versions:
|
||||
- bookworm
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- jammy
|
||||
- noble
|
||||
|
||||
min_ansible_version: 2.2
|
||||
|
||||
# If this a Container Enabled role, provide the minimum Ansible Container version.
|
||||
# min_ansible_container_version:
|
||||
|
||||
galaxy_tags: []
|
||||
# List tags for your role here, one per line. A tag is a keyword that describes
|
||||
# and categorizes the role. Users find roles by searching for tags. Be sure to
|
||||
# remove the '[]' above, if you add tags to this list.
|
||||
#
|
||||
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
|
||||
# Maximum 20 tags per role.
|
||||
galaxy_tags:
|
||||
- drawio
|
||||
- diagrams
|
||||
- docker
|
||||
- traefik
|
||||
- digitalboard
|
||||
|
||||
dependencies: []
|
||||
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
|
||||
# if you add dependencies to this list.
|
||||
|
|
|
|||
|
|
@ -20,8 +20,10 @@ common overrides:
|
|||
|
||||
### Service
|
||||
|
||||
- `garage_s3_domains`: FQDNs the S3 router accepts. First entry is the
|
||||
canonical hostname and is used as `root_domain` in `garage.toml`.
|
||||
- `garage_s3_domains`: FQDNs the S3 router accepts. The first entry is the
|
||||
canonical hostname; `garage.toml` derives the virtual-hosted-style S3
|
||||
`root_domain` from it as `.s3.<first-entry>` (so buckets resolve under
|
||||
`<bucket>.s3.<first-entry>`).
|
||||
- `garage_web_domain`, `garage_webui_domain`: separate hostnames for
|
||||
the S3-website endpoint and the console.
|
||||
- `garage_image`, `garage_replication_factor`, `garage_db_engine`,
|
||||
|
|
|
|||
|
|
@ -14,8 +14,9 @@ garage_docker_volume_dir: "{{ docker_volume_base_dir }}/{{ garage_service_name }
|
|||
# Garage service configuration
|
||||
garage_image: "dxflrs/garage:v2.1.0"
|
||||
# FQDNs the garage S3 router accepts. The first entry is the canonical
|
||||
# domain and is also used as the virtual-hosted-style root_domain in
|
||||
# garage.toml; further entries cover internal *.int.* names.
|
||||
# domain; garage.toml derives the virtual-hosted-style S3 root_domain
|
||||
# from it as ".s3.<first-entry>"; further entries cover internal
|
||||
# *.int.* names.
|
||||
garage_s3_domains:
|
||||
- "storage.local.test"
|
||||
garage_web_domain: "web.storage.local.test"
|
||||
|
|
|
|||
|
|
@ -35,9 +35,9 @@ argument_specs:
|
|||
default: ['storage.local.test']
|
||||
description:
|
||||
- FQDNs the garage S3 router accepts. The first entry is the
|
||||
canonical domain and is used as the virtual-hosted-style
|
||||
C(root_domain) in C(garage.toml). Further entries cover internal
|
||||
C(*.int.*) names.
|
||||
canonical domain; C(garage.toml) derives the virtual-hosted-style
|
||||
S3 C(root_domain) from it as C(.s3.<first-entry>). Further entries
|
||||
cover internal C(*.int.*) names.
|
||||
garage_web_domain:
|
||||
type: str
|
||||
default: web.storage.local.test
|
||||
|
|
|
|||
|
|
@ -1,35 +1,27 @@
|
|||
#SPDX-License-Identifier: MIT-0
|
||||
galaxy_info:
|
||||
author: your name
|
||||
description: your role description
|
||||
company: your company (optional)
|
||||
author: digitalboard
|
||||
description: Deploy Garage S3-compatible object storage via Docker Compose, with declarative key/bucket provisioning
|
||||
company: Digitalboard
|
||||
license: MIT-0
|
||||
|
||||
# If the issue tracker for your role is not on github, uncomment the
|
||||
# next line and provide a value
|
||||
# issue_tracker_url: http://example.com/issue/tracker
|
||||
min_ansible_version: "2.14"
|
||||
|
||||
# Choose a valid license ID from https://spdx.org - some suggested licenses:
|
||||
# - BSD-3-Clause (default)
|
||||
# - MIT
|
||||
# - GPL-2.0-or-later
|
||||
# - GPL-3.0-only
|
||||
# - Apache-2.0
|
||||
# - CC-BY-4.0
|
||||
license: license (GPL-2.0-or-later, MIT, etc)
|
||||
platforms:
|
||||
- name: Debian
|
||||
versions:
|
||||
- bookworm
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- jammy
|
||||
- noble
|
||||
|
||||
min_ansible_version: 2.1
|
||||
|
||||
# If this a Container Enabled role, provide the minimum Ansible Container version.
|
||||
# min_ansible_container_version:
|
||||
|
||||
galaxy_tags: []
|
||||
# List tags for your role here, one per line. A tag is a keyword that describes
|
||||
# and categorizes the role. Users find roles by searching for tags. Be sure to
|
||||
# remove the '[]' above, if you add tags to this list.
|
||||
#
|
||||
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
|
||||
# Maximum 20 tags per role.
|
||||
galaxy_tags:
|
||||
- garage
|
||||
- s3
|
||||
- storage
|
||||
- object-storage
|
||||
- docker
|
||||
- digitalboard
|
||||
|
||||
dependencies: []
|
||||
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
|
||||
# if you add dependencies to this list.
|
||||
|
|
|
|||
|
|
@ -36,8 +36,10 @@ secrets to version control.**
|
|||
| `homarr_admin_password` | strong password | `openssl rand -base64 24` |
|
||||
| `homarr_oidc_client_secret` | from your identity provider | — |
|
||||
|
||||
The `assert` task at the top of the role will fail fast if the encryption
|
||||
key is missing or malformed.
|
||||
`homarr_oidc_client_secret` is only required when `oidc` is in
|
||||
`homarr_auth_providers`; the role asserts it then. The encryption key is
|
||||
always required — the `assert` task at the top of the role fails fast if it
|
||||
is missing or malformed.
|
||||
|
||||
## Configurable variables
|
||||
|
||||
|
|
@ -113,7 +115,7 @@ The filter is invoked once from `tasks/main.yml`:
|
|||
```yaml
|
||||
- name: Compute Homarr app layouts
|
||||
ansible.builtin.set_fact:
|
||||
homarr_layout: "{{ homarr_apps | homarr_compute_layouts }}"
|
||||
homarr_layout: "{{ homarr_apps | digitalboard.core.homarr_compute_layouts }}"
|
||||
```
|
||||
|
||||
This produces a `homarr_layout` fact with two keys, both consumed by
|
||||
|
|
@ -121,14 +123,14 @@ This produces a `homarr_layout` fact with two keys, both consumed by
|
|||
|
||||
| Key | Shape | Purpose |
|
||||
|---|---|---|
|
||||
| `apps` | list, same order as `homarr_apps` | each entry enriched with `desktop`, `tablet`, `mobile` sub-dicts of `{x, y, w, h}` |
|
||||
| `apps` | list, same order as `homarr_apps` | each entry gains `desktop`/`tablet`/`mobile` dicts of `{x, y, w, h}` |
|
||||
| `section_height` | dict with `desktop`, `tablet`, `mobile` | minimum height of the parent section so all tiles fit |
|
||||
|
||||
The filter signature accepts custom column counts if Homarr ever
|
||||
changes the breakpoint widths:
|
||||
|
||||
```jinja
|
||||
{{ homarr_apps | homarr_compute_layouts(desktop_cols=12, tablet_cols=8, mobile_cols=4) }}
|
||||
{{ homarr_apps | digitalboard.core.homarr_compute_layouts(desktop_cols=12, tablet_cols=8, mobile_cols=4) }}
|
||||
```
|
||||
|
||||
To debug a layout without running the full deploy, run the play with
|
||||
|
|
@ -241,4 +243,8 @@ and lowercase are accepted.
|
|||
|
||||
**App tiles overlap.** Check `homarr_apps` for duplicate `id` values.
|
||||
The role validates this, but if you bypass the check, the seed will
|
||||
still run and Homarr will display only one of the duplicates.
|
||||
still run and Homarr will display only one of the duplicates.
|
||||
|
||||
## License
|
||||
|
||||
MIT-0
|
||||
|
|
|
|||
|
|
@ -1,35 +1,27 @@
|
|||
#SPDX-License-Identifier: MIT-0
|
||||
galaxy_info:
|
||||
author: your name
|
||||
description: your role description
|
||||
company: your company (optional)
|
||||
author: digitalboard
|
||||
description: Deploy the Homarr dashboard via Docker Compose behind Traefik, with seeded admin user and OIDC group
|
||||
company: Digitalboard
|
||||
license: MIT-0
|
||||
|
||||
# If the issue tracker for your role is not on github, uncomment the
|
||||
# next line and provide a value
|
||||
# issue_tracker_url: http://example.com/issue/tracker
|
||||
min_ansible_version: "2.14"
|
||||
|
||||
# Choose a valid license ID from https://spdx.org - some suggested licenses:
|
||||
# - BSD-3-Clause (default)
|
||||
# - MIT
|
||||
# - GPL-2.0-or-later
|
||||
# - GPL-3.0-only
|
||||
# - Apache-2.0
|
||||
# - CC-BY-4.0
|
||||
license: license (GPL-2.0-or-later, MIT, etc)
|
||||
platforms:
|
||||
- name: Debian
|
||||
versions:
|
||||
- bookworm
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- jammy
|
||||
- noble
|
||||
|
||||
min_ansible_version: 2.2
|
||||
|
||||
# If this a Container Enabled role, provide the minimum Ansible Container version.
|
||||
# min_ansible_container_version:
|
||||
|
||||
galaxy_tags: []
|
||||
# List tags for your role here, one per line. A tag is a keyword that describes
|
||||
# and categorizes the role. Users find roles by searching for tags. Be sure to
|
||||
# remove the '[]' above, if you add tags to this list.
|
||||
#
|
||||
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
|
||||
# Maximum 20 tags per role.
|
||||
galaxy_tags:
|
||||
- homarr
|
||||
- dashboard
|
||||
- oidc
|
||||
- docker
|
||||
- traefik
|
||||
- digitalboard
|
||||
|
||||
dependencies: []
|
||||
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
|
||||
# if you add dependencies to this list.
|
||||
|
|
@ -1,38 +1,30 @@
|
|||
Role Name
|
||||
=========
|
||||
# httpbin
|
||||
|
||||
A brief description of the role goes here.
|
||||
Deploys [httpbin](https://httpbin.org/) (`kennethreitz/httpbin`) via
|
||||
Docker Compose behind Traefik. Useful as a throwaway endpoint to verify
|
||||
that the Traefik ingress path, TLS and routing work end to end.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
## Role variables
|
||||
|
||||
Any pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required.
|
||||
| Variable | Default | Description |
|
||||
| --- | --- | --- |
|
||||
| `httpbin_domain` | `httpbin.local.test` | FQDN the Traefik router matches. |
|
||||
| `httpbin_image` | `kennethreitz/httpbin` | Container image. |
|
||||
| `httpbin_port` | `80` | Container port Traefik forwards to. |
|
||||
| `httpbin_traefik_network` | `proxy` | Docker network shared with Traefik. |
|
||||
| `httpbin_use_ssl` | `true` | Route via the `websecure` entrypoint with `tls=true` (otherwise `web`). |
|
||||
|
||||
Role Variables
|
||||
--------------
|
||||
## Example
|
||||
|
||||
A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well.
|
||||
```yaml
|
||||
- hosts: services
|
||||
become: true
|
||||
roles:
|
||||
- role: digitalboard.core.httpbin
|
||||
vars:
|
||||
httpbin_domain: "httpbin.example.com"
|
||||
```
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
## License
|
||||
|
||||
A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles.
|
||||
|
||||
Example Playbook
|
||||
----------------
|
||||
|
||||
Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too:
|
||||
|
||||
- hosts: servers
|
||||
roles:
|
||||
- { role: username.rolename, x: 42 }
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
BSD
|
||||
|
||||
Author Information
|
||||
------------------
|
||||
|
||||
An optional section for the role authors to include contact information, or a website (HTML is not allowed).
|
||||
MIT-0
|
||||
|
|
|
|||
|
|
@ -1,35 +1,27 @@
|
|||
#SPDX-License-Identifier: MIT-0
|
||||
galaxy_info:
|
||||
author: your name
|
||||
description: your role description
|
||||
company: your company (optional)
|
||||
author: digitalboard
|
||||
description: Deploy httpbin HTTP request/response testing service via Docker Compose behind Traefik
|
||||
company: Digitalboard
|
||||
license: MIT-0
|
||||
|
||||
# If the issue tracker for your role is not on github, uncomment the
|
||||
# next line and provide a value
|
||||
# issue_tracker_url: http://example.com/issue/tracker
|
||||
min_ansible_version: "2.14"
|
||||
|
||||
# Choose a valid license ID from https://spdx.org - some suggested licenses:
|
||||
# - BSD-3-Clause (default)
|
||||
# - MIT
|
||||
# - GPL-2.0-or-later
|
||||
# - GPL-3.0-only
|
||||
# - Apache-2.0
|
||||
# - CC-BY-4.0
|
||||
license: license (GPL-2.0-or-later, MIT, etc)
|
||||
platforms:
|
||||
- name: Debian
|
||||
versions:
|
||||
- bookworm
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- jammy
|
||||
- noble
|
||||
|
||||
min_ansible_version: 2.1
|
||||
|
||||
# If this a Container Enabled role, provide the minimum Ansible Container version.
|
||||
# min_ansible_container_version:
|
||||
|
||||
galaxy_tags: []
|
||||
# List tags for your role here, one per line. A tag is a keyword that describes
|
||||
# and categorizes the role. Users find roles by searching for tags. Be sure to
|
||||
# remove the '[]' above, if you add tags to this list.
|
||||
#
|
||||
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
|
||||
# Maximum 20 tags per role.
|
||||
galaxy_tags:
|
||||
- httpbin
|
||||
- testing
|
||||
- debug
|
||||
- docker
|
||||
- traefik
|
||||
- digitalboard
|
||||
|
||||
dependencies: []
|
||||
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
|
||||
# if you add dependencies to this list.
|
||||
|
|
|
|||
|
|
@ -1,65 +1,119 @@
|
|||
Keycloak
|
||||
=========
|
||||
# Keycloak
|
||||
|
||||
Ansible role to deploy Keycloak with PostgreSQL database using Docker Compose.
|
||||
Ansible role to deploy Keycloak with a PostgreSQL backend via Docker
|
||||
Compose, published behind Traefik. Optionally provisions realm resources
|
||||
(groups, users, OIDC clients, identity providers, LDAP user federations)
|
||||
through the `community.general` Keycloak modules.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
## Requirements
|
||||
|
||||
- Docker and Docker Compose installed on the target host
|
||||
- Ansible collection: `community.docker`
|
||||
- Traefik reverse proxy (for external access)
|
||||
- Docker and Docker Compose on the target host (e.g. via
|
||||
`digitalboard.core.base`)
|
||||
- Ansible collections: `community.docker`, and `community.general` when
|
||||
`keycloak_provisioning_enabled` is true
|
||||
- Traefik reverse proxy with the `proxy` network already created (for
|
||||
external access)
|
||||
|
||||
Role Variables
|
||||
--------------
|
||||
## Role variables
|
||||
|
||||
Key variables defined in `defaults/main.yml`:
|
||||
Key variables from `defaults/main.yml`:
|
||||
|
||||
**Base Configuration:**
|
||||
- `docker_compose_base_dir`: Base directory for Docker Compose files (default: `/etc/docker/compose`)
|
||||
- `docker_volume_base_dir`: Base directory for Docker volumes (default: `/srv/data`)
|
||||
### Base configuration
|
||||
|
||||
**Keycloak Configuration:**
|
||||
- `keycloak_service_name`: Service name (default: `keycloak`)
|
||||
- `keycloak_domain`: Domain name for Keycloak (default: `auth.digitalboard.ch`)
|
||||
- `keycloak_image`: Keycloak Docker image (default: `quay.io/keycloak/keycloak:24.0.1`)
|
||||
- `keycloak_port`: Internal Keycloak port (default: `8080`)
|
||||
- `keycloak_admin_user`: Admin username (default: `admin`)
|
||||
- `keycloak_admin_password`: Admin password (default: `changeme`)
|
||||
- `keycloak_log_level`: Log level (default: `INFO`)
|
||||
- `keycloak_proxy_mode`: Proxy mode (default: `edge`)
|
||||
| Variable | Default | Description |
|
||||
| --- | --- | --- |
|
||||
| `docker_compose_base_dir` | `/etc/docker/compose` | Base dir for Compose projects. |
|
||||
| `docker_volume_base_dir` | `/srv/data` | Base dir for persistent volumes. |
|
||||
| `keycloak_service_name` | `keycloak` | Compose/service name; builds the per-service paths. |
|
||||
|
||||
**PostgreSQL Configuration:**
|
||||
- `keycloak_postgres_image`: PostgreSQL Docker image (default: `postgres:15`)
|
||||
- `keycloak_postgres_db`: Database name (default: `keycloak`)
|
||||
- `keycloak_postgres_user`: Database user (default: `keycloak`)
|
||||
- `keycloak_postgres_password`: Database password (default: `changeme`)
|
||||
### Keycloak
|
||||
|
||||
**Traefik Configuration:**
|
||||
- `keycloak_traefik_network`: Traefik network name (default: `proxy`)
|
||||
- `keycloak_backend_network`: Backend network name (default: `backend`)
|
||||
- `keycloak_use_ssl`: Enable SSL (default: `true`)
|
||||
- `keycloak_cert_resolver`: Certificate resolver name (default: `dns`)
|
||||
| Variable | Default | Description |
|
||||
| --- | --- | --- |
|
||||
| `keycloak_domain` | `keycloak.local.test` | Host rule and `KC_HOSTNAME`. |
|
||||
| `keycloak_image` | `quay.io/keycloak/keycloak:24.0.1` | Keycloak image. |
|
||||
| `keycloak_port` | `8080` | Internal HTTP port advertised to Traefik. |
|
||||
| `keycloak_admin_user` | `admin` | Bootstrap admin user. |
|
||||
| `keycloak_admin_password` | `changeme` | Admin password — **override this**. |
|
||||
| `keycloak_log_level` | `INFO` | `KC_LOG_LEVEL`. |
|
||||
| `keycloak_proxy_mode` | `edge` | `KC_PROXY` mode. |
|
||||
| `keycloak_gzip_enabled` | `false` | Toggle Keycloak GZIP response encoding. |
|
||||
| `keycloak_truststore_certificates` | `[]` | Host PEM paths mounted into the truststore (`KC_TRUSTSTORE_PATHS`). |
|
||||
| `keycloak_extra_hosts` | `[]` | Extra `host:ip` entries for the container. |
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
### PostgreSQL
|
||||
|
||||
This role requires the Traefik reverse proxy to be configured and the `proxy` network to be created.
|
||||
| Variable | Default | Description |
|
||||
| --- | --- | --- |
|
||||
| `keycloak_postgres_image` | `postgres:15` | PostgreSQL image. |
|
||||
| `keycloak_postgres_db` | `keycloak` | Database name. |
|
||||
| `keycloak_postgres_user` | `keycloak` | Database user. |
|
||||
| `keycloak_postgres_password` | `changeme` | Database password — **override this**. |
|
||||
|
||||
Example Playbook
|
||||
----------------
|
||||
### Traefik
|
||||
|
||||
| Variable | Default | Description |
|
||||
| --- | --- | --- |
|
||||
| `keycloak_traefik_network` | `proxy` | External Traefik network. |
|
||||
| `keycloak_backend_network` | `backend` | Internal network to PostgreSQL. |
|
||||
| `keycloak_use_ssl` | `true` | Route on `websecure` with `tls=true` instead of `web`. |
|
||||
|
||||
TLS is requested from Traefik via `tls=true`; the role does not set a
|
||||
certificate resolver, so Traefik issues/serves the certificate according
|
||||
to its own configuration.
|
||||
|
||||
### Provisioning (optional)
|
||||
|
||||
Provisioning runs only when `keycloak_provisioning_enabled` is true. The
|
||||
tasks wait for the `/health/ready` endpoint and then call the
|
||||
`community.general.keycloak_*` modules, delegated to `localhost` against
|
||||
`keycloak_auth_url` (derived from `keycloak_use_ssl` + `keycloak_domain`).
|
||||
|
||||
| Variable | Default | Description |
|
||||
| --- | --- | --- |
|
||||
| `keycloak_provisioning_enabled` | `false` | Enable realm provisioning. |
|
||||
| `keycloak_realm` | `default` | Target realm; created unless `master`. |
|
||||
| `keycloak_realm_display_name` | `Default Realm` | Realm display name. |
|
||||
| `keycloak_auth_url` | derived | API base URL for provisioning. |
|
||||
| `keycloak_groups` | `[]` | Groups to create. |
|
||||
| `keycloak_local_users` | `[]` | Local users to create. |
|
||||
| `keycloak_oidc_clients` | `[]` | OIDC clients to create. |
|
||||
| `keycloak_identity_providers` | `[]` | Identity providers (e.g. Entra ID). |
|
||||
| `keycloak_user_federations` | `[]` | LDAP user federations. |
|
||||
| `keycloak_removed_users` | `[]` | Usernames to delete. |
|
||||
| `keycloak_removed_groups` | `[]` | Group names to delete. |
|
||||
| `keycloak_removed_clients` | `[]` | Client IDs to delete. |
|
||||
| `keycloak_removed_identity_providers` | `[]` | IdP aliases to delete. |
|
||||
| `keycloak_removed_user_federations` | `[]` | Federation names to delete. |
|
||||
|
||||
See `defaults/main.yml` for the full entry shape of each list.
|
||||
|
||||
## Dependencies
|
||||
|
||||
This role requires the Traefik reverse proxy to be configured and the
|
||||
`proxy` network to be created beforehand (it is referenced as an external
|
||||
network in the Compose file). The `backend` network is created by the
|
||||
Compose project itself.
|
||||
|
||||
## Example playbook
|
||||
|
||||
```yaml
|
||||
- hosts: backend_servers
|
||||
roles:
|
||||
- role: keycloak
|
||||
- role: digitalboard.core.keycloak
|
||||
vars:
|
||||
keycloak_domain: "auth.example.com"
|
||||
keycloak_admin_password: "secure_password"
|
||||
keycloak_postgres_password: "secure_db_password"
|
||||
keycloak_admin_password: "{{ vault_keycloak_admin_password }}"
|
||||
keycloak_postgres_password: "{{ vault_keycloak_pg_password }}"
|
||||
keycloak_provisioning_enabled: true
|
||||
keycloak_oidc_clients:
|
||||
- client_id: nextcloud
|
||||
name: "Nextcloud"
|
||||
client_secret: "{{ vault_nextcloud_client_secret }}"
|
||||
redirect_uris:
|
||||
- "https://nextcloud.example.com/apps/user_oidc/code"
|
||||
```
|
||||
|
||||
License
|
||||
-------
|
||||
## License
|
||||
|
||||
MIT-0
|
||||
|
|
|
|||
|
|
@ -1,35 +1,27 @@
|
|||
#SPDX-License-Identifier: MIT-0
|
||||
galaxy_info:
|
||||
author: your name
|
||||
description: your role description
|
||||
company: your company (optional)
|
||||
author: digitalboard
|
||||
description: Deploy Keycloak with a PostgreSQL backend via Docker Compose behind Traefik
|
||||
company: Digitalboard
|
||||
license: MIT-0
|
||||
|
||||
# If the issue tracker for your role is not on github, uncomment the
|
||||
# next line and provide a value
|
||||
# issue_tracker_url: http://example.com/issue/tracker
|
||||
min_ansible_version: "2.14"
|
||||
|
||||
# Choose a valid license ID from https://spdx.org - some suggested licenses:
|
||||
# - BSD-3-Clause (default)
|
||||
# - MIT
|
||||
# - GPL-2.0-or-later
|
||||
# - GPL-3.0-only
|
||||
# - Apache-2.0
|
||||
# - CC-BY-4.0
|
||||
license: license (GPL-2.0-or-later, MIT, etc)
|
||||
platforms:
|
||||
- name: Debian
|
||||
versions:
|
||||
- bookworm
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- jammy
|
||||
- noble
|
||||
|
||||
min_ansible_version: 2.1
|
||||
|
||||
# If this a Container Enabled role, provide the minimum Ansible Container version.
|
||||
# min_ansible_container_version:
|
||||
|
||||
galaxy_tags: []
|
||||
# List tags for your role here, one per line. A tag is a keyword that describes
|
||||
# and categorizes the role. Users find roles by searching for tags. Be sure to
|
||||
# remove the '[]' above, if you add tags to this list.
|
||||
#
|
||||
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
|
||||
# Maximum 20 tags per role.
|
||||
galaxy_tags:
|
||||
- keycloak
|
||||
- oidc
|
||||
- sso
|
||||
- docker
|
||||
- traefik
|
||||
- digitalboard
|
||||
|
||||
dependencies: []
|
||||
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
|
||||
# if you add dependencies to this list.
|
||||
|
|
|
|||
|
|
@ -15,9 +15,10 @@ backends.
|
|||
the stored value differs, so re-runs don't churn
|
||||
- Sets up notify_push (when enabled)
|
||||
- Applies an in-container PHP source workaround for the upstream
|
||||
`UserConfig::getValueBool` TypeError on Nextcloud 33.0.3 (idempotent
|
||||
via grep guard; remove the patch task once the deployed image
|
||||
ships the upstream fix)
|
||||
`UserConfig::getValueBool` TypeError (nextcloud/server#59629, fixed in
|
||||
master via PR #59646 with no stable33 backport before 33.0.4).
|
||||
Idempotent via grep guard; remove the patch task once
|
||||
`nextcloud_image` is >= 33.0.4.
|
||||
|
||||
## Requirements
|
||||
|
||||
|
|
|
|||
28
roles/nextcloud/meta/main.yml
Normal file
28
roles/nextcloud/meta/main.yml
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
#SPDX-License-Identifier: MIT-0
|
||||
galaxy_info:
|
||||
author: digitalboard
|
||||
description: Deploy Nextcloud (fpm) + Redis + Postgres via Docker Compose behind Traefik
|
||||
company: Digitalboard
|
||||
license: MIT-0
|
||||
|
||||
min_ansible_version: "2.14"
|
||||
|
||||
platforms:
|
||||
- name: Debian
|
||||
versions:
|
||||
- bookworm
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- jammy
|
||||
- noble
|
||||
|
||||
galaxy_tags:
|
||||
- nextcloud
|
||||
- files
|
||||
- collabora
|
||||
- oidc
|
||||
- docker
|
||||
- traefik
|
||||
- digitalboard
|
||||
|
||||
dependencies: []
|
||||
|
|
@ -1,38 +1,43 @@
|
|||
Role Name
|
||||
=========
|
||||
# opencloud
|
||||
|
||||
A brief description of the role goes here.
|
||||
Deploys [OpenCloud](https://opencloud.eu/) (`opencloudeu/opencloud`) as a
|
||||
self-contained file platform via Docker Compose behind Traefik. Supports
|
||||
the built-in IdP or external OIDC, optional S3 storage, external LDAP,
|
||||
Collabora and draw.io integration, and OIDC-claim-based role assignment.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
## Role variables
|
||||
|
||||
Any pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required.
|
||||
A selection of the most relevant variables — see
|
||||
[defaults/main.yml](defaults/main.yml) for the full set.
|
||||
|
||||
Role Variables
|
||||
--------------
|
||||
| Variable | Default | Description |
|
||||
| --- | --- | --- |
|
||||
| `opencloud_domain` | `opencloud.local.test` | FQDN the Traefik router matches. |
|
||||
| `opencloud_image` | `opencloudeu/opencloud:latest` | Container image. |
|
||||
| `opencloud_port` | `9200` | Container port Traefik forwards to. |
|
||||
| `opencloud_admin_password` | `admin` | Initial admin password — **override this**. |
|
||||
| `opencloud_traefik_network` | `proxy` | Docker network shared with Traefik. |
|
||||
| `opencloud_use_ssl` | `true` | Enable the TLS resolver on the router. |
|
||||
| `opencloud_oidc_issuer` | `""` | External OIDC issuer; empty uses the built-in IdP. |
|
||||
| `opencloud_use_s3_storage` | `false` | Use S3 storage instead of local disk. |
|
||||
| `opencloud_ldap_uri` | `""` | External LDAP URI; empty uses the built-in directory. |
|
||||
| `opencloud_collabora_domain` | `""` | Collabora server domain; set with `opencloud_wopi_domain` to enable editing. |
|
||||
| `opencloud_wopi_domain` | `""` | WOPI server FQDN; required alongside `opencloud_collabora_domain`. |
|
||||
| `opencloud_drawio_url` | `""` | draw.io URL; set to enable diagram editing. |
|
||||
| `opencloud_role_assignment_driver` | `default` | Set to `oidc` to map OIDC claims to roles. |
|
||||
|
||||
A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well.
|
||||
## Example
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
```yaml
|
||||
- hosts: services
|
||||
become: true
|
||||
roles:
|
||||
- role: digitalboard.core.opencloud
|
||||
vars:
|
||||
opencloud_domain: "opencloud.example.com"
|
||||
opencloud_admin_password: "{{ vault_opencloud_admin_password }}"
|
||||
```
|
||||
|
||||
A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles.
|
||||
## License
|
||||
|
||||
Example Playbook
|
||||
----------------
|
||||
|
||||
Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too:
|
||||
|
||||
- hosts: servers
|
||||
roles:
|
||||
- { role: username.rolename, x: 42 }
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
BSD
|
||||
|
||||
Author Information
|
||||
------------------
|
||||
|
||||
An optional section for the role authors to include contact information, or a website (HTML is not allowed).
|
||||
MIT-0
|
||||
|
|
|
|||
|
|
@ -1,35 +1,27 @@
|
|||
#SPDX-License-Identifier: MIT-0
|
||||
galaxy_info:
|
||||
author: your name
|
||||
description: your role description
|
||||
company: your company (optional)
|
||||
author: digitalboard
|
||||
description: Deploy OpenCloud file platform via Docker Compose behind Traefik
|
||||
company: Digitalboard
|
||||
license: MIT-0
|
||||
|
||||
# If the issue tracker for your role is not on github, uncomment the
|
||||
# next line and provide a value
|
||||
# issue_tracker_url: http://example.com/issue/tracker
|
||||
min_ansible_version: "2.14"
|
||||
|
||||
# Choose a valid license ID from https://spdx.org - some suggested licenses:
|
||||
# - BSD-3-Clause (default)
|
||||
# - MIT
|
||||
# - GPL-2.0-or-later
|
||||
# - GPL-3.0-only
|
||||
# - Apache-2.0
|
||||
# - CC-BY-4.0
|
||||
license: license (GPL-2.0-or-later, MIT, etc)
|
||||
platforms:
|
||||
- name: Debian
|
||||
versions:
|
||||
- bookworm
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- jammy
|
||||
- noble
|
||||
|
||||
min_ansible_version: 2.2
|
||||
|
||||
# If this a Container Enabled role, provide the minimum Ansible Container version.
|
||||
# min_ansible_container_version:
|
||||
|
||||
galaxy_tags: []
|
||||
# List tags for your role here, one per line. A tag is a keyword that describes
|
||||
# and categorizes the role. Users find roles by searching for tags. Be sure to
|
||||
# remove the '[]' above, if you add tags to this list.
|
||||
#
|
||||
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
|
||||
# Maximum 20 tags per role.
|
||||
galaxy_tags:
|
||||
- opencloud
|
||||
- files
|
||||
- storage
|
||||
- docker
|
||||
- traefik
|
||||
- digitalboard
|
||||
|
||||
dependencies: []
|
||||
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
|
||||
# if you add dependencies to this list.
|
||||
|
|
|
|||
|
|
@ -46,10 +46,14 @@ secrets to version control.**
|
|||
| Variable | Format | Generate with |
|
||||
|---|---|---|
|
||||
| `opnform_app_key` | `base64:<32 bytes base64>` | `echo "base64:$(openssl rand -base64 32)"` |
|
||||
| `opnform_jwt_secret` | 32 bytes base64 | `openssl rand -base64 32` |
|
||||
| `opnform_front_api_secret` | 32 bytes base64 | `openssl rand -base64 32` |
|
||||
| `opnform_jwt_secret` | 32-byte hex string | `openssl rand -hex 32` |
|
||||
| `opnform_front_api_secret` | 32-byte hex string | `openssl rand -hex 32` |
|
||||
| `opnform_db_password` | strong password | `openssl rand -base64 24` |
|
||||
|
||||
`opnform_app_key` MUST keep the `base64:` prefix — the validation task
|
||||
asserts it. `opnform_jwt_secret` and `opnform_front_api_secret` have no
|
||||
enforced format; any sufficiently random value works.
|
||||
|
||||
When `opnform_oidc_enabled` is `true`:
|
||||
|
||||
| Variable | Source |
|
||||
|
|
@ -209,3 +213,7 @@ opnform_db_password: "{{ lookup('community.hashi_vault.vault_kv2_get',
|
|||
'digitalboard/opnform',
|
||||
mount_point='kv').data.data.db_password }}"
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT-0
|
||||
|
|
|
|||
|
|
@ -15,10 +15,11 @@
|
|||
- opnform_front_api_secret | length > 0
|
||||
- opnform_db_password | length > 0
|
||||
fail_msg: >-
|
||||
OpnForm requires opnform_app_key (prefix 'base64:'), opnform_jwt_secret,
|
||||
OpnForm requires opnform_app_key, opnform_jwt_secret,
|
||||
opnform_front_api_secret and opnform_db_password.
|
||||
Generate with: openssl rand -base64 32
|
||||
The app_key MUST be prefixed with "base64:"
|
||||
Generate with:
|
||||
opnform_app_key='base64:'$(openssl rand -base64 32) (the 'base64:' prefix is required);
|
||||
opnform_jwt_secret and opnform_front_api_secret via openssl rand -hex 32.
|
||||
Provide via OpenBao, Ansible Vault or extra-vars.
|
||||
success_msg: Secrets validation passed
|
||||
|
||||
|
|
|
|||
|
|
@ -48,13 +48,17 @@ With S3 (Garage) backend:
|
|||
|
||||
```yaml
|
||||
send_storage_backend: s3
|
||||
send_s3_endpoint: "http://{{ hostvars['backend']['garage_s3_domain'] }}"
|
||||
send_s3_endpoint: "http://{{ hostvars['backend']['garage_s3_domains'][0] }}"
|
||||
send_s3_bucket: "send"
|
||||
send_s3_access_key: "{{ lookup('digitalboard.core.garage_credentials', 'send', host='backend')['key_id'] }}"
|
||||
send_s3_secret_key: "{{ lookup('digitalboard.core.garage_credentials', 'send', host='backend')['secret_key'] }}"
|
||||
```
|
||||
|
||||
When `send_storage_backend: s3`, the role asserts that `send_s3_endpoint`,
|
||||
`send_s3_bucket`, `send_s3_access_key` and `send_s3_secret_key` are all set,
|
||||
and fails early otherwise.
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
MIT
|
||||
MIT-0
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
galaxy_info:
|
||||
author: digitalboard
|
||||
description: Deploy a self-hosted Send (timvisee fork) instance with Redis via Docker Compose
|
||||
license: MIT
|
||||
license: MIT-0
|
||||
|
||||
min_ansible_version: "2.14"
|
||||
|
||||
|
|
|
|||
|
|
@ -54,10 +54,15 @@ common overrides:
|
|||
|
||||
## Dependencies
|
||||
|
||||
- Traefik network (`traefik_network`, default `proxy`) must be created
|
||||
by the `base` role or by hand before this role runs.
|
||||
- In `dmz` mode, the proxied backend services advertise themselves via
|
||||
the `traefik_services` host_var on each backend host.
|
||||
- Run `digitalboard.core.base` first (or otherwise install Docker and the
|
||||
`community.docker` collection); this role manages containers and networks
|
||||
through `community.docker`.
|
||||
- The Traefik network (`traefik_network`, default `proxy`) is created by
|
||||
this role (`community.docker.docker_network`, state present), so no
|
||||
pre-creation is required.
|
||||
- In `dmz` mode, backend hosts advertise the services to aggregate via the
|
||||
`traefik_dmz_exposed_services` host_var; `traefik_services` defines extra
|
||||
routes directly on the DMZ host (each entry must set `backend_host`).
|
||||
|
||||
## Example playbook
|
||||
|
||||
|
|
|
|||
|
|
@ -109,10 +109,11 @@ argument_specs:
|
|||
type: bool
|
||||
default: false
|
||||
description:
|
||||
- Disable lego's propagation check against the zone's authoritative
|
||||
nameservers (sets C(LEGO_DISABLE_CNAME_SUPPORT=) plus the
|
||||
authoritative-NS-check skip). Use when the SOA-listed NS hostname
|
||||
resolves to an address the proxy host cannot reach.
|
||||
- "Sets C(propagation.disableANSChecks) to true on the ACME resolver
|
||||
in the static config, disabling lego's propagation check against
|
||||
the zone's authoritative nameservers. Use when the SOA-listed NS
|
||||
hostname resolves to an address the proxy host cannot reach; lego
|
||||
still polls via the configured C(resolvers) list."
|
||||
|
||||
traefik_selfsigned_cert_dir:
|
||||
type: path
|
||||
|
|
|
|||
|
|
@ -1,33 +1,26 @@
|
|||
#SPDX-License-Identifier: MIT-0
|
||||
galaxy_info:
|
||||
author: your name
|
||||
description: your role description
|
||||
company: your company (optional)
|
||||
author: digitalboard
|
||||
description: Deploy Traefik v3 as a DMZ or backend reverse proxy via Docker Compose
|
||||
company: Digitalboard
|
||||
license: MIT-0
|
||||
|
||||
# If the issue tracker for your role is not on github, uncomment the
|
||||
# next line and provide a value
|
||||
# issue_tracker_url: http://example.com/issue/tracker
|
||||
min_ansible_version: "2.14"
|
||||
|
||||
# Choose a valid license ID from https://spdx.org - some suggested licenses:
|
||||
# - BSD-3-Clause (default)
|
||||
# - MIT
|
||||
# - GPL-2.0-or-later
|
||||
# - GPL-3.0-only
|
||||
# - Apache-2.0
|
||||
# - CC-BY-4.0
|
||||
license: license (GPL-2.0-or-later, MIT, etc)
|
||||
platforms:
|
||||
- name: Debian
|
||||
versions:
|
||||
- bookworm
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- jammy
|
||||
- noble
|
||||
|
||||
min_ansible_version: 2.1
|
||||
|
||||
# If this a Container Enabled role, provide the minimum Ansible Container version.
|
||||
# min_ansible_container_version:
|
||||
|
||||
galaxy_tags: []
|
||||
# List tags for your role here, one per line. A tag is a keyword that describes
|
||||
# and categorizes the role. Users find roles by searching for tags. Be sure to
|
||||
# remove the '[]' above, if you add tags to this list.
|
||||
#
|
||||
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
|
||||
# Maximum 20 tags per role.
|
||||
galaxy_tags:
|
||||
- traefik
|
||||
- reverseproxy
|
||||
- ingress
|
||||
- docker
|
||||
- digitalboard
|
||||
|
||||
dependencies: []
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue