Files
vibe-kanban/deploy/vibe-kanban.container
rob thijssen d7c912c7f4 deploy: record the relay as actually deployed
Quadlets captured from the live units on bob, with the real immutable tags
(0.1.44-ge06652a) rather than a placeholder, plus the hanzalova vhost that
mounts the relay on /relay-api/ of the existing name.

Verified end to end: /relay-api/health returns ok through the prefix, the
relay's nested /v1 routes answer 401 rather than 404 (so the strip reaches
them and they are genuinely protected), the remote's own /v1 is unaffected,
and the served SPA bundle now carries the origin-relative /relay-api base.

The vhost is committed because it is half the design: the relay only works
on a path because nginx strips the prefix, and a future kanban.l4ir.net
needs exactly this location block and nothing else.
2026-07-21 18:10:25 +03:00

48 lines
1.9 KiB
Plaintext

# vibe-kanban remote-server — the self-hosted server half of the suite.
# Serves both the API and the built SPA (from /srv/static in the image) on :8081
# as uid 10001; published to the LAN on 27180 (agent-zero=5080, open-webui=5090,
# hermes=5100). Fronted by nginx on hanzalova.internal as https://kanban.internal.
#
# Image is built by lair/containers from OUR mirror of BloopAI/vibe-kanban, never
# from GitHub — upstream is sunsetting. AutoUpdate=registry picks up rebuilds.
#
# Startup order matters and is not merely cosmetic: this unit's sqlx migrations
# are what CREATE the `electric_sync` role and the publication that Electric then
# connects with, and it ALTERs that role's password from ELECTRIC_ROLE_PASSWORD on
# every start. So db -> this -> electric. Notify=healthy makes systemd hold the
# unit "starting" until /v1/health answers, so electric genuinely waits for the
# migrations rather than racing them.
#
# Auth: local single-account mode only (SELF_HOST_LOCAL_AUTH_*), deliberately no
# OAuth — the server refuses to start unless at least one provider is configured.
# Swapping to a real IdP later means adding a provider, not changing this file.
[Unit]
Description=vibe-kanban remote-server
After=network-online.target vibe-kanban-db.service
Wants=network-online.target
Requires=vibe-kanban-db.service
[Container]
Image=git.lair.cafe/lair/vibe-kanban-remote:0.1.44-ge06652a
ContainerName=vibe-kanban
Network=vibe-kanban.network
PublishPort=27180:8081
EnvironmentFile=/etc/vibe-kanban/env
Environment=SERVER_LISTEN_ADDR=0.0.0.0:8081
Environment=ELECTRIC_URL=http://vibe-kanban-electric:3000
Environment=SERVER_PUBLIC_BASE_URL=https://kanban.internal
Environment=RUST_LOG=info,remote=info
Notify=healthy
HealthCmd=wget --spider -q http://127.0.0.1:8081/v1/health
HealthInterval=10s
HealthTimeout=5s
HealthRetries=12
HealthStartPeriod=20s
[Service]
Restart=always
TimeoutStartSec=300
[Install]
WantedBy=multi-user.target