From d545e32b5623b12ed2c4405be2484ffdfa9432e5 Mon Sep 17 00:00:00 2001
From: Tao Wang <twang2218@gmail.com>
Date: Tue, 31 Oct 2017 19:55:46 +1100
Subject: [PATCH] Add environment variable support for Docker image (#2201)

* Add `gettext` dependencies as we need `envsubst` command;
* Modified s6's gitea setup script, instead of `cp` the template if no
`app.ini` exist, it will substitude the envvars and generate the new
`app.ini`;
* Make `/docker/etc/templates/app.ini` a template contains environment
variables;

Signed-off-by: Tao Wang <twang2218@gmail.com>
---
 Dockerfile                   |  1 +
 Dockerfile.aarch64           |  1 +
 Dockerfile.rpi               |  1 +
 docker/etc/s6/gitea/setup    | 24 +++++++++++++++++++++++-
 docker/etc/templates/app.ini | 17 ++++++++++++++++-
 5 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index 4e394bfe6f..3db023ca3b 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -14,6 +14,7 @@ RUN apk --no-cache add \
     s6 \
     curl \
     openssh \
+    gettext \
     tzdata
 RUN addgroup \
     -S -g 1000 \
diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64
index f76a2663d2..5c6746d584 100644
--- a/Dockerfile.aarch64
+++ b/Dockerfile.aarch64
@@ -14,6 +14,7 @@ RUN apk --no-cache add \
     s6 \
     curl \
     openssh \
+    gettext \
     tzdata
 RUN addgroup \
     -S -g 1000 \
diff --git a/Dockerfile.rpi b/Dockerfile.rpi
index 12874f7def..17ff4430e5 100644
--- a/Dockerfile.rpi
+++ b/Dockerfile.rpi
@@ -14,6 +14,7 @@ RUN apk --no-cache add \
     s6 \
     curl \
     openssh \
+    gettext \
     tzdata
 RUN addgroup \
     -S -g 1000 \
diff --git a/docker/etc/s6/gitea/setup b/docker/etc/s6/gitea/setup
index 27ca49db30..30884bc411 100755
--- a/docker/etc/s6/gitea/setup
+++ b/docker/etc/s6/gitea/setup
@@ -12,7 +12,29 @@ fi
 
 if [ ! -f /data/gitea/conf/app.ini ]; then
     mkdir -p /data/gitea/conf
-    cp /etc/templates/app.ini /data/gitea/conf/app.ini
+
+    # Set INSTALL_LOCK to true only if SECRET_KEY is not empty and
+    # INSTALL_LOCK is empty
+    if [ -n "$SECRET_KEY" ] && [ -z "$INSTALL_LOCK" ]; then
+        INSTALL_LOCK=true
+    fi
+
+    # Substitude the environment variables in the template
+    APP_NAME=${APP_NAME:-"Gitea: Git with a cup of tea"} \
+    APP_MODE=${APP_MODE:-"dev"} \
+    SSH_DOMAIN=${SSH_DOMAIN:-"localhost"} \
+    HTTP_PORT=${HTTP_PORT:-"3000"} \
+    ROOT_URL=${ROOT_URL:-""} \
+    DISABLE_SSH=${DISABLE_SSH:-"false"} \
+    SSH_PORT=${SSH_PORT:-"22"} \
+    DB_TYPE=${DB_TYPE:-"sqlite3"} \
+    DB_HOST=${DB_HOST:-"localhost:3306"} \
+    DB_NAME=${DB_NAME:-"gitea"} \
+    DB_USER=${DB_USER:-"root"} \
+    DB_PASSWD=${DB_PASSWD:-""} \
+    INSTALL_LOCK=${INSTALL_LOCK:-"false"} \
+    SECRET_KEY=${SECRET_KEY:-""} \
+    envsubst < /etc/templates/app.ini > /data/gitea/conf/app.ini
 fi
 
 chown -R git:git /data/gitea /app/gitea /data/git
diff --git a/docker/etc/templates/app.ini b/docker/etc/templates/app.ini
index 0987941519..0dcf41be14 100644
--- a/docker/etc/templates/app.ini
+++ b/docker/etc/templates/app.ini
@@ -1,4 +1,6 @@
 [repository]
+APP_NAME = $APP_NAME
+APP_MODE = $APP_MODE
 ROOT = /data/git/repositories
 
 [repository.upload]
@@ -6,10 +8,19 @@ TEMP_PATH = /data/gitea/uploads
 
 [server]
 APP_DATA_PATH = /data/gitea
+SSH_DOMAIN       = $SSH_DOMAIN
+HTTP_PORT        = $HTTP_PORT
+ROOT_URL         = $ROOT_URL
+DISABLE_SSH      = $DISABLE_SSH
+SSH_PORT         = $SSH_PORT
 
 [database]
-DB_TYPE = sqlite3
 PATH = /data/gitea/gitea.db
+DB_TYPE = $DB_TYPE
+HOST    = $DB_HOST
+NAME    = $DB_NAME
+USER    = $DB_USER
+PASSWD  = $DB_PASSWD
 
 [session]
 PROVIDER_CONFIG = /data/gitea/sessions
@@ -22,3 +33,7 @@ PATH = /data/gitea/attachments
 
 [log]
 ROOT_PATH = /data/gitea/log
+
+[security]
+INSTALL_LOCK = $INSTALL_LOCK
+SECRET_KEY   = $SECRET_KEY