Why?
I wanted a Git service because I didn’t like having to SSH on my NAS and
creating --bare
repos by hands.
I didn’t want to store it directly on the SD Card of a Raspberry Pi because of the high risk of data corruption, and I happen to have four Raspberry Pi set up a Kubernetes cluster.
I first thought about GitLab but it has high memory requirements. Then I stumbled upon Gogs.
Gogs
Gogs is a self-hosted Git service written in Go. The program is just one binary and only requires a database (SQLite, MySQL or Postgres) to work.
Prerequisites
- Having created 2 folders on the filesystem that you expose to your cluster: one is of the DB, the other is for Gogs (it will hold the config and the repos)
Setup
My k8 config files are on GitHub
First, you have to create a secrets.yml
file
apiVersion: v1
kind: Secret
metadata:
name: gogs-secrets
type: Opaque
data:
username: <redacted>
password: <redacted>
Put base64 encoded credentials in place of the <redacted>
. username
and password
will be used as the user and password for Postgres. To get them, run:
# In your terminal
echo -n <your-string> | base64
Then, you have to edit the PersistentVolume
according to your filesystem provider.
I use NFS. The list of filesystems that kubernetes supports can be found here. This can be edited in the files gogs-{db, repos}-pv.yml
You might also want to adjust the size of the volumes accordingly to your needs. In that case,
edit both PersistentVolume
and PersistentVolumeClaim
.
Then, run in that order:
kubectl apply -f secrets.yml
kubectl apply -f gogs-db-pv.yml
kubectl apply -f gogs-db-pvc.yml
kubectl apply -f gogs-postgres.yml
kubectl apply -f gogs-repos-pv.yml
kubectl apply -f gogs-repos-pvc.yml
kubectl apply -f gogs-app.yml
When the pod is up and running, go to http://<your-cluster-master-ip>:30009
. You should be greeted
by the init page of Gogs. Add your database credentials and other fields, and click follow the
instructions. You’re all set!