Move the stage directories to /srv/DOCKER (host consolidation)
Some checks failed
CD / Build and push images (push) Successful in 1m9s
CI / Lint, typecheck, test (push) Failing after 1m11s
CI / Auth e2e pack (push) Has been skipped
CI / Import/export fidelity gate (push) Has been skipped
CI / Build container images (push) Has been skipped
CD / Deploy to Test (push) Successful in 9s
CD / Smoke tests against Test (push) Successful in 1m13s
CD / Promote to Int (push) Successful in 11s

ONE consolidated every Docker stack under /srv/DOCKER (BASEL
convention, tracked in stwaidele/infrastructure-one); the three
Dorfteich stages follow. Deploy targets in cd.yml (test/int) and
prod-deploy.yml plus the docs now point at /srv/DOCKER/dorfteich-<stage>.
Data lives in named volumes keyed by the unchanged compose project
name, so the directory move carries no data migration. The go-live
checklist's uptime-kuma path already lives under /srv/DOCKER — the doc
just catches up.

Deliberately committed together with the host-side move: this commit
must not deploy before the directories exist at the new path.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Claude Fable 5 2026-07-14 12:43:29 +02:00
parent 14711a18c2
commit 69e7b1406b
7 changed files with 15 additions and 15 deletions

View File

@ -68,7 +68,7 @@ jobs:
- name: Pull and restart the Test stack - name: Pull and restart the Test stack
run: | run: |
ssh deploy@$DEPLOY_HOST 'cd /home/DOCKER/dorfteich-test \ ssh deploy@$DEPLOY_HOST 'cd /srv/DOCKER/dorfteich-test \
&& docker compose pull --quiet && docker compose up -d --remove-orphans \ && docker compose pull --quiet && docker compose up -d --remove-orphans \
&& docker compose ps' && docker compose ps'
@ -138,6 +138,6 @@ jobs:
- name: Pull and restart the Int stack - name: Pull and restart the Int stack
run: | run: |
ssh deploy@$DEPLOY_HOST 'cd /home/DOCKER/dorfteich-int \ ssh deploy@$DEPLOY_HOST 'cd /srv/DOCKER/dorfteich-int \
&& docker compose pull --quiet && docker compose up -d --remove-orphans \ && docker compose pull --quiet && docker compose up -d --remove-orphans \
&& docker compose ps' && docker compose ps'

View File

@ -44,7 +44,7 @@ jobs:
- name: Pin the version and restart the Prod stack - name: Pin the version and restart the Prod stack
run: | run: |
ssh deploy@$DEPLOY_HOST "cd /home/DOCKER/dorfteich-prod \ ssh deploy@$DEPLOY_HOST "cd /srv/DOCKER/dorfteich-prod \
&& sed -i 's/^TAG=.*/TAG=$VERSION/' .env \ && sed -i 's/^TAG=.*/TAG=$VERSION/' .env \
&& docker compose pull --quiet && docker compose up -d --remove-orphans \ && docker compose pull --quiet && docker compose up -d --remove-orphans \
&& docker compose ps" && docker compose ps"

View File

