summaryrefslogtreecommitdiff
path: root/prompts/skills/f3s-workloads/references/ychat.md
diff options
context:
space:
mode:
Diffstat (limited to 'prompts/skills/f3s-workloads/references/ychat.md')
-rw-r--r--prompts/skills/f3s-workloads/references/ychat.md83
1 files changed, 83 insertions, 0 deletions
diff --git a/prompts/skills/f3s-workloads/references/ychat.md b/prompts/skills/f3s-workloads/references/ychat.md
new file mode 100644
index 0000000..98dc066
--- /dev/null
+++ b/prompts/skills/f3s-workloads/references/ychat.md
@@ -0,0 +1,83 @@
+# yChat Deployment
+
+yChat is a legacy (2007) C++ HTTP web chat server, revived to build in Docker
+with a mandatory embedded-SQLite backend. It is deployed on the f3s k3s
+cluster as a GitOps-managed service.
+
+> **Deployed.** The live LAN URL **https://ychat.f3s.lan.buetow.org/** serves
+> image tag `67babb2` (the DB-backed build), with a persistent volume
+> (`ychat-data-pvc`, hostPath-backed NFS share) mounted at `/app/data`, so
+> registered accounts survive pod restarts. The no-DB build that previously
+> ran live has been retired.
+
+This reference is the single home for f3s-specific deployment details. The
+public app repo (`ychat` on https://codeberg.org/snonux/ychat) deliberately
+keeps deployment/cluster specifics **out of scope** — everything below lives
+here instead.
+
+## Repositories and paths
+
+- App source: `~/git/ychat` (subproject `ychat/`; source on
+ https://codeberg.org/snonux/ychat)
+- f3s config source: `~/git/conf` (mirrored on the in-cluster git-server;
+ https://codeberg.org/snonux/conf)
+- Helm chart: `f3s/ychat/helm-chart`
+- ArgoCD app: `f3s/argocd-apps/services/ychat.yaml`
+- LAN URL: `https://ychat.f3s.lan.buetow.org/`
+
+## Build and push a new image
+
+Use the app git commit SHA as the immutable image tag. Build is a multi-stage
+`Dockerfile` (Rocky Linux 9 builder + slim Rocky 9 runtime) that compiles
+ychat entirely inside the container.
+
+```sh
+cd ~/git/ychat/ychat
+podman build -t ychat:dev .
+
+TAG=$(git rev-parse --short HEAD)
+podman tag ychat:$TAG r0.lan.buetow.org:30001/ychat:$TAG
+podman tag ychat:latest r0.lan.buetow.org:30001/ychat:latest
+podman push --tls-verify=false r0.lan.buetow.org:30001/ychat:$TAG
+podman push --tls-verify=false r0.lan.buetow.org:30001/ychat:latest
+```
+
+The registry is the f3s private registry on NodePort `30001` (plain
+HTTP/insecure). In Kubernetes manifests, pods pull the image as:
+
+```text
+registry.lan.buetow.org:30001/ychat:<TAG>
+```
+
+## Deploy (GitOps)
+
+Config lives in the `conf` repo (mirrored on the in-cluster git-server):
+
+- Helm chart: `f3s/ychat/helm-chart`
+- ArgoCD app: `f3s/argocd-apps/services/ychat.yaml`
+
+The Deployment pulls `registry.lan.buetow.org:30001/ychat:<TAG>` (tag matches
+`appVersion` in `Chart.yaml`). The default chat port is **2000**.
+
+## Storage notes
+
+- **Logs** (`/app/log`: `access_log`, `system_log`, `rooms/<room>`) go to an
+ `emptyDir` — ephemeral by design.
+- **SQLite database** (`/app/data/ychat.db`) holds registered accounts and
+ is backed by the `ychat-data-pvc` persistent volume (hostPath-backed NFS
+ share, mounted at `/app/data`), so accounts survive pod rescheduling.
+
+Only registered accounts persist (in SQLite). Sessions/rooms/online-state are
+in-memory, and unregistered `chat.enableguest=true` guest chatters are wiped
+on restart — only the accounts table persists.
+
+## Runtime config notes
+
+- Configuration is `ychat/etc/ychat.conf`, baked into the image at
+ `/app/etc/ychat.conf`. Any config key can be overridden at runtime with
+ `-o <key> <value>` (the image already does this for
+ `chat.session.md5hash=false` and `chat.database.dbname=data/ychat.db`).
+- The `/exec` command module is removed from the image entirely
+ (defense-in-depth against its shell-injection RCE), and operator status
+ via `chat.defaultop` requires a database-authenticated registered account —
+ an unregistered guest can never claim it. \ No newline at end of file