GitFOSS
chore(docker): rework the docker-compose/traefik config and add a deployment script
+ 119
- 1
@@ -25,3 +25,6 @@ public/islands-runtime.js.map
 # Folders made by docker-compose
 data/gitfoss_repos/
 data/postgres_data/
+data/traefik/
+docker-compose.prod.yml
+gitfoss_web.tar

@@ -25,3 +25,5 @@ public/islands-runtime.js.map
 # Folders made by docker-compose
 data/gitfoss_repos/
 data/postgres_data/
+docker-compose.prod.yml
+gitfoss_web.tar

new file
data/traefik/traefik.yml
@@ -0,0 +1,45 @@
+global:
+  checkNewVersion: true
+  sendAnonymousUsage: false
+
+log:
+  filePath: /var/log/traefik/traefik.log
+  # common, json, logfmt
+  format: common
+  # DEBUG, INFO, WARNING, ERROR, CRITICAL
+  level: DEBUG
+
+accessLog:
+  filePath: /var/log/traefik/access.log
+  # common, json, logfmt
+  format: common
+
+api:
+  insecure: true
+  dashboard: true
+  debug: true
+
+providers:
+  file:
+    directory: /var/lib/traefik
+  docker:
+    endpoint: "unix:///var/run/docker.sock"
+    exposedByDefault: false
+    network: root_reverse-proxy-public
+    watch: false
+
+entryPoints:
+  web:
+    address: :80
+  websecure:
+    address: :443
+
+certificatesResolvers:
+  letsencrypt:
+    acme:
+      # staging server, comment when testing done
+      # caServer: "https://acme-staging-v02.api.letsencrypt.org/directory"
+      email: contact@ethicdevs.com
+      httpChallenge:
+        entryPoint: web
+      storage: /var/lib/traefik/acme/acme.json

@@ -23,7 +23,7 @@ services:
     environment:
       - COOKIE_NAME=gitfoss_ssid
       - COOKIE_SECRET=gitfoss-cookie-secret
-      - DATABASE_URL='postgresql://postgres:change_me_password@gitfoss_db:5432/gitfoss?sslmode=disable&connection_limit=3'
+      - DATABASE_URL=postgresql://postgres:change_me_password@gitfoss_db:5432/gitfoss?sslmode=disable&connection_limit=3
       - DEPLOYMENT_DOMAIN=local-app.localhost
       - DEPLOYMENT_SCHEME=http
       - GIT_REPOSITORIES_ROOT=/var/lib/gitfoss/repos

new file
scripts/docker-build-scp-deploy.sh
@@ -0,0 +1,68 @@
+#!/bin/bash
+
+function build_and_deploy() {
+  local host=$1
+  local port=$2
+  local docker_image_name=$3
+  local docker_image_tag=$4
+  local remote_ssh_user=$5
+  local remote_ssh_host=$6
+  local remote_dest_path=$7
+
+  echo -e ""
+  echo -e "-------------[ PLAN ]--------------"
+  echo -e ""
+  echo -e "1. docker build --build-arg HOST=${host} --build-arg PORT=${port} -f Dockerfile -t ${docker_image_name}:${docker_image_tag} ."
+  echo -e "2. docker save -o ./${docker_image_name}.tar docker.io/library/${docker_image_name}"
+  echo -e "3. scp ${docker_image_name}.tar ${remote_ssh_user}@${remote_ssh_host}:${remote_dest_path}"
+  echo -e "4. ssh ${remote_ssh_user}@${remote_ssh_host} \"docker load -i ${docker_image_name}.tar\""
+  echo -e ""
+  echo -e "--------------[ RUN ]--------------"
+  echo -e ""
+
+  {
+    echo -e "[..] docker build --build-arg HOST=${host} --build-arg PORT=${port} -f Dockerfile -t ${docker_image_name}:${docker_image_tag} ."
+    docker build \
+      --build-arg HOST=${host} \
+      --build-arg PORT=${port} \
+      -t ${docker_image_name}:${docker_image_tag} \
+      -f Dockerfile \
+      .
+    echo -e "[ok] docker build --build-arg HOST=${host} --build-arg PORT=${port} -f Dockerfile -t ${docker_image_name}:${docker_image_tag} ."
+  }
+  echo -e ""
+  {
+  echo -e "[..] docker save -o ./${docker_image_name}.tar docker.io/library/${docker_image_name}"
+  docker save \
+    -o ./${docker_image_name}.tar \
+    docker.io/library/${docker_image_name}
+  echo -e "[ok] docker save -o ./${docker_image_name}.tar docker.io/library/${docker_image_name}"
+  }
+  echo -e ""
+  {
+  echo -e "[..] scp ${docker_image_name}.tar ${remote_ssh_user}@${remote_ssh_host}:${remote_dest_path}"
+  scp \
+    ${docker_image_name}.tar \
+    ${remote_ssh_user}@${remote_ssh_host}:${remote_dest_path}
+  echo -e "[ok] scp ${docker_image_name}.tar ${remote_ssh_user}@${remote_ssh_host}:${remote_dest_path}"
+  }
+  echo -e ""
+  {
+  echo -e "[..] ssh ${remote_ssh_user}@${remote_ssh_host} \"docker load -i ${docker_image_name}.tar\""
+  ssh \
+    ${remote_ssh_user}@${remote_ssh_host} \
+    "docker load -i ${remote_dest_path}/${docker_image_name}.tar"
+  echo -e "[ok] ssh ${remote_ssh_user}@${remote_ssh_host} \"docker load -i ${docker_image_name}.tar\""
+  }
+  echo -e ""
+  exit 0
+}
+
+build_and_deploy \
+  ${HOST:-0.0.0.0} \
+  ${PORT:-1337} \
+  ${DOCKER_IMAGE_NAME:-gitfoss_web} \
+  ${DOCKER_IMAGE_TAG:-latest} \
+  ${REMOTE_SSH_USER:-root} \
+  ${REMOTE_SSH_HOST:-gitfoss.io} \
+  ${REMOTE_DESTINATION_PATH:-/root}