Running Solidtime on Kubernetes with CDK8S (Hetzner + CNPG + ESO) #1109
jensens
started this conversation in
Show and tell
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Hey folks,
We just moved our little agency off Clockify onto self-hosted Solidtime, and figured I'd give something back by dumping how we run it on k8s. Maybe it saves someone an afternoon of head-scratching.
Fat disclaimer first: this is opinionated and very specific to our cluster — k3s on Hetzner, ArgoCD, CloudNativePG, External Secrets, Crossplane. It is not a generic
helm installchart. But it's all driven by oneconfig.yaml, and honestly the interesting part isn't the chart — it's the handful of gotchas we hit. Those apply no matter how you deploy.The stack
CONTAINER_MODE(http / scheduler / worker) + a Gotenberg sidecar for PDF exportGotchas that cost me the most time (the actually useful part):
S3_*, notAWS_*. I reflexively setAWS_ACCESS_KEY_ID& co and the Clockify import blew up with a cryptic AWS-SDK "Missing required client configuration options".config/filesystems.phpreadsS3_REGION/S3_BUCKET/S3_ENDPOINT/S3_ACCESS_KEY_ID/S3_SECRET_ACCESS_KEY/S3_USE_PATH_STYLE_ENDPOINT(path-style = true for Hetzner)./login, not/or/health. There's no/healthor/up./302-redirects to the absolutehttps://APP_URL; kubelet then follows that over HTTPS against the plain-HTTP container, which fails with "server gave HTTP response to HTTPS client", so the probe never passes./loginreturns a clean 200.WORKER_COMMAND.CONTAINER_MODE=workerexecs$WORKER_COMMAND; leaving it unset gives you a crashloop with "WORKER_COMMAND is undefined". Set it tophp artisan queue:work --tries=3 --max-time=3600.AUTO_DB_MIGRATE=trueon the scheduler only (single replica) instead of a separate Job — simple and race-free.APP_KEYplus a Passport RSA keypair once and injectPASSPORT_PRIVATE_KEY/PASSPORT_PUBLIC_KEYso the pods stay stateless. Never rotate them.invite-placeholder. Just remember the CSV wants US date format and aBillablecolumn.Full sanitized CDK8S (TypeScript) chart here: https://gist.github.com/jensens/2a24ce088d46a33942f9c066c123c058
Solidtime's been lovely to self-host — thanks for building it. Only thing on the wishlist is an org logo on the PDF export (saw #831, gave it a thumbs up).
Cheers
Beta Was this translation helpful? Give feedback.
All reactions