Commit Graph
414 Commits
Author SHA1 Message Date
kevinveenbirkenbach 340e8a151c fix: stabilize public bind handling for nextcloud talk and mailu 2026-03-25 14:43:52 +01:00
kevinveenbirkenbach 35130ec524 Merge branch 'main' into feature/playwright-e2e-test 2026-03-23 20:25:21 +01:00
kevinveenbirkenbach e0a163cf15 docs: cleanup mailu administration guide and fix todo formatting 2026-03-23 18:59:59 +01:00
kevinveenbirkenbach d8999e2ef5 Merge branch 'main' into feature/playwright-e2e-test 2026-03-22 21:17:47 +01:00
kevinveenbirkenbach e8b69b8239 Refine min_storage validation warnings 2026-03-21 10:54:02 +01:00
kevinveenbirkenbach a45736d68e Merge branch 'main' into feature/playwright-e2e-test 2026-03-19 10:50:00 +01:00
kevinveenbirkenbach 91ba79a37f Fix Mailu admin readiness check in CI 2026-03-19 03:08:59 +01:00
kevinveenbirkenbach 51d89183d6 Fix Mailu deploy race conditions 2026-03-18 15:14:05 +01:00
kevinveenbirkenbach 9f169321ed Merge branch 'main' into feature/playwright-e2e-test 2026-03-18 02:18:44 +01:00
kevinveenbirkenbach 19c8701735 Run Playwright E2E without MODE_TEST gate 2026-03-18 00:16:26 +01:00
kevinveenbirkenbach edfd891eff chore: rename master references to main 2026-03-17 15:59:23 +01:00
kevinveenbirkenbach f5e554276e Add sys-openssl role and wire it into CA and Mailu 2026-02-23 12:37:45 +01:00
kevinveenbirkenbach 6efde55647 refactor(dashboard): rename web-app-desktop to web-app-dashboard and update service toggle
* replace compose.services.desktop with compose.services.dashboard across all roles
* rename role web-app-desktop to web-app-dashboard
* rename sys-front-inj-desktop to sys-front-inj-dashboard
* update resolver mapping to include web-app-dashboard when dashboard is enabled
* adjust CSP filters to reference dashboard for frame-ancestors handling
* update lookup plugins, filter plugins, templates, vars and run_once flags
* migrate all tests to dashboard naming and service key
* update role dependencies and port mappings
* remove legacy desktop role and variables

BREAKING CHANGE:
The service key compose.services.desktop has been renamed to compose.services.dashboard.
All custom configs, inventories, or overrides must be updated accordingly.

https://chatgpt.com/share/698da7ad-1978-800f-82b4-4755b17be026
2026-02-12 11:12:49 +01:00
kevinveenbirkenbach a55c99ef62 refactor(compose): replace docker lookup with container and unify compose paths
- Rename lookup plugin from `docker` to `container`
- Switch all lookups from `lookup('docker', ...)` to `lookup('container', ...)`
- Normalize compose file keys:
  - docker_compose → compose
  - docker_compose_override → compose_override
  - docker_compose_ca_override → compose_ca_override
- Centralize compose path resolution via docker_paths_utils
- Update compose_file_args to always derive paths from DIR_COMPOSITIONS
- Align all roles, templates, and vars with container/compose naming
- Update and rename unit tests accordingly

This prepares the codebase for engine-agnostic container backends
(e.g. Docker ↔ Podman) and removes legacy docker-specific assumptions.

https://chatgpt.com/share/6987a7cc-d374-800f-99ad-bb4c8f92c59e
2026-02-07 21:59:39 +01:00
kevinveenbirkenbach 64b0506947 refactor: replace raw docker usage with container wrapper across roles
Replace direct `docker` command usage, references, and documentation with
the `container` wrapper to ensure engine abstraction and future portability
(e.g. Docker → Podman).

This includes:
- Shell scripts, Ansible tasks, handlers, and Python helpers
- Documentation, comments, help texts, and meta descriptions
- Network, volume, system, and image operations
- Test expectations and comments

