summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md27
-rw-r--r--docker/k8s/db.yml48
-rw-r--r--docker/k8s/lemmy.yml46
-rw-r--r--docker/k8s/pictshare.yml57
4 files changed, 177 insertions, 1 deletions
diff --git a/README.md b/README.md
index 5e7d879c..afa345c1 100644
--- a/README.md
+++ b/README.md
@@ -27,7 +27,7 @@ Front Page|Post
- Open source, [AGPL License](/LICENSE).
- Self hostable, easy to deploy.
- - Comes with [Docker](#docker), [Ansible](#ansible).
+ - Comes with [Docker](#docker), [Ansible](#ansible), [Kubernetes](#kubernetes).
- Live-updating Comment threads.
- Full vote scores `(+/-)` like old reddit.
- Moderation abilities.
@@ -112,6 +112,31 @@ nano inventory # enter your server, domain, contact email
ansible-playbook lemmy.yml --become
```
+### Kubernetes
+
+You'll need to have an existing Kubernetes cluster and [storage class](https://kubernetes.io/docs/concepts/storage/storage-classes/).
+Setting this up will vary depending on your provider.
+To try it locally, you can use [MicroK8s](https://microk8s.io/) or [Minikube](https://kubernetes.io/docs/tasks/tools/install-minikube/).
+
+Once you have a working cluster, edit the environment variables and volume sizes in `docker/k8s/*.yml`.
+You may also want to change the service types to use `LoadBalancer`s depending on where you're running your cluster (add `type: LoadBalancer` to `ports)`, or `NodePort`s.
+By default they will use `ClusterIP`s, which will allow access only within the cluster. See the [docs](https://kubernetes.io/docs/concepts/services-networking/service/) for more on networking in Kubernetes.
+
+**Important** Running a database in Kubernetes will work, but is generally not recommended.
+If you're deploying on any of the common cloud providers, you should consider using their managed database service instead (RDS, Cloud SQL, Azure Databse, etc.).
+
+Now you can deploy:
+
+```bash
+# Add `-n foo` if you want to deploy into a specific namespace `foo`;
+# otherwise your resources will be created in the `default` namespace.
+kubectl apply -f docker/k8s/db.yml
+kubectl apply -f docker/k8s/pictshare.yml
+kubectl apply -f docker/k8s/lemmy.yml
+```
+
+If you used a `LoadBalancer`, you should see it in your cloud provider's console.
+
## Develop
### Docker Development
diff --git a/docker/k8s/db.yml b/docker/k8s/db.yml
new file mode 100644
index 00000000..4b78a8c5
--- /dev/null
+++ b/docker/k8s/db.yml
@@ -0,0 +1,48 @@
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ labels:
+ lemmy.service: db
+ name: db
+spec:
+ replicas: 1
+ strategy:
+ type: Recreate
+ template:
+ metadata:
+ labels:
+ lemmy.service: db
+ spec:
+ containers:
+ - env:
+ - name: POSTGRES_DB
+ value: lemmy
+ - name: POSTGRES_PASSWORD
+ # example: very-good-password
+ value: CHANGE_ME
+ - name: POSTGRES_USER
+ value: lemmy
+ image: postgres:12-alpine
+ name: db
+ volumeMounts:
+ - mountPath: /var/lib/postgresql/data
+ name: db
+ restartPolicy: Always
+ volumes:
+ - name: db
+ persistentVolumeClaim:
+ claimName: db
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ labels:
+ lemmy.service: db
+ name: db
+spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 20Gi
diff --git a/docker/k8s/lemmy.yml b/docker/k8s/lemmy.yml
new file mode 100644
index 00000000..f05b172e
--- /dev/null
+++ b/docker/k8s/lemmy.yml
@@ -0,0 +1,46 @@
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ labels:
+ lemmy.service: lemmy
+ name: lemmy
+spec:
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ lemmy.service: lemmy
+ spec:
+ containers:
+ - env:
+ - name: DATABASE_URL
+ # example: 'postgres://lemmy:password@db:5432/lemmy'
+ value: CHANGE_ME
+ - name: HOSTNAME
+ # example: 'lemmy.example.com'
+ value: CHANGE_ME
+ - name: JWT_SECRET
+ # example: 'very-super-good-secret'
+ value: CHANGE_ME
+ - name: LEMMY_FRONT_END_DIR
+ value: /app/dist
+ image: dessalines/lemmy:v0.2.0.1
+ name: lemmy
+ ports:
+ - containerPort: 8536
+ restartPolicy: Always
+---
+apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ lemmy.service: lemmy
+ name: lemmy
+spec:
+ ports:
+ - name: "8536"
+ port: 8536
+ targetPort: 8536
+ selector:
+ lemmy.service: lemmy
diff --git a/docker/k8s/pictshare.yml b/docker/k8s/pictshare.yml
new file mode 100644
index 00000000..1209e83e
--- /dev/null
+++ b/docker/k8s/pictshare.yml
@@ -0,0 +1,57 @@
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ labels:
+ lemmy.service: pictshare
+ name: pictshare
+spec:
+ replicas: 1
+ strategy:
+ type: Recreate
+ template:
+ metadata:
+ labels:
+ lemmy.service: pictshare
+ spec:
+ containers:
+ - image: hascheksolutions/pictshare:latest
+ name: pictshare
+ ports:
+ - containerPort: 80
+ volumeMounts:
+ - mountPath: /usr/share/nginx/html/data
+ name: pictshare
+ restartPolicy: Always
+ volumes:
+ - name: pictshare
+ persistentVolumeClaim:
+ claimName: pictshare
+---
+apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ lemmy.service: pictshare
+ name: pictshare
+spec:
+ ports:
+ - name: "8537"
+ port: 8537
+ targetPort: 80
+ selector:
+ lemmy.service: pictshare
+status:
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ labels:
+ lemmy.service: pictshare
+ name: pictshare
+spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 20Gi