mirror of
https://github.com/sudoxnym/habitica-self-host.git
synced 2026-04-14 11:36:45 +00:00
Kubernetes support for dev environments (#8753)
* Run Habitica in Kubernetes * fix(docs): Address PR comments
This commit is contained in:
parent
5b7c7b77c8
commit
aa91c5dbae
6 changed files with 162 additions and 0 deletions
60
kubernetes/README.md
Normal file
60
kubernetes/README.md
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
# Habitica in Kubernetes
|
||||||
|
This is a set of sample Kubernetes configuration files to launch Habitica under AWS, both as a single-node web frontend as well as a multi-node web frontend.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
* An AWS account.
|
||||||
|
* A working Kubernetes installation.
|
||||||
|
* A basic understanding of how to use Kubernetes. https://kubernetes.io/
|
||||||
|
* A persistent volume for MongoDB data.
|
||||||
|
* Docker images of Habitica.
|
||||||
|
+ You can use your own, or use the one included in the YAML files.
|
||||||
|
+ If you use your own, you'll need a fork of the Habitica GitHub repo and your own Docker Hub repo, both of which are free.
|
||||||
|
|
||||||
|
## Before you begin
|
||||||
|
1. Set up Kubernetes.
|
||||||
|
2. Create an EBS volume for MongoDB data.
|
||||||
|
+ Make a note of the name, you'll need it later.
|
||||||
|
|
||||||
|
## Starting MongoDB
|
||||||
|
1. Edit mongo.yaml
|
||||||
|
+ Find the volumeID line.
|
||||||
|
+ Change the volume to the one created in the section above.
|
||||||
|
2. Run the following commands:
|
||||||
|
+ `kubectl.sh create -f mongo.yaml`
|
||||||
|
+ `kubectl.sh create -f mongo-service.yaml`
|
||||||
|
3. Wait for the MongoDB pod to start up.
|
||||||
|
|
||||||
|
## Starting a Single Web Frontend
|
||||||
|
|
||||||
|
1. Run the following commands:
|
||||||
|
+ `kubectl.sh create -f habitica.yaml`
|
||||||
|
+ `kubectl.sh create -f habitica-service.yaml`
|
||||||
|
2. Wait for the frontend to start up.
|
||||||
|
|
||||||
|
## Starting Multi-node Web Frontend
|
||||||
|
1. Run the following commands :
|
||||||
|
+ `kubectl.sh create -f habitica-rc.yaml`
|
||||||
|
+ `kubectl.sh create -f habitica-service.yaml`
|
||||||
|
2. Wait for the frontend to start up.
|
||||||
|
|
||||||
|
## Accessing Your Habitica web interface
|
||||||
|
Using `kubectl describe svc habiticaweb` get the hostname generated for the Habitica service. Open a browser and go to http://hostname:3000 to access the web front-end for the installations above.
|
||||||
|
|
||||||
|
## Shutting down
|
||||||
|
Shutting down is basically done by reversing the steps above:
|
||||||
|
+ `kubectl.sh delete -f habitica-service.yaml`
|
||||||
|
+ `kubectl.sh delete -f habitica.yaml (or habitica-rc.yaml)`
|
||||||
|
+ `kubectl.sh delete -f mongo-service.yaml`
|
||||||
|
+ `kubectl.sh delete -f mongo.yaml`
|
||||||
|
|
||||||
|
You can also just shut down all of Kubernetes as well.
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
+ MongoDB data will be persistent! If you need to start with a fresh database, you'll need to remove the volume and re-create it.
|
||||||
|
+ On AWS, you probably want to use at least t2.medium minion nodes for Kubernetes. The default t2.small is too small for more than two Habitica nodes.
|
||||||
|
|
||||||
|
## Future Plans
|
||||||
|
+ Multi-node MongoDB.
|
||||||
|
+ Monitoring
|
||||||
|
+ Instructions for a better hostname. The default generated ones stink.
|
||||||
|
+ More to come....
|
||||||
25
kubernetes/habitica-rc.yaml
Normal file
25
kubernetes/habitica-rc.yaml
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ReplicationController
|
||||||
|
metadata:
|
||||||
|
name: habitica
|
||||||
|
labels:
|
||||||
|
name: habitica
|
||||||
|
spec:
|
||||||
|
replicas: 4
|
||||||
|
selector:
|
||||||
|
name: habitica
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
name: habitica
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: habitica
|
||||||
|
image: ksonney/habitrpg:latest
|
||||||
|
env:
|
||||||
|
- name: NODE_DB_URI
|
||||||
|
value: mongodb://mongosvc/habitrpg
|
||||||
|
ports:
|
||||||
|
- containerPort: 3000
|
||||||
|
hostPort: 3000
|
||||||
|
name: habitica
|
||||||
14
kubernetes/habitica-service.yaml
Normal file
14
kubernetes/habitica-service.yaml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
name: habiticaweb
|
||||||
|
name: habiticaweb
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
# the port that this service should serve on
|
||||||
|
- port: 3000
|
||||||
|
# label keys and values that must match in order to receive traffic for this service
|
||||||
|
selector:
|
||||||
|
name: habitica
|
||||||
|
type: LoadBalancer
|
||||||
22
kubernetes/habitica.yaml
Normal file
22
kubernetes/habitica.yaml
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: habitica
|
||||||
|
labels:
|
||||||
|
name: habitica
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
# - image: mongo:latest
|
||||||
|
# name: mongo
|
||||||
|
# ports:
|
||||||
|
# - containerPort: 27017
|
||||||
|
# name: mongo
|
||||||
|
- image: ksonney/habitrpg:latest
|
||||||
|
name: habitica
|
||||||
|
env:
|
||||||
|
- name: NODE_DB_URI
|
||||||
|
value: mongodb://mongosvc/habitrpg
|
||||||
|
ports:
|
||||||
|
- containerPort: 3000
|
||||||
|
hostPort: 3000
|
||||||
|
name: habitica
|
||||||
13
kubernetes/mongo-service.yaml
Normal file
13
kubernetes/mongo-service.yaml
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
name: mongosvc
|
||||||
|
name: mongosvc
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
# the port that this service should serve on
|
||||||
|
- port: 27017
|
||||||
|
# label keys and values that must match in order to receive traffic for this service
|
||||||
|
selector:
|
||||||
|
name: mongodb
|
||||||
28
kubernetes/mongo.yaml
Normal file
28
kubernetes/mongo.yaml
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: mongodb
|
||||||
|
labels:
|
||||||
|
name: mongodb
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- resources:
|
||||||
|
limits :
|
||||||
|
cpu: 0.5
|
||||||
|
image: mongo
|
||||||
|
name: mongodb
|
||||||
|
ports:
|
||||||
|
- containerPort: 27017
|
||||||
|
hostPort: 27017
|
||||||
|
name: mongo
|
||||||
|
volumeMounts:
|
||||||
|
# # name must match the volume name below
|
||||||
|
- name: mongo-persistent-storage
|
||||||
|
# # mount path within the container
|
||||||
|
mountPath: /data/db
|
||||||
|
volumes:
|
||||||
|
- name: mongo-persistent-storage
|
||||||
|
awsElasticBlockStore:
|
||||||
|
volumeID: aws://YOUR-REGION/YOUR-VOLNAME
|
||||||
|
fsType: ext3
|
||||||
|
|
||||||
Loading…
Reference in a new issue