All runtime behavior remains unchanged while enforcing the repository-wide
rule to avoid raw Docker invocations.

https://chatgpt.com/share/698721c3-e270-800f-be7a-e4435fb54506
2026-02-07 12:57:26 +01:00
kevinveenbirkenbach b78ab29218 Renamed config entry from docker to compose
https://chatgpt.com/share/69870f54-d708-800f-9870-e9ae5a4bff44
2026-02-07 11:09:36 +01:00
kevinveenbirkenbach 53e817fa22 refactor(compose): migrate from docker-compose.yml to compose.yml everywhere
- Rename all docker-compose.yml templates to compose.yml
- Update override and CA override filenames accordingly
- Adjust compose wrapper, lookup plugins, filters and path helpers
- Update roles, tasks, handlers and scripts to use compose CLI
- Rewrite documentation and admin guides to reference compose
- Update unit and integration tests to expect compose.yml
- Keep internal variable keys for backward compatibility where needed

https://chatgpt.com/share/69870272-b168-800f-84c3-6417398e441f
2026-02-07 10:14:21 +01:00
kevinveenbirkenbach c1d50d78da refactor(container): replace BIN_CONTAINER usages with system-wide container wrapper
https://chatgpt.com/share/698660b7-4c78-800f-b25f-af5408cff034
2026-02-06 23:00:21 +01:00
kevinveenbirkenbach 46238d4c89 refactor: use BIN_CONTAINER wrapper for container exec commands
https://chatgpt.com/share/698657ee-e708-800f-ba5d-4c7c5198a5fe
2026-02-06 22:06:42 +01:00
kevinveenbirkenbach 259d885868 mail: prevent SMTP port 25 conflicts when Mailu is active
Ensure conflicting host SMTP components are disabled when Mailu
provides external SMTP. This refactors SMTP/MSMTP enable/disable
tasks, removes redundant package conflicts, and prepares for
robust port 25 handling to avoid Docker compose startup failures.

https://chatgpt.com/share/69863260-c4e4-800f-adbd-67f87c091264
2026-02-06 19:26:34 +01:00
kevinveenbirkenbach 3fa7887dc8 Added whitespaces for better readability 2026-02-06 16:21:10 +01:00
kevinveenbirkenbach 5100c2c1ce refactor(config): replace get_app_conf filter with config lookup
Replace usages of the get_app_conf filter with the config lookup plugin
across roles and templates. Adjust quoting where required to keep YAML
and Jinja syntax valid. No functional changes intended.

https://chatgpt.com/share/69860678-cef8-800f-8402-7fe6231fdc2d
2026-02-06 16:19:14 +01:00
kevinveenbirkenbach 2d344fb129 refactor(domains): switch to domain() lookup across config and templates
Replace `domains | get_domain(...)` usage with `lookup('domain', ...)` throughout
group_vars, roles, and templates. Fix load_app domain resolution to use the
current application_id.

https://chatgpt.com/share/6985ef1e-11b8-800f-b231-52523055060b
2026-02-06 14:46:29 +01:00
kevinveenbirkenbach 3bb8c0ce30 refactor(tls): rename tls_resolve lookup to tls
The TLS lookup has been renamed from `tls_resolve` to `tls` to better
reflect its responsibility as a strict TLS state resolver.

This refactor updates all usages across the codebase, including:
- lookup plugins and internal helpers
- roles, vars, tasks, and templates
- tests, stubs, and error messages
- documentation and changelog references

Behavior, lookup API, and semantics remain unchanged.

https://chatgpt.com/share/6985e635-5a94-800f-b794-937e566ee308
2026-02-06 14:01:32 +01:00
kevinveenbirkenbach 5e33e70892 refactor(database lookup usage): switch conditionals to enabled flag
Replace indirect type!='' checks with explicit database.enabled lookups
to improve semantics, readability, and alignment with strict lookup API.

