Deploy openGym (gym tracker) with custom manifests #49
Labels
No labels
Monitoring
automation
bug
duplicate
feature
forgejo
help wanted
invalid
k3s
keycloak
ldap
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
lab/homelab#49
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Self-host openGym, a self-hosted gym
and body-weight tracker (plan weeks, guided workouts, set logging, weight
charts, passkey login, PWA). AGPL-3.0.
Approach
No upstream Helm chart. Write custom raw manifests following the
speedtest-tracker pattern in
k3s-ha-cluster/opengym/:deployment.yaml,service.yaml,pvc.yaml,README.mdArchitecture
Single pod, two containers:
web: nginx serving the React frontend, proxying/apito the apicontainer (port
8080)api: Node.js backend with WebAuthn (passkeys)Prebuilt images on ghcr.io (amd64 + arm64):
ghcr.io/duartesantos8/opengym-web,ghcr.io/duartesantos8/opengym-api.Data is plain JSON files in
/data-> Longhorn PVC.Required env for passkeys
Wiring
opengym.yukselcloud.comink3s-ha-cluster/caddy/configmap.yamlDeployed and exposed. Commit
b268c8f.What shipped
git.yukselcloud.com/lab/opengym-api:v1.2.7,git.yukselcloud.com/lab/opengym-web:v1.2.7— no dependency on upstream ghcrk3s-ha-cluster/opengym/(deployment/service/pvc/README):one pod, two containers (
api:3000 +webnginx :80), media dataset as aninit container into a shared Longhorn PVC (subPaths
data,media/img,media/gif)opengym.yukselcloud.com(log + crowdsec +reverse_proxy) and ddns subdomain entry; both applied by Forgejo Actions on
push
Infrastructure fix found during deploy
New volume mounts failed on node-181 with
mke2fs ... apparently in use by the system. Root cause:multipathd.sockethad socket-reactivated multipathd,which claimed freshly attached Longhorn iSCSI devices into dm maps.
multipathd.service+multipathd.socketare now stopped, disabled andmasked on all four nodes; maps flushed.
Verified
/api/health->{"ok":true}opengym.yukselcloud.com -> 85.156.79.45https://opengym.yukselcloud.com-> 200 through CaddyPasskey login is now active at the public URL (
RP_ID/ORIGINmatch).