1
0
Fork 0

Add deployments quickstart

upload-progress
Ambrose Chua 2021-05-24 08:54:38 +08:00
parent dc6d24d3be
commit 8b15de10b0
9 changed files with 181 additions and 0 deletions

View File

@ -22,5 +22,6 @@ export LISTEN=:8080
./upl
```
For example Kubernetes manifests or Docker Compose files, see the [deployments](./deployments) folder.
<!-- vim: set conceallevel=2 et ts=2 sw=2: -->

20
deployments/README.md Normal file
View File

@ -0,0 +1,20 @@
# Deployment
## Kubernetes
Example Kubernetes manifests are located in the [k8s](./k8s/) subdirectory. These are only useful for small deployments. For larger deployments, use a proper Redis cluster like one deployed with [this Redis operator](https://ot-container-kit.github.io/redis-operator/).
```
kubectl apply -r -f ./k8s/
```
## Docker Compose
The example [docker-compose.yml](./docker-compose.yml) file can be brought up with `docker-compose`.
```
docker-compose up
```
<!-- vim: set conceallevel=2 et ts=2 sw=2: -->

View File

@ -0,0 +1,31 @@
version: "3.2"
services:
redis:
image: redis:6-alpine3.13
command: redis-server --appendonly yes
volumes:
- upl-redis-data:/data
networks:
upl:
upl:
image: ghcr.io/serverwentdown/upl:latest
restart: on-failure
environment:
LISTEN: ":8080"
REDIS_CONNECTION: simple:redis:6379
ports:
- 8080:8080
depends_on:
- redis
networks:
upl:
volumes:
upl-redis-data:
networks:
upl:
# vim: set et ts=2 sw=2:

View File

@ -0,0 +1,38 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: upl
spec:
replicas: 1
selector:
matchLabels:
app: upl
template:
metadata:
labels:
app: upl
spec:
containers:
- image: ghcr.io/serverwentdown/upl:latest
imagePullPolicy: Always
name: upl
env:
- name: LISTEN
value: ":8080"
- name: REDIS_CONNECTION
value: simple:upl-redis:6379
resources:
requests:
cpu: "1"
memory: "512Mi"
ephemeral-storage: "1Gi"
limits:
cpu: "1"
memory: "512Mi"
ephemeral-storage: "1Gi"
ports:
- containerPort: 8080
readinessProbe:
httpGet:
path: /readyz
port: 8080

View File

@ -0,0 +1,18 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: upl
spec:
rules:
- host: drop.example.com
http:
paths:
- backend:
service:
name: upl
port:
number: 80
path: /
pathType: Prefix
# vim: set et ts=2 sw=2:

View File

@ -0,0 +1,10 @@
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: upl-redis-claim
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi

View File

@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: upl-redis
spec:
ports:
- port: 6379
selector:
app: upl-redis
type: ClusterIP
# vim: set et ts=2 sw=2:

View File

@ -0,0 +1,40 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: upl-redis
spec:
# This is a single-master Redis setup, there must only be one replica
replicas: 1
serviceName: upl-redis
selector:
matchLabels:
app: upl-redis
template:
metadata:
labels:
app: upl-redis
spec:
containers:
- image: redis:6-alpine3.13
name: upl-redis
command: ["redis-server"]
args: ["--appendonly", "yes"]
resources:
requests:
cpu: "1"
memory: "1Gi"
ephemeral-storage: "1Gi"
limits:
cpu: "1"
memory: "1Gi"
ephemeral-storage: "1Gi"
volumeMounts:
- name: data
mountPath: /data
readinessProbe:
exec:
command: ["redis-cli", "ping"]
volumes:
- name: data
persistentVolumeClaim:
claimName: upl-redis-claim

View File

@ -0,0 +1,11 @@
apiVersion: v1
kind: Service
metadata:
name: upl
spec:
ports:
- port: 80
targetPort: 8080
selector:
app: upl
type: ClusterIP