https://chatgpt.com/share/6985d642-b40c-800f-9cdf-ed54fc484a92
2026-02-06 13:25:37 +01:00
kevinveenbirkenbach 8fe6b92e63 refactor(lookups): migrate nginx_paths, tls_resolve and cert_plan to strict positional want-path API
- Replace legacy want= keyword usage with mandatory positional want-path
- Align all nginx_paths, tls_resolve and cert_plan lookups to strict API
- Keep behavior unchanged while enforcing consistent lookup semantics

https://chatgpt.com/share/6985d642-b40c-800f-9cdf-ed54fc484a92
2026-02-06 13:06:09 +01:00
kevinveenbirkenbach e1e1f3eb11 chore(vars): rename PATH_* to DIR_/BIN_/FILE_ conventions
https://chatgpt.com/share/6985cf49-3c74-800f-af97-f68b1969ab01
2026-02-06 12:23:46 +01:00
kevinveenbirkenbach 7bb15d1b5e refactor(container): rename docker-container/docker services to sys-svc-container and update all references, schedules, tests, and templates
https://chatgpt.com/share/6985b09d-8ff8-800f-800c-7a694c0983e2
2026-02-06 10:12:31 +01:00
kevinveenbirkenbach 51239968fd refactor: rename docker-compose roles to sys-svc-compose and update paths
Renamed docker-compose and docker-compose-ca roles to sys-svc-compose and sys-svc-compose-ca, updated template includes, handlers, lookups, tests, and variables, and moved compose instances to /opt/compose.

https://chatgpt.com/share/6985ab2c-8344-800f-9e9a-768f562d138d
2026-02-06 09:49:42 +01:00
kevinveenbirkenbach 26a5b159e0 refactor(docker-lookup): replace want= syntax with path-based access
- Replace lookup('docker', ..., want='...') with lookup('docker', ..., 'path')
- Allow both top-level keys (directories/files) and dotted paths
- Simplify docker lookup API and reduce lazy dict propagation
- Update unit tests to reflect new lookup semantics

https://chatgpt.com/share/6984ccea-8290-800f-a6d7-ec0e94df95a0
2026-02-05 18:45:43 +01:00
kevinveenbirkenbach efc160d199 Deleted DOCKER_VARS_FILE orphans 2026-02-05 18:26:19 +01:00
kevinveenbirkenbach 39963386b7 Replaced docker_compose_command_exec by PATH_COMPOSE 2026-02-05 18:18:17 +01:00
kevinveenbirkenbach 56aea31667 refactor(docker): replace docker_compose vars with docker lookup across roles
Remove implicit docker_compose variable usage and resolve all docker paths
(files, directories, env) via lookup('docker', application_id).
This prevents scope leakage, centralizes path resolution, and makes docker
context deterministic across roles and handlers.

https://chatgpt.com/share/6984ccea-8290-800f-a6d7-ec0e94df95a0
2026-02-05 18:15:10 +01:00
kevinveenbirkenbach c4b08324a5 refactor(templates): use database lookup want= for volume/host access
Replace attribute-style access (lookup('database', app).volume/.host/etc.)
with explicit want= lookups across docker-compose and matrix templates
to align with updated database lookup plugin interface.

https://chatgpt.com/share/6983ddfd-aee4-800f-bce9-18eca2144f25
2026-02-05 01:01:55 +01:00
kevinveenbirkenbach 0ca96ce47d refactor: use database lookup in compose volumes 2026-02-05 00:41:26 +01:00
kevinveenbirkenbach d542817f02 - replace database_* usages in templates and vars
- switch to lookup('database', application_id)
- keep behavior consistent for central/shared DBs
2026-02-05 00:33:22 +01:00
kevinveenbirkenbach f6f96a11ac Refactor: use database lookup helper everywhere
https://chatgpt.com/share/6983bcf6-85bc-800f-a0fc-5684b9078469
2026-02-04 22:52:08 +01:00
kevinveenbirkenbach 8a81630391 Added newline at file and POSIX compatible 2026-02-04 19:49:56 +01:00
kevinveenbirkenbach f2bef61dc7 mailu: route OIDC host via host-gateway when running in Docker-in-Docker
- Add MAILU_OIDC_HOST derived from Keycloak domain
- Inject extra_hosts mapping to host-gateway for OIDC when DOCKER_IN_CONTAINER is enabled
- Keep DNS resolver configuration unchanged
- Normalize newline handling in OIDC defaults

