summaryrefslogtreecommitdiff
path: root/gemfeed/examples/conf/f3s/anki-sync-server
diff options
context:
space:
mode:
Diffstat (limited to 'gemfeed/examples/conf/f3s/anki-sync-server')
-rw-r--r--gemfeed/examples/conf/f3s/anki-sync-server/Justfile12
-rw-r--r--gemfeed/examples/conf/f3s/anki-sync-server/docker-image/Dockerfile39
-rw-r--r--gemfeed/examples/conf/f3s/anki-sync-server/docker-image/Justfile6
-rw-r--r--gemfeed/examples/conf/f3s/anki-sync-server/docker-image/entrypoint.sh31
-rw-r--r--gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/Chart.yaml5
-rw-r--r--gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/deployment.yaml35
-rw-r--r--gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/ingress.yaml20
-rw-r--r--gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/persistent-volume.yaml27
-rw-r--r--gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/service.yaml15
9 files changed, 190 insertions, 0 deletions
diff --git a/gemfeed/examples/conf/f3s/anki-sync-server/Justfile b/gemfeed/examples/conf/f3s/anki-sync-server/Justfile
new file mode 100644
index 00000000..73d679c7
--- /dev/null
+++ b/gemfeed/examples/conf/f3s/anki-sync-server/Justfile
@@ -0,0 +1,12 @@
+NAMESPACE := "services"
+RELEASE_NAME := "anki-sync-server"
+CHART_PATH := "./helm-chart"
+
+install:
+ helm install {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} --create-namespace
+
+upgrade:
+ helm upgrade {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}}
+
+delete:
+ helm uninstall {{RELEASE_NAME}} --namespace {{NAMESPACE}}
diff --git a/gemfeed/examples/conf/f3s/anki-sync-server/docker-image/Dockerfile b/gemfeed/examples/conf/f3s/anki-sync-server/docker-image/Dockerfile
new file mode 100644
index 00000000..81fad856
--- /dev/null
+++ b/gemfeed/examples/conf/f3s/anki-sync-server/docker-image/Dockerfile
@@ -0,0 +1,39 @@
+FROM rust:1.85.0-alpine3.20 AS builder
+
+ARG ANKI_VERSION
+
+RUN apk update && apk add --no-cache build-base protobuf && rm -rf /var/cache/apk/*
+
+RUN cargo install --git https://github.com/ankitects/anki.git \
+--tag ${ANKI_VERSION} \
+--root /anki-server \
+--locked \
+anki-sync-server
+
+FROM alpine:3.21.0
+
+# Default PUID and PGID values (can be overridden at runtime). Use these to
+# ensure the files on the volume have the permissions you need.
+ENV PUID=1000
+ENV PGID=1000
+
+COPY --from=builder /anki-server/bin/anki-sync-server /usr/local/bin/anki-sync-server
+
+RUN apk update && apk add --no-cache bash su-exec && rm -rf /var/cache/apk/*
+
+EXPOSE 8080
+
+COPY entrypoint.sh /entrypoint.sh
+RUN chmod +x /entrypoint.sh
+
+ENTRYPOINT ["/entrypoint.sh"]
+CMD ["anki-sync-server"]
+
+# This health check will work for Anki versions 24.08.x and newer.
+# For older versions, it may incorrectly report an unhealthy status, which should not be the case.
+HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
+ CMD wget -qO- http://127.0.0.1:8080/health || exit 1
+
+VOLUME /anki_data
+
+LABEL maintainer="Jean Khawand <jk@jeankhawand.com>"
diff --git a/gemfeed/examples/conf/f3s/anki-sync-server/docker-image/Justfile b/gemfeed/examples/conf/f3s/anki-sync-server/docker-image/Justfile
new file mode 100644
index 00000000..5da854f3
--- /dev/null
+++ b/gemfeed/examples/conf/f3s/anki-sync-server/docker-image/Justfile
@@ -0,0 +1,6 @@
+all:
+ docker build -t anki-sync-server:25.07.5b --build-arg ANKI_VERSION=25.07.5 .
+f3s:
+ docker build -t anki-sync-server:25.07.5b --build-arg ANKI_VERSION=25.07.5 .
+ docker tag anki-sync-server:25.07.5b r0.lan.buetow.org:30001/anki-sync-server:25.07.5b
+ docker push r0.lan.buetow.org:30001/anki-sync-server:25.07.5b
diff --git a/gemfeed/examples/conf/f3s/anki-sync-server/docker-image/entrypoint.sh b/gemfeed/examples/conf/f3s/anki-sync-server/docker-image/entrypoint.sh
new file mode 100644
index 00000000..9a72cca3
--- /dev/null
+++ b/gemfeed/examples/conf/f3s/anki-sync-server/docker-image/entrypoint.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+set -o errexit
+set -o nounset
+set -o pipefail
+
+# Default PUID and PGID if not provided
+export PUID=${PUID:-1000}
+export PGID=${PGID:-1000}
+
+# These values are fixed and cannot be overwritten from the outside for
+# convenience and safety reasons
+export SYNC_PORT=8080
+export SYNC_BASE=/anki_data
+
+# Check if group exists, create if not
+if ! getent group anki-group > /dev/null 2>&1; then
+ addgroup -g "$PGID" anki-group
+fi
+
+# Check if user exists, create if not
+if ! id -u anki > /dev/null 2>&1; then
+ adduser -D -H -u "$PUID" -G anki-group anki
+fi
+
+# Fix ownership of mounted volumes
+mkdir -p /anki_data
+#chown anki:anki-group /anki_data
+
+# Run the provided command as the `anki` user
+exec su-exec anki "$@"
+
diff --git a/gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/Chart.yaml b/gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/Chart.yaml
new file mode 100644
index 00000000..632f09ae
--- /dev/null
+++ b/gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/Chart.yaml
@@ -0,0 +1,5 @@
+apiVersion: v2
+name: anki-sync-server
+description: A Helm chart for deploying the Anki Sync Server.
+version: 0.1.0
+appVersion: "25.07.5b"
diff --git a/gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/deployment.yaml b/gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/deployment.yaml
new file mode 100644
index 00000000..181b6c97
--- /dev/null
+++ b/gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/deployment.yaml
@@ -0,0 +1,35 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: anki-sync-server
+ namespace: services
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: anki-sync-server
+ template:
+ metadata:
+ labels:
+ app: anki-sync-server
+ spec:
+ containers:
+ - name: anki-sync-server
+ image: registry.lan.buetow.org:30001/anki-sync-server:25.07.5b
+ ports:
+ - containerPort: 8080
+ env:
+ - name: SYNC_PORT
+ value: "8080"
+ - name: SYNC_USER1
+ valueFrom:
+ secretKeyRef:
+ name: anki-sync-server-secret
+ key: SYNC_USER1
+ volumeMounts:
+ - name: anki-data
+ mountPath: /anki_data
+ volumes:
+ - name: anki-data
+ persistentVolumeClaim:
+ claimName: anki-data-pvc
diff --git a/gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/ingress.yaml b/gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/ingress.yaml
new file mode 100644
index 00000000..010c5884
--- /dev/null
+++ b/gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/ingress.yaml
@@ -0,0 +1,20 @@
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+ name: anki-sync-server-ingress
+ namespace: services
+ annotations:
+ spec.ingressClassName: traefik
+ traefik.ingress.kubernetes.io/router.entrypoints: web
+spec:
+ rules:
+ - host: anki.f3s.buetow.org
+ http:
+ paths:
+ - path: /
+ pathType: Prefix
+ backend:
+ service:
+ name: anki-sync-server-service
+ port:
+ number: 8080
diff --git a/gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/persistent-volume.yaml b/gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/persistent-volume.yaml
new file mode 100644
index 00000000..da715ea2
--- /dev/null
+++ b/gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/persistent-volume.yaml
@@ -0,0 +1,27 @@
+apiVersion: v1
+kind: PersistentVolume
+metadata:
+ name: anki-data-pv
+spec:
+ capacity:
+ storage: 10Gi
+ volumeMode: Filesystem
+ accessModes:
+ - ReadWriteOnce
+ persistentVolumeReclaimPolicy: Retain
+ hostPath:
+ path: /data/nfs/k3svolumes/anki-sync-server/anki_data
+ type: Directory
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: anki-data-pvc
+ namespace: services
+spec:
+ storageClassName: ""
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 10Gi
diff --git a/gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/service.yaml b/gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/service.yaml
new file mode 100644
index 00000000..a8eb183e
--- /dev/null
+++ b/gemfeed/examples/conf/f3s/anki-sync-server/helm-chart/templates/service.yaml
@@ -0,0 +1,15 @@
+apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ app: anki-sync-server
+ name: anki-sync-server-service
+ namespace: services
+spec:
+ ports:
+ - name: web
+ port: 8080
+ protocol: TCP
+ targetPort: 8080
+ selector:
+ app: anki-sync-server