diff --git a/phase1_gitea_unraid.sh b/phase1_gitea_unraid.sh index bf7aa77..9245287 100755 --- a/phase1_gitea_unraid.sh +++ b/phase1_gitea_unraid.sh @@ -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 +_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"