https://chatgpt.com/share/697ff9c9-3428-800f-9771-54409bd98b3e
2026-02-02 02:11:26 +01:00
kevinveenbirkenbach 1c5a0d6f46 Deactivate DNS for front just in local dev environment 2026-02-01 20:39:25 +01:00
kevinveenbirkenbach 0a4fb0cac9 fix(mailu): route admin API calls via front service instead of localhost
- Replace hardcoded 127.0.0.1:8080 API endpoint with front service URL
- Ensure Mailu API access works from within admin container
- Prevent connection failures caused by invalid loopback assumptions

https://chatgpt.com/share/697f946f-17e8-800f-be03-dc6c38f2bbb3
2026-02-01 18:58:33 +01:00
kevinveenbirkenbach 0730474052 Little optimation tweaks 2026-02-01 18:26:59 +01:00
kevinveenbirkenbach d216f84ea9 Activated better debugging for Mailu API 2026-02-01 18:01:32 +01:00
kevinveenbirkenbach 0c3d5402df fix(mailu): disable stack DNS for admin to avoid OIDC resolution issues
https://chatgpt.com/share/697f4af3-c858-800f-b10d-16972a186520
2026-02-01 13:45:29 +01:00
kevinveenbirkenbach 340e3696b6 dev: disarm AppArmor via host script and Makefile wrapper
Move AppArmor handling out of docker-compose files and into a
dedicated dev-only administration script. The new `disarmapp`
Make target acts as a thin wrapper to set relevant AppArmor
profiles (php-fpm, dovecot) to complain mode on the development host,
keeping compose templates clean and prod-like.

https://chatgpt.com/share/697cfbdf-e2a8-800f-bf06-b75e8c9d926e
2026-01-30 21:48:43 +01:00
kevinveenbirkenbach 45217e255d mailu: disable AppArmor for imap (dovecot) container
Ensure the Mailu imap (dovecot) service runs with
`apparmor=unconfined` to prevent AppArmor DENIED errors
when accessing TLS certificates and runtime files.

https://chatgpt.com/share/697cfbdf-e2a8-800f-bf06-b75e8c9d926e
2026-01-30 19:43:33 +01:00
kevinveenbirkenbach 6e24c12ca1 Unarmed mailu webmail 2026-01-30 18:49:29 +01:00
kevinveenbirkenbach 31bdf92009 ci(tls): disable AppArmor for CI containers to avoid host profile denials
AppArmor is explicitly set to `unconfined` for CI-related containers to
prevent host-level AppArmor profiles (e.g. php-fpm, dovecot, nginx) from
interfering with certificate and TLS path handling during CI runs.

This change is limited to CI use cases and does not alter production
security defaults.

https://chatgpt.com/share/697ce139-ca9c-800f-a240-a920b9ce31a8
2026-01-30 17:49:51 +01:00
kevinveenbirkenbach 8b1ae03e77 fix(env): prevent dotenv_quote double-quoting in env.j2 templates
- Replace `"{{ ... | dotenv_quote }}"` with `{{ ... | dotenv_quote }}` across roles
- Update integration test to enforce pure Jinja + dotenv_quote and forbid wrapped quotes

https://chatgpt.com/share/6974e6c6-51b8-800f-80a1-a76f885cf57e
2026-01-24 16:35:27 +01:00
kevinveenbirkenbach fdb2683ddb test(env): enforce dotenv_quote + double quotes for password vars in env.j2 templates
https://chatgpt.com/share/6974cbac-023c-800f-8198-fd85df2aa7bc
2026-01-24 15:32:33 +01:00