@ -19,7 +19,7 @@ the DNS switch.
for readiness. Re-deploys/rollbacks are new suffix tags on the for readiness. Re-deploys/rollbacks are new suffix tags on the
target release. target release.
- [x] 2026-07-12 — **Prod stack provisioned** on ONE - [x] 2026-07-12 — **Prod stack provisioned** on ONE
(`/home/DOCKER/dorfteich-prod/`, ports 81208122, secrets generated (`/srv/DOCKER/dorfteich-prod/`, ports 81208122, secrets generated
on the host, full backup profile: 30 d retention, failure mail). on the host, full backup profile: 30 d retention, failure mail).
The host decision "ONE" is the working default — recorded here; if The host decision "ONE" is the working default — recorded here; if
the owner picks different iron at go-live, the stack directory the owner picks different iron at go-live, the stack directory
@ -48,7 +48,7 @@ the DNS switch.
- [x] **Legal texts** (#82): paste the real dorfteich.online imprint and - [x] **Legal texts** (#82): paste the real dorfteich.online imprint and
privacy policy in Administration → Legal pages. privacy policy in Administration → Legal pages.
- [x] **Monitors** (#85, done 2026-07-12): a fresh Uptime-Kuma runs on - [x] **Monitors** (#85, done 2026-07-12): a fresh Uptime-Kuma runs on
ONE (`kuma.101010.cloud`, `/home/DOCKER/uptime-kuma/`, bound to ONE (`kuma.101010.cloud`, `/srv/DOCKER/uptime-kuma/`, bound to
127.0.0.1:8130 behind Caddy). All four Prod monitors from 127.0.0.1:8130 behind Caddy). All four Prod monitors from
`deploy/monitoring.md` are live and green (`prod web`, `deploy/monitoring.md` are live and green (`prod web`,
`prod api ready`, `prod api degraded` keyword, `prod collab` `prod api ready`, `prod api degraded` keyword, `prod collab`

View File

@ -11,14 +11,14 @@ owner; everything else can be done by CI or a deploy user.
| Stage | Directory | Domain | Ports (localhost) | | Stage | Directory | Domain | Ports (localhost) |
| ----- | ------------------------------ | ---------------------- | ------------------------------- | | ----- | ------------------------------ | ---------------------- | ------------------------------- |
| Test | `/home/DOCKER/dorfteich-test/` | `test.dorfteich.cloud` | web 8100, api 8101, collab 8102 | | Test | `/srv/DOCKER/dorfteich-test/` | `test.dorfteich.cloud` | web 8100, api 8101, collab 8102 |
| Int | `/home/DOCKER/dorfteich-int/` | `int.dorfteich.cloud` | web 8110, api 8111, collab 8112 | | Int | `/srv/DOCKER/dorfteich-int/` | `int.dorfteich.cloud` | web 8110, api 8111, collab 8112 |
## 1. Stage directories **[root]** ## 1. Stage directories **[root]**
```sh ```sh
for stage in test int; do for stage in test int; do
mkdir -p /home/DOCKER/dorfteich-$stage mkdir -p /srv/DOCKER/dorfteich-$stage
mkdir -p /home/RAID/DOCKER/dorfteich-$stage # bulk data, if RAID exists on this host mkdir -p /home/RAID/DOCKER/dorfteich-$stage # bulk data, if RAID exists on this host
done done
``` ```
@ -103,7 +103,7 @@ act_runner register \
## 4. Deploy user and SSH keys ## 4. Deploy user and SSH keys
The CD workflow (issue #8) deploys via SSH: The CD workflow (issue #8) deploys via SSH:
`ssh deploy@one.101010.cloud 'cd /home/DOCKER/dorfteich-test && docker compose pull && docker compose up -d'`. `ssh deploy@one.101010.cloud 'cd /srv/DOCKER/dorfteich-test && docker compose pull && docker compose up -d'`.
- **[root]** Create a `deploy` user (or reuse an existing deployment - **[root]** Create a `deploy` user (or reuse an existing deployment
user), member of the `docker` group, owning the stage directories. user), member of the `docker` group, owning the stage directories.

View File

@ -37,7 +37,7 @@ gates must be automated and objective wherever possible.
start (ADR 0006); releases with breaking migrations must say so in the start (ADR 0006); releases with breaking migrations must say so in the
release notes. release notes.
- **Deploy mechanism**: the runner executes `docker compose pull && docker - **Deploy mechanism**: the runner executes `docker compose pull && docker
compose up -d` in the stage's directory (`/home/DOCKER/dorfteich-<stage>/`) compose up -d` in the stage's directory (`/srv/DOCKER/dorfteich-<stage>/`)
over SSH (deploy key per stage). Moving Prod to a dedicated host later over SSH (deploy key per stage). Moving Prod to a dedicated host later
changes only that SSH target. changes only that SSH target.
- **Self-hosters** consume the same release images via a published - **Self-hosters** consume the same release images via a published

View File

@ -51,12 +51,12 @@ Self-hosters without a proxy can enable the optional `caddy` Compose profile
| Stage | Where | Domain | Purpose | Data | | Stage | Where | Domain | Purpose | Data |
| -------- | ----------------------------------------------------------------- | ---------------------- | --------------------------------------------------------------------------------------- | ------------------------------- | | -------- | ----------------------------------------------------------------- | ---------------------- | --------------------------------------------------------------------------------------- | ------------------------------- |
| **Dev** | contributor machine (e.g. the operator's MacBook), Docker Desktop | `localhost` | feature work; hot reload via `compose.dev.yml` overlay (source mounts, vite dev server) | fixtures/seed script | | **Dev** | contributor machine (e.g. the operator's MacBook), Docker Desktop | `localhost` | feature work; hot reload via `compose.dev.yml` overlay (source mounts, vite dev server) | fixtures/seed script |
| **Test** | ONE `one.101010.cloud`, `/home/DOCKER/dorfteich-test/` | `test.dorfteich.cloud` | auto-deploy target of `main`; e2e suite runs here | reset-able; seeded | | **Test** | ONE `one.101010.cloud`, `/srv/DOCKER/dorfteich-test/` | `test.dorfteich.cloud` | auto-deploy target of `main`; e2e suite runs here | reset-able; seeded |
| **Int** | ONE `one.101010.cloud`, `/home/DOCKER/dorfteich-int/` | `int.dorfteich.cloud` | stable preview; manual/exploratory testing; release candidates | persistent test data | | **Int** | ONE `one.101010.cloud`, `/srv/DOCKER/dorfteich-int/` | `int.dorfteich.cloud` | stable preview; manual/exploratory testing; release candidates | persistent test data |
| **Prod** | ONE `one.101010.cloud`, `/home/DOCKER/dorfteich-prod/` (M8, #89) | `dorfteich.online` | public flagship instance | real data; full backup + mirror | | **Prod** | ONE `one.101010.cloud`, `/srv/DOCKER/dorfteich-prod/` (M8, #89) | `dorfteich.online` | public flagship instance | real data; full backup + mirror |
Stage layout follows the operator's Docker host convention: Stage layout follows the operator's Docker host convention:
compose file + `.env` under `/home/DOCKER/dorfteich-<stage>/`, bulk data compose file + `.env` under `/srv/DOCKER/dorfteich-<stage>/`, bulk data
volumes under `/home/RAID/DOCKER/dorfteich-<stage>/` (bind-mounted). volumes under `/home/RAID/DOCKER/dorfteich-<stage>/` (bind-mounted).
**Prod relocation readiness** (kickoff requirement): all state lives in the **Prod relocation readiness** (kickoff requirement): all state lives in the

View File

@ -11,7 +11,7 @@ written nightly by the `backup` sidecar onto the `backups` volume, with
## Manual restore (incident / relocation) ## Manual restore (incident / relocation)
On the stage host, from the stage directory (`/home/DOCKER/dorfteich-<stage>/`): On the stage host, from the stage directory (`/srv/DOCKER/dorfteich-<stage>/`):
1. **Pick the set.** `docker compose exec backup ls /backups` — usually the 1. **Pick the set.** `docker compose exec backup ls /backups` — usually the
id in `status.json``lastSuccess.backupId`. id in `status.json``lastSuccess.backupId`.