Cut the Nextcloud role back to what it actually needs
The role had grown machinery that the problem does not require. Removed: - The init-sync lock pre-create. It guarded against one file in the webroot being owned by a subuid, which is cosmetic: the file is 0644, so it is readable and removable by host-side tools either way. - The image ID read/pull pair. No other service playbook pulls an image, and the update path is two commands the readme now spells out. - redis-session.ini.j2 and its three variables. The mount is load-bearing -- the entrypoint cannot write into the image's conf.d and dies trying -- but the template is not: the entrypoint writes that file itself on every start. One touched empty file and one Volume line replace the template and the variables. - The config.php stat, the wizard note, the maintenance-mode wait, the occ status report, the getent checks, the timer report. The installed/not-installed branching existed only because the readiness gates were written for an installed instance; with a gate that fits both, none of the branching is needed. - Comments that narrated this play's earlier runs rather than the system. What is left is four tasks before the start, a start-plus-gate block whose rescue collects the journal, and four tasks for the background-job timer: 149 lines and about 130 of them code, against 313 before. The readme loses its migration-era bulk for the same reason and is 297 lines, in line with the other services'. The one gate is now Nextcloud's own status.php inside the container. It answers only once the entrypoint has finished -- including any `occ upgrade`, which runs before Apache starts, so an update in progress is waited out rather than missed -- it reports `installed` either way, so a fresh webroot and an installed instance go through the same check, and it carries `maintenance` as well, which is the one state a probe would otherwise call healthy while every page returned 503.
This commit is contained in:
1 parent
be53cec757
commit
05452127ec
8 files changed
+291
-843
No files matched your search
+13
-27
@@ -1,35 +1,21 @@
|
||||
---
|
||||
# Nextcloud as a rootless Podman Quadlet unit, behind the shared Caddy unit
|
||||
# (caddy/playbook.yml), with its database in the shared Postgres unit
|
||||
# (postgres/playbook.yml) and its cache in the shared Valkey unit
|
||||
# (valkey/playbook.yml).
|
||||
# Nextcloud as a rootless Podman Quadlet unit, behind the shared Caddy, with its
|
||||
# database in the shared Postgres and its cache in the shared Valkey. Each of
|
||||
# those is its own playbook and has to have been run first: caddy, postgres,
|
||||
# valkey, then this.
|
||||
#
|
||||
# Standalone and idempotent: the first run on a host creates the container and
|
||||
# leaves a fresh instance ready for its setup wizard, and every run after that
|
||||
# converges the unit, the environment and the image — Quadlet recreates the
|
||||
# container when any of them change. Nothing here depends on where the instance
|
||||
# came from; only `hosts` is host-specific.
|
||||
# Idempotent and standalone: the first run creates and starts the container (a
|
||||
# fresh webroot then serves the setup wizard), and later runs converge it —
|
||||
# Quadlet recreates the container when the unit or its environment changes.
|
||||
#
|
||||
# Connects as the container user and runs everything as that user: the Quadlet
|
||||
# units belong to it, so the connection's PAM session is what makes
|
||||
# `systemctl --user` work without any environment juggling.
|
||||
#
|
||||
# gather_facts is required: podman_user and the home directory come from the
|
||||
# Runs as the connection user with no become: the units belong to that user, so
|
||||
# the SSH session's own PAM session is what makes `systemctl --user` work.
|
||||
# gather_facts is required — podman_user and the home directory come from the
|
||||
# user_id / user_dir facts.
|
||||
#
|
||||
# The rootless-Podman prerequisites (installing podman, enabling lingering, the
|
||||
# low-port sysctl, creating the Quadlet directory) are deliberately NOT applied
|
||||
# here. They are the shared task file at caddy/roles/podman/tasks/main.yaml, and
|
||||
# a host that has already run caddy/playbook.yml has them:
|
||||
#
|
||||
# - name: Rootless Podman prerequisites
|
||||
# ansible.builtin.include_tasks: "{{ playbook_dir }}/../caddy/roles/podman/tasks/main.yaml"
|
||||
#
|
||||
# The three shared services it attaches to have to exist first, in this order:
|
||||
# caddy, postgres, valkey.
|
||||
#
|
||||
# The variables this play needs are duplicated at the top of vars/default.yml, so
|
||||
# it stands on its own.
|
||||
# The rootless-Podman prerequisites (podman, lingering, the low-port sysctl, the
|
||||
# Quadlet directory) are not applied here; they are the shared task file at
|
||||
# caddy/roles/podman, and a host that has run caddy/playbook.yml has them.
|
||||
#
|
||||
# Run with: ansible-playbook -u tanshu nextcloud/playbook.yml
|
||||
- name: Deploy Nextcloud as a rootless Podman Quadlet
|
||||
|
||||
Reference in new issue
Block a user