chore(docker): rework the docker-compose/traefik config and add a deployment script@@ -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
@@ -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
@@ -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}