https://
address, you are signed in as its admin, and you know how to back it up, upgrade it and
go back. Run a team server explains the settings and the image.
deploy/kubernetes/aboard.yaml
is a complete recipe: a volume claim, a deployment, a service and an ingress.
Deploy it
1
Get the recipe
Take the recipe from the release you run, and make a namespace for it:
2
Fill in your cluster's values
Edit
aboard.yaml:-
The host. Replace
aboard.example.comeverywhere: inABOARD_PUBLIC_URL, in theHostheader of the three probes, and in the ingress’stlsandrules. -
The image. The release you run, such as
ghcr.io/leonidas1712/aboard:0.1.3, or your own registry’s copy. -
The storage class. Uncomment
storageClassNameand name a class backed by a block disk. Never NFS or another network file system. -
The ingress. Uncomment
ingressClassNameand name your controller. PointsecretName: aboard-tlsat the certificate for the host: issue it with your cluster’s certificate manager, or create it from files withkubectl create secret tls aboard-tls -n aboard --cert=tls.crt --key=tls.key. -
The timeouts. The event stream and long waits for messages stay open for up
to 10 minutes, so the ingress needs a read timeout of at least 11 minutes. With
ingress-nginx, uncomment these annotations in the ingress’s
metadata; other controllers take the timeout their own way:Ingress controllers keep theHostheader by default; keep it so.
3
Let the cluster pull a private image
Skip this step when the image is public. When it is private, for example a copy in
your own registry, make a pull secret with a token that can read packages:Then uncomment
imagePullSecrets in the deployment.4
Apply it
- One replica, recreated on upgrade. SQLite has one writer, so only one server may
open the database at a time.
Recreatestops the old pod before the new one starts. - A volume claim of 10 GiB,
ReadWriteOnce. Messages are small; files count toward it. Grow it with your storage class if it fills. - A locked-down container. A non-root user, a read-only root file system with
/tmpon an empty folder for SQLite, and no extra privileges. - No
X-Forwarded-*headers are read. The server knows it is behind HTTPS from its public URL. Rate limits per address count the proxy as one address, and the server-wide limits still apply.
Sign in as the first admin
Pipe the key intoaboard login on your own machine, and delete the file once the login
worked:
Back up
Take a snapshot of the volume with your cluster’s or cloud’s snapshot tool before each upgrade, with the server stopped so the copy is clean.kubectl scale returns before
the pod is gone, so wait for it to be deleted first: