commit 3ab1e0829426551869c3ac5fa2492d38e74202a4
parent 93e931caaad261f54db81e9128e3c1c7540801e3
Author: Andreas Gruhler <andreas.gruhler@adfinis.com>
Date: Sun, 20 Oct 2024 10:06:54 +0200
doc: improve digitalocean instructions
Diffstat:
2 files changed, 121 insertions(+), 0 deletions(-)
diff --git a/dev/digital-ocean-app.yaml b/dev/digital-ocean-app.yaml
@@ -0,0 +1,44 @@
+alerts:
+- rule: DEPLOYMENT_FAILED
+- rule: DOMAIN_FAILED
+databases:
+- engine: PG
+ name: myheats-db
+features:
+- buildpack-stack=ubuntu-22
+ingress:
+ rules:
+ - component:
+ name: myheats-frontend
+ match:
+ path:
+ prefix: /
+ - component:
+ name: myheats-api
+ match:
+ path:
+ prefix: /api
+name: myheats-app
+region: fra
+services:
+- http_port: 80
+ image:
+ deploy_on_push:
+ enabled: true
+ registry_type: DOCR
+ repository: myheats
+ tag: latest
+ instance_count: 1
+ instance_size_slug: apps-s-1vcpu-0.5gb
+ name: myheats-frontend
+- http_port: 8000
+ image:
+ deploy_on_push:
+ enabled: true
+ registry_type: DOCR
+ repository: myheats
+ tag: api
+ instance_count: 1
+ instance_size_slug: apps-s-1vcpu-0.5gb
+ name: myheats-api
+
diff --git a/docs/DIGIALOCEAN.md b/docs/DIGIALOCEAN.md
@@ -0,0 +1,77 @@
+# Digitalocean deployment
+
+Build instructions for Digital Ocean.
+
+Estimated monthly:
+* App cost: $17.00 (2x$5 services + $7 PostgreSQL db)
+* Managed external db: $15
+* Droplet (incl. db, app services): $6
+
+https://www.digitalocean.com/pricing
+
+## Build and push images
+
+1 - Prepare build environment (variables are fixed during "vite build" step):
+
+```bash
+export VITE_APP_DOC_TITLE='My title'
+# use NODE_ENV=prod to exclude the `devDependencies` (e.g., vite)
+export NODE_ENV=dev
+```
+
+2 - Build frontend and push:
+
+```bash
+# https://cloud.digitalocean.com/account/api/tokens
+podman login registry.digitalocean.com/myheats
+
+buildah bud --no-cache \
+ --build-arg="VITE_APP_DOC_TITLE=$VITE_APP_DOC_TITLE" \
+ --build-arg="NODE_ENV=$NODE_ENV" \
+ --network=slirp4netns \
+ -t registry.digitalocean.com/myheats/myheats:latest .
+
+buildah push registry.digitalocean.com/myheats/myheats:latest
+```
+
+3 - Build backend/api and push:
+
+```bash
+# https://code.in0rdr.ch/nomad/file/docker/docker-myheats-api/Dockerfile.html
+buildah bud --no-cache \
+ --network=slirp4netns \
+ -t registry.digitalocean.com/myheats/myheats:api .
+
+buildah push registry.digitalocean.com/myheats/myheats:api
+```
+
+## App service setup
+
+Use `../dev/digital-ocean-app.yaml` app spec to configure the app in Digital Ocean
+
+## Droplet setup
+
+Cheap and cheerful.
+
+1 - Create droplet
+
+2 - Create user
+ - Configure ssh key and sshd agent
+ - Configure sudoers
+ - Install podman
+ - Configure certbot
+
+3 - Clone repos (Podman and db schema)
+
+```bash
+git clone --depth=1 https://git.in0rdr.ch/myheats.git myheats.git
+git clone --depth=1 https://git.in0rdr.ch/nomad.git nomad.git
+cd nomad.git/docker/docker-myheats-nginx/
+```
+
+4 - Run podman services (frontend, api, db)
+
+```bash
+sudo podman login registry.digitalocean.com/myheats
+sudo podman-compose up -d
+```