Commit Graph
4354 Commits
Author SHA1 Message Date
k.rennerandClaude Opus 4.6 2800054d6f feat: Add all services to Gatus monitoring
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline was successful
Add Audiobookshelf, Jellyfin, Wiki, Music Assistant, InfluxDB,
Proxmox Backup Server, and Proxmox VE endpoints.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 22:13:27 +02:00
k.rennerandClaude Opus 4.6 a948b446a2 fix: Validate health endpoint response bodies, fix ownCloud endpoint
ci/woodpecker/push/security-scan Pipeline failed
Check actual response content not just status codes:
- ownCloud: use OCS capabilities endpoint, check ocs.meta.status
- ONLYOFFICE: verify body is 'true'
- Grafana: check database == ok
- Immich: check res == pong

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 22:12:00 +02:00
k.rennerandClaude Opus 4.6 a241f50998 fix: Use correct Grafana URL dash.renner.uno
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline was successful
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 22:07:13 +02:00
k.rennerandClaude Opus 4.6 bf58eaecf4 fix: Remove hardcoded DNS from Gatus container
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline was successful
Docker should inherit DNS from the host, not have it hardcoded.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 22:01:15 +02:00
k.rennerandClaude Opus 4.6 75a79b7330 fix: Fix Gatus health check endpoints
ci/woodpecker/push/security-scan Pipeline failed
- Woodpecker returns 204, accept both 200 and 204
- Home Assistant is at home.renner.uno not ha.renner.uno
- Skip TLS verify for Grafana (EOL VM cert issue)
- Add Proxmox DNS to container for hostname resolution

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 22:00:35 +02:00
k.rennerandClaude Opus 4.6 ccd62b6a92 feat: Add Gatus health monitoring and status page
ci/woodpecker/push/deploy-infrastructure Pipeline was successful
ci/woodpecker/manual/deploy-infrastructure Pipeline failed
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline was successful
LXC 237 on jupiter, 512MB RAM, 1 core.
Monitors all web services, DNS, RustFS, and PostgreSQL.
Status page at https://status.renner.uno.
Supports email alerts and webhook notifications.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 21:51:24 +02:00
k.rennerandClaude Opus 4.6 165d99bf2a fix: Strip G suffix from mount point size and restore taint+apply steps
ci/woodpecker/push/deploy-infrastructure Pipeline was successful
ci/woodpecker/manual/deploy-infrastructure Pipeline failed
ci/woodpecker/push/security-scan Pipeline was successful
ci/woodpecker/manual/run-ansible Pipeline was successful
Mount point volume format needs numeric size without G suffix.
Restore separate taint and apply commands in pipeline.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 21:32:37 +02:00
k.rennerandClaude Opus 4.6 2418fd4586 fix: Use -replace flag instead of taint for container recreation
ci/woodpecker/push/deploy-infrastructure Pipeline was successful
ci/woodpecker/manual/deploy-infrastructure Pipeline failed
Taint with same VMID causes create-before-destroy which destroys
the newly created container. -replace handles this correctly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 21:28:56 +02:00
k.rennerandClaude Opus 4.6 122d9df77e chore: Re-enable ownCloud LXC for taint-based recreation
ci/woodpecker/push/deploy-infrastructure Pipeline was successful
ci/woodpecker/manual/deploy-infrastructure Pipeline failed
ci/woodpecker/push/security-scan Pipeline failed
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 21:25:54 +02:00
k.rennerandClaude Opus 4.6 d4b2174ad5 chore: Temporarily remove ownCloud LXC for recreation with mount point
ci/woodpecker/push/deploy-infrastructure Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 21:24:33 +02:00
k.rennerandClaude Opus 4.6 62235b436b feat: Move ownCloud data to dedicated 200G mount point
ci/woodpecker/push/deploy-infrastructure Pipeline failed
ci/woodpecker/push/security-scan Pipeline failed
Store user data on /mnt/data/owncloud (dedicated disk) instead of
the root filesystem. Reduces root disk to 10G.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 21:23:58 +02:00
k.rennerandClaude Opus 4.6 6665f6a7ea feat: Remove Grist and n8n services
ci/woodpecker/push/deploy-infrastructure Pipeline was successful
ci/woodpecker/manual/deploy-infrastructure Pipeline failed
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline was successful
Both replaced by ownCloud with ONLYOFFICE for spreadsheet needs
and no longer required.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 21:06:15 +02:00
k.rennerandClaude Opus 4.6 37e032bdac fix: Match official oCIS onlyoffice.yml deployment pattern
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline was successful
Collaboration container gets its own env vars (not shared .env).
WOPI_SRC points to collaboration container, not public URL.
Follows owncloud/ocis deployments/examples/ocis_full/onlyoffice.yml.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 20:59:20 +02:00
k.rennerandClaude Opus 4.6 9b8e053368 fix: Bind gateway gRPC to 0.0.0.0 and point collaboration to ocis:9142
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 20:57:36 +02:00
k.rennerandClaude Opus 4.6 b3f6ca0919 fix: Bind NATS to 0.0.0.0 on main oCIS container for cross-container access
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
NATS defaults to 127.0.0.1 which blocks the collaboration container.
Set NATS_NATS_HOST=0.0.0.0 on main container, and point collaboration
to ocis:9233 via MICRO_REGISTRY_ADDRESS.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 20:54:36 +02:00
k.rennerandClaude Opus 4.6 1d2050328d fix: Point collaboration container to oCIS NATS server
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
Separate container can't reach 127.0.0.1:9233. Configure NATS
and service registry to connect to ocis container via Docker network.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 20:51:22 +02:00
k.rennerandClaude Opus 4.6 883b57406b chore: Update oCIS to v8.0.1
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 20:47:50 +02:00
k.rennerandClaude Opus 4.6 164c6795a3 fix: Run collaboration as separate container sharing oCIS config
ci/woodpecker/push/security-scan Pipeline failed
OCIS_ADD_RUN_SERVICES doesn't work in v8.0.0. Run collaboration
as a separate container with shared config/data volumes, depending
on both oCIS and ONLYOFFICE health.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 20:46:47 +02:00
k.rennerandClaude Opus 4.6 e20d865fbb fix: Re-add OCIS_EXCLUDE_RUN_SERVICES=idp alongside ADD_RUN_SERVICES
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
EXCLUDE and ADD are not mutually exclusive (only RUN and EXCLUDE are).
Need to exclude IDP for Authentik OIDC while adding collaboration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 20:43:01 +02:00
k.rennerandClaude Opus 4.6 e7425658a2 fix: Use OCIS_ADD_RUN_SERVICES without OCIS_EXCLUDE_RUN_SERVICES
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
The two env vars are mutually exclusive. Use only ADD to include
collaboration, which keeps the default service list plus IDP.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 20:40:27 +02:00
k.rennerandClaude Opus 4.6 e09bf13112 fix: Remove OCIS_EXCLUDE_RUN_SERVICES when OCIS_RUN_SERVICES is set
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
Per docs, these are mutually exclusive. OCIS_RUN_SERVICES takes
precedence and OCIS_EXCLUDE_RUN_SERVICES has no effect when both set.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 20:37:37 +02:00
k.rennerandClaude Opus 4.6 e814f41bd9 fix: Use OCIS_RUN_SERVICES to include collaboration in service list
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
OCIS_ADD_RUN_SERVICES and background process don't work.
Explicitly list all services including collaboration via OCIS_RUN_SERVICES.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 20:34:43 +02:00
k.rennerandClaude Opus 4.6 e797ffb41e fix: Use public ONLYOFFICE URL for COLLABORATION_APP_ADDR
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
The browser needs to iframe the public URL (https://office.renner.uno),
not the internal Docker address (http://onlyoffice:80).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 20:28:19 +02:00
k.rennerandClaude Opus 4.6 5cccad9d48 fix: Move header_down directives inside reverse_proxy block
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
header_down is a reverse_proxy subdirective, not a site-level directive.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 20:23:52 +02:00
k.rennerandClaude Opus 4.6 ba562fbaaa fix: Allow ONLYOFFICE framing in oCIS CSP and Caddy
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
oCIS needs to iframe ONLYOFFICE. ONLYOFFICE's own CSP/X-Frame-Options
headers need to be stripped by Caddy to allow cross-origin framing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 20:20:47 +02:00
k.rennerandClaude Opus 4.6 095fa3b50b fix: Delay collaboration service start and depend on ONLYOFFICE health
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline was successful
Collaboration service needs NATS (from ocis server) and ONLYOFFICE
to be ready before it starts. Add 15s delay and depends_on health.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 20:15:26 +02:00
k.rennerandClaude Opus 4.6 dccc405b10 fix: Start collaboration service alongside ocis server
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
The collaboration service doesn't start with 'ocis server' by default.
It needs to be started separately via 'ocis collaboration server'.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 20:11:41 +02:00
k.rennerandClaude Opus 4.6 21131ac6fe fix: Use internal Docker network address for ONLYOFFICE connection
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
oCIS collaboration service connects to ONLYOFFICE via the
docker-compose network (http://onlyoffice:80), not the public URL.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 20:02:49 +02:00
k.rennerandClaude Opus 4.6 86f6e624b6 feat: Add ONLYOFFICE document server to ownCloud deployment
ci/woodpecker/push/deploy-infrastructure Pipeline was successful
ci/woodpecker/manual/deploy-infrastructure Pipeline failed
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline was successful
Adds ONLYOFFICE container alongside oCIS with WOPI integration.
Includes Caddy backend at office.renner.uno and DNS CNAME.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 19:53:15 +02:00
k.rennerandClaude Opus 4.6 c467782822 docs: Add logcli as local tool for querying Loki logs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 17:53:40 +02:00
k.rennerandClaude Opus 4.6 a2c77fd5d3 docs: Add logging/observability section to CLAUDE.md
Documents Loki + Grafana Alloy log aggregation setup.
Clarifies that logs should be checked via Grafana, not SSH.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 17:52:13 +02:00
k.rennerandClaude Opus 4.6 f8e72a27ae fix: Allow GitHub images and self-framing in CSP
ci/woodpecker/push/security-scan Pipeline was successful
ci/woodpecker/manual/run-ansible Pipeline was successful
App store loads images from raw.githubusercontent.com.
Allow frame-ancestors 'self' for oCIS internal iframes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 17:43:26 +02:00
k.rennerandClaude Opus 4.6 fefdbd8dfb fix: Add GitHub to CSP for oCIS app store and reset log level
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
The app store fetches app list from raw.githubusercontent.com.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 17:40:49 +02:00
k.rennerandClaude Opus 4.6 ee27e08dc7 chore: Set oCIS log level back to warn after debugging
ci/woodpecker/push/security-scan Pipeline failed
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 17:40:01 +02:00
k.rennerandClaude Opus 4.6 4423df11bb fix: Use proxy.yaml config file for role mapping instead of env var
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
The JSON env var wasn't being parsed correctly. oCIS reads
per-service YAML configs from /etc/ocis/<service>.yaml.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 17:35:28 +02:00
k.rennerandClaude Opus 4.6 39d672f53f fix: Use inline role mapping env var instead of file
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
PROXY_ROLE_ASSIGNMENT_FILE doesn't exist. Role mappings must be
set via PROXY_ROLE_ASSIGNMENT_OIDC_ROLE_MAPPER_ROLE_MAPPING.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 17:31:35 +02:00
k.rennerandClaude Opus 4.6 6ec940ea92 fix: Switch to JWT token verification now that Authentik uses RS256
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
Authentik now has a signing key configured, enabling RS256 JWT
verification via JWKS. This allows oCIS to read claims (including
groups) directly from the access token.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 17:26:57 +02:00
k.rennerandClaude Opus 4.6 b43dffb4b7 fix: Set oCIS log level to debug for troubleshooting
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline was successful
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 17:18:21 +02:00
k.rennerandClaude Opus 4.6 796efab510 chore: Re-enable ownCloud LXC with updated SSH keys
ci/woodpecker/push/deploy-infrastructure Pipeline failed
ci/woodpecker/manual/deploy-infrastructure Pipeline failed
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline was successful
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 17:11:33 +02:00
k.rennerandClaude Opus 4.6 ad346fdaa9 chore: Temporarily remove ownCloud LXC for recreation with new SSH keys
ci/woodpecker/push/deploy-infrastructure Pipeline was successful
ci/woodpecker/manual/deploy-infrastructure Pipeline failed
ci/woodpecker/push/security-scan Pipeline failed
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 17:08:56 +02:00
k.rennerandClaude Opus 4.6 8bc8339f44 feat: Add local workstation SSH key to common_ssh_keys
ci/woodpecker/push/deploy-infrastructure Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
Enables direct SSH access from development machine for diagnostics.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 17:08:10 +02:00
k.rennerandClaude Opus 4.6 a4a37071c4 feat: Add OIDC role assignment via Authentik groups
ci/woodpecker/push/security-scan Pipeline was successful
ci/woodpecker/manual/run-ansible Pipeline was successful
Maps Authentik groups (ocis-admin, ocis-spaceadmin, ocis-user)
to oCIS roles. Requires groups scope in OIDC token.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 16:27:15 +02:00
k.rennerandClaude Opus 4.6 73db064c02 fix: Remove --force-overwrite from oCIS init
ci/woodpecker/push/security-scan Pipeline was successful
ci/woodpecker/manual/deploy-infrastructure Pipeline failed
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/cron/security-scan Pipeline was successful
Force overwrite regenerates JWT secrets on every restart,
invalidating all tokens and breaking OIDC authentication.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 21:57:43 +02:00
k.rennerandClaude Opus 4.6 25ba420204 fix: Enable OIDC auto-provisioning for ownCloud accounts
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
Users authenticated via Authentik need to be auto-provisioned
in oCIS since they don't exist in the built-in IDM.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 21:54:13 +02:00
k.rennerandClaude Opus 4.6 57664fbd59 fix: Use dashes in CSP directive names per spec
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
CSP directives use dashes (child-src) not underscores (child_src).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 21:51:16 +02:00
k.rennerandClaude Opus 4.6 de8d51cc11 fix: Add CSP config to allow Authentik OIDC connections
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline was successful
Browser blocks connect to auth.renner.uno due to default CSP
'connect-src self'. Add custom csp.yaml allowing the OIDC issuer.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 21:42:40 +02:00
k.rennerandClaude Opus 4.6 d4335e4652 fix: Force oCIS config regeneration on each start
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline was successful
Use --force-overwrite so env vars (including OIDC config) are
always applied to the generated ocis.yaml config.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 21:32:08 +02:00
k.rennerandClaude Opus 4.6 90e3909272 feat: Add owncloud.renner.uno backend to Caddy reverse proxy
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline failed
Routes owncloud.renner.uno to oCIS on port 9200.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 21:27:02 +02:00
k.rennerandClaude Opus 4.6 1c0aaa96d1 chore: Remove temporary ownCloud debug playbook
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 21:20:20 +02:00
k.rennerandClaude Opus 4.6 35cab8aa45 fix: Set ownCloud config/data dirs to UID 1000 for oCIS container user
ci/woodpecker/manual/run-ansible Pipeline was successful
ci/woodpecker/push/security-scan Pipeline was successful
oCIS runs as UID 1000 inside the container and needs write access
to /etc/ocis for init and /var/lib/ocis for data storage.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 21:16:58 +02:00