DEV Community

Cover image for Deploy an app into your personal cloud
rhazn
rhazn

Posted on • Edited on • Originally published at heltweg.org

Deploy an app into your personal cloud

As the final step in this long series of blogposts we are going to deploy a simple webapp in a docker container to my personal cloud. For context here is the personal cloud setup with Traefik/Let's Encrypt (Run a personal cloud with Traefik, Let's encrypt and Zookeeper).

In previous blogposts I also described how I built the app (Build a PWA in docker).

App deployment

The deployment runs the docker container. If you follow my personal cloud setup make sure to use more than one replica as the nature of preemtive VMs means one replica might randomly get shut down.

Note that the image will be set and updated by gitlab ci as described here: (Deploy to google kubernetes engine using gitlab ci).

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: ???-app
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: ???-app
    spec:
      terminationGracePeriodSeconds: 60
      containers:
      - name: ???-app
        image: "eu.gcr.io/???/app:latest"
Enter fullscreen mode Exit fullscreen mode

The service and traefik ingress

apiVersion: v1
kind: Service
metadata:
name: ???-app
spec:
selector:
    app: ???-app
ports:
- name: web
    port: 80
    targetPort: 80
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ???-app
annotations:
    kubernetes.io/ingress.class: traefik
    traefik.frontend.passHostHeader: "false"
    traefik.frontend.priority: "1"
spec:
rules:
- host: app.???.com
    http:
    paths:
    - path: /
        backend:
        serviceName: ???-app
        servicePort: web
Enter fullscreen mode Exit fullscreen mode

Updating the traefik config

Updating the traefik config is important so traefik requests a new HTTPS certificate for the app from Let's encrypt. You will need to add this line to the traefik toml file that is described here (Run a personal cloud with Traefik, Let's encrypt and Zookeeper):

[[acme.domains]]
    main = "app.???.com"
Enter fullscreen mode Exit fullscreen mode

DNS

Now you can just point the A record of your domain to the traefik external IP and the rest will automatically be handled by your personal cloud :).

The final result: The app runs in your personal cloud <3

About Me

I am a full stack developer and digital product enthusiast, I am available for freelance work and always looking for the next exciting project :).

You can reach me online at https://heltweg.org.

Top comments (0)