Skip to content

Commit faff50a

Browse files
committed
Initial commit of deployable backend repo
1 parent 1da3236 commit faff50a

17 files changed

Lines changed: 391 additions & 0 deletions

Dockerfile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
FROM golang:1.13.7-alpine3.11 as builder
2+
WORKDIR /app
3+
COPY . .
4+
RUN go build -o <% .Name %> main.go
5+
6+
FROM alpine:3.11
7+
RUN apk add --update bash ca-certificates
8+
WORKDIR /app
9+
COPY --from=builder /app/<% .Name %> .
10+
11+
ENTRYPOINT ["/app/<% .Name %>"]

Makefile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
build:
2+
go build -o <% .Name %> main.go
3+
4+
run:
5+
SERVER_PORT=80 go run main.go

example.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
name: example-app
3+
4+
# params are key value pairs passed into templates
5+
params:
6+
7+
# production host name
8+
productionHost: fix_me
9+
10+
# staging host name
11+
stagingHost: fix_me
12+
13+
# production database hostname
14+
productionDatabaseHostname: fix_me
15+
16+
# staging database hostname
17+
stagingDatabaseHostname: fix_me

kubernetes/base/deployment.yml

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: <% .Name %>
5+
spec:
6+
revisionHistoryLimit: 5
7+
selector:
8+
matchLabels:
9+
app: <% .Name %>
10+
template:
11+
spec:
12+
containers:
13+
- name: <% .Name %>
14+
image: fake-image
15+
resources:
16+
requests:
17+
memory: 64Mi
18+
cpu: 0.1
19+
limits:
20+
memory: 256Mi
21+
cpu: 0.5
22+
livenessProbe:
23+
exec:
24+
command:
25+
- rm
26+
- /tmp/service-alive
27+
initialDelaySeconds: 5
28+
periodSeconds: 5
29+
readinessProbe:
30+
httpGet:
31+
port: http
32+
path: /status/ready
33+
initialDelaySeconds: 5
34+
periodSeconds: 10
35+
timeoutSeconds: 2
36+
envFrom:
37+
- configMapRef:
38+
name: <% .Name %>-config
39+
env:
40+
- name: DATABASE_USERNAME
41+
valueFrom:
42+
secretKeyRef:
43+
name: <% .Name %>
44+
key: DATABASE_USERNAME
45+
- name: DATABASE_PASSWORD
46+
valueFrom:
47+
secretKeyRef:
48+
name: <% .Name %>
49+
key: DATABASE_PASSWORD
50+
---
51+
apiVersion: autoscaling/v1
52+
kind: HorizontalPodAutoscaler
53+
metadata:
54+
name: <% .Name %>
55+
spec:
56+
scaleTargetRef:
57+
apiVersion: apps/v1
58+
kind: Deployment
59+
name: <% .Name %>
60+
maxReplicas: 2
61+
minReplicas: 1
62+
targetCPUUtilizationPercentage: 60

kubernetes/base/kustomization.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
apiVersion: kustomize.config.k8s.io/v1beta1
2+
kind: Kustomization
3+
4+
resources:
5+
- deployment.yml
6+
- service.yml
7+
8+
configMapGenerator:
9+
- name: <% .Name %>-config
10+
literals:
11+
- SERVICE_PORT=80
12+
- DATABASE_HOST=localhost
13+
- DATABASE_PORT=5432
14+
15+
commonLabels:
16+
app: <% .Name %>

kubernetes/base/service.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: <% .Name %>
5+
spec:
6+
ports:
7+
- name: http
8+
protocol: TCP
9+
port: 80
10+
targetPort: 80
11+
selector:
12+
app: <% .Name %>
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: <% .Name %>
5+
spec:
6+
template:
7+
spec:
8+
containers:
9+
- name: <% .Name %>
10+
resources:
11+
requests:
12+
memory: 128Mi
13+
cpu: 0.5
14+
limits:
15+
memory: 512Mi
16+
cpu: 1.0
17+
---
18+
apiVersion: autoscaling/v1
19+
kind: HorizontalPodAutoscaler
20+
metadata:
21+
name: <% .Name %>
22+
spec:
23+
maxReplicas: 4
24+
minReplicas: 2

kubernetes/production/ingress.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
apiVersion: extensions/v1beta1
2+
kind: Ingress
3+
metadata:
4+
name: <% .Name %>
5+
annotations:
6+
# nginx ingress
7+
kubernetes.io/ingress.class: nginx
8+
nginx.ingress.kubernetes.io/rewrite-target: /$1
9+
# cert-manager
10+
ingress.kubernetes.io/ssl-redirect: "true"
11+
cert-manager.io/cluster-issuer: clusterissuer-letsencrypt-production
12+
# external-dns
13+
external-dns.alpha.kubernetes.io/hostname: <% index .Params `productionHost` %>
14+
15+
spec:
16+
rules:
17+
- host: <% index .Params `productionHost` %>
18+
http:
19+
paths:
20+
- path: /(.*)
21+
backend:
22+
serviceName: <% .Name %>
23+
servicePort: http
24+
tls:
25+
- hosts:
26+
- <% index .Params `productionHost` %>
27+
secretName: <% .Name %>-tls-secret
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
apiVersion: kustomize.config.k8s.io/v1beta1
2+
kind: Kustomization
3+
4+
bases:
5+
- ../base
6+
7+
patchesStrategicMerge:
8+
- deployment.yml
9+
10+
resources:
11+
- ingress.yaml
12+
- pdb.yaml
13+
14+
configMapGenerator:
15+
- name: <% .Name %>-config
16+
behavior: merge
17+
literals:
18+
- DATABASE_HOST=<% index .Params `productionDatabaseHostname` %>
19+
- DATABASE_NAME=<% .Name %>_production
20+
- ENVIRONMENT=production

kubernetes/production/pdb.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
apiVersion: policy/v1beta1
3+
kind: PodDisruptionBudget
4+
metadata:
5+
name: <% .Name %>
6+
spec:
7+
minAvailable: 2
8+
selector:
9+
matchLabels:
10+
service: <% .Name %>

0 commit comments

Comments
 (0)