feat: add database support to phase1_gitea_unraid.sh

Add _set_db_vars() helper to configure DB-specific docker-compose
vars (image, env, healthcheck, data dir) for postgres/mysql/mssql.
Add _strip_block() to remove conditional template markers. Update
docker-compose and app.ini rendering to strip/populate DB blocks
based on GITEA_DB_TYPE. Conditionally require DB connection vars.
Create DB data directory for external databases.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
S
2026-03-01 10:17:37 -05:00
parent 35aeb504c4
commit 2c900b7e4f

View File

@@ -17,6 +17,10 @@ require_vars UNRAID_IP UNRAID_SSH_USER UNRAID_SSH_PORT \
GITEA_DB_TYPE GITEA_VERSION \
GITEA_INTERNAL_URL GITEA_DOMAIN
if [[ "${GITEA_DB_TYPE}" != "sqlite3" ]]; then
require_vars GITEA_DB_HOST GITEA_DB_PORT GITEA_DB_NAME GITEA_DB_USER GITEA_DB_PASSWD
fi
phase_header 1 "Gitea on Unraid"
# Alias for shorter references in template rendering.
@@ -24,6 +28,49 @@ phase_header 1 "Gitea on Unraid"
# works for both Unraid (Phase 1) and Fedora (Phase 2).
DATA_PATH="$UNRAID_GITEA_DATA_PATH"
# ---------------------------------------------------------------------------
# DB-specific variables — set based on GITEA_DB_TYPE for template rendering.
# For sqlite3, the DB service blocks are stripped entirely.
# For external DBs, these vars populate the docker-compose DB service.
# ---------------------------------------------------------------------------
_set_db_vars() {
case "${GITEA_DB_TYPE}" in
postgres)
DB_DOCKER_IMAGE="postgres:16-alpine"
DB_ENV_VARS=" - POSTGRES_USER=${GITEA_DB_USER}
- POSTGRES_PASSWORD=${GITEA_DB_PASSWD}
- POSTGRES_DB=${GITEA_DB_NAME}"
DB_HEALTHCHECK='["CMD-SHELL", "pg_isready -U '"${GITEA_DB_USER}"'"]'
DB_DATA_DIR="postgresql/data"
;;
mysql)
DB_DOCKER_IMAGE="mysql:8.0"
DB_ENV_VARS=" - MYSQL_ROOT_PASSWORD=${GITEA_DB_PASSWD}
- MYSQL_DATABASE=${GITEA_DB_NAME}
- MYSQL_USER=${GITEA_DB_USER}
- MYSQL_PASSWORD=${GITEA_DB_PASSWD}"
DB_HEALTHCHECK='["CMD", "mysqladmin", "ping", "-h", "localhost"]'
DB_DATA_DIR="mysql"
;;
mssql)
DB_DOCKER_IMAGE="mcr.microsoft.com/mssql/server:2022-latest"
DB_ENV_VARS=" - ACCEPT_EULA=Y
- SA_PASSWORD=${GITEA_DB_PASSWD}"
DB_HEALTHCHECK='["CMD-SHELL", "/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P '"'"'${GITEA_DB_PASSWD}'"'"' -Q \"SELECT 1\" -C -N"]'
DB_DATA_DIR="mssql/data"
;;
esac
export DB_DOCKER_IMAGE DB_ENV_VARS DB_HEALTHCHECK DB_DATA_DIR
}
# Strip conditional blocks from a rendered file.
# Usage: _strip_block <file> <start_marker> <end_marker>
_strip_block() {
local file="$1" start="$2" end="$3"
sed -i.bak "/${start}/,/${end}/d" "$file"
rm -f "${file}.bak"
}
# ---------------------------------------------------------------------------
# Step 1: Create data directories
# ---------------------------------------------------------------------------
@@ -32,6 +79,10 @@ if ssh_exec UNRAID "test -d '${DATA_PATH}/data'"; then
log_info "Data directory already exists — skipping"
else
ssh_exec UNRAID "mkdir -p '${DATA_PATH}/data' '${DATA_PATH}/config'"
# Create DB data directory for external databases
if [[ "${GITEA_DB_TYPE}" != "sqlite3" ]]; then
ssh_exec UNRAID "mkdir -p '${DATA_PATH}/db'"
fi
log_success "Data directories created"
fi
@@ -45,8 +96,20 @@ else
TMPFILE=$(mktemp)
# Set variables for template
export DATA_PATH GITEA_PORT="${UNRAID_GITEA_PORT}" GITEA_SSH_PORT="${UNRAID_GITEA_SSH_PORT}"
render_template "${SCRIPT_DIR}/templates/docker-compose-gitea.yml.tpl" "$TMPFILE" \
"\${GITEA_VERSION} \${DATA_PATH} \${GITEA_PORT} \${GITEA_SSH_PORT}"
if [[ "$GITEA_DB_TYPE" == "sqlite3" ]]; then
# No DB service needed — render template then strip DB blocks
render_template "${SCRIPT_DIR}/templates/docker-compose-gitea.yml.tpl" "$TMPFILE" \
"\${GITEA_VERSION} \${DATA_PATH} \${GITEA_PORT} \${GITEA_SSH_PORT}"
_strip_block "$TMPFILE" "DB_SERVICE_START" "DB_SERVICE_END"
_strip_block "$TMPFILE" "DB_DEPENDS_START" "DB_DEPENDS_END"
else
# External DB — set DB-specific vars then render, strip sqlite markers
_set_db_vars
render_template "${SCRIPT_DIR}/templates/docker-compose-gitea.yml.tpl" "$TMPFILE" \
"\${GITEA_VERSION} \${DATA_PATH} \${GITEA_PORT} \${GITEA_SSH_PORT} \${DB_DOCKER_IMAGE} \${DB_ENV_VARS} \${DB_DATA_DIR} \${DB_HEALTHCHECK}"
fi
scp_to UNRAID "$TMPFILE" "${DATA_PATH}/docker-compose.yml"
rm -f "$TMPFILE"
log_success "docker-compose.yml deployed"
@@ -63,8 +126,17 @@ else
# Generate a random secret key for this instance
GITEA_SECRET_KEY=$(openssl rand -hex 32)
export GITEA_SECRET_KEY
render_template "${SCRIPT_DIR}/templates/app.ini.tpl" "$TMPFILE" \
"\${GITEA_DOMAIN} \${GITEA_DB_TYPE} \${GITEA_SECRET_KEY}"
if [[ "$GITEA_DB_TYPE" == "sqlite3" ]]; then
render_template "${SCRIPT_DIR}/templates/app.ini.tpl" "$TMPFILE" \
"\${GITEA_DOMAIN} \${GITEA_DB_TYPE} \${GITEA_SECRET_KEY}"
_strip_block "$TMPFILE" "EXTDB_BLOCK_START" "EXTDB_BLOCK_END"
else
render_template "${SCRIPT_DIR}/templates/app.ini.tpl" "$TMPFILE" \
"\${GITEA_DOMAIN} \${GITEA_DB_TYPE} \${GITEA_SECRET_KEY} \${GITEA_DB_HOST} \${GITEA_DB_PORT} \${GITEA_DB_NAME} \${GITEA_DB_USER} \${GITEA_DB_PASSWD}"
_strip_block "$TMPFILE" "SQLITE_BLOCK_START" "SQLITE_BLOCK_END"
fi
scp_to UNRAID "$TMPFILE" "${DATA_PATH}/config/app.ini"
rm -f "$TMPFILE"
log_success "app.ini deployed"