feat: add database support to phase2_gitea_fedora.sh
Mirror phase1 DB support: add _set_db_vars() and _strip_block() helpers, conditional require_vars for DB connection, DB data directory creation, and conditional template rendering for docker-compose and app.ini based on GITEA_DB_TYPE. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -17,11 +17,54 @@ require_vars FEDORA_IP FEDORA_SSH_USER FEDORA_SSH_PORT \
|
|||||||
GITEA_DB_TYPE GITEA_VERSION \
|
GITEA_DB_TYPE GITEA_VERSION \
|
||||||
GITEA_BACKUP_INTERNAL_URL
|
GITEA_BACKUP_INTERNAL_URL
|
||||||
|
|
||||||
|
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 2 "Gitea on Fedora (Backup)"
|
phase_header 2 "Gitea on Fedora (Backup)"
|
||||||
|
|
||||||
# Alias for template rendering — same template as Phase 1, different values
|
# Alias for template rendering — same template as Phase 1, different values
|
||||||
DATA_PATH="$FEDORA_GITEA_DATA_PATH"
|
DATA_PATH="$FEDORA_GITEA_DATA_PATH"
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# DB-specific variables — same as phase1 (shared helper functions)
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
_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_block() {
|
||||||
|
local file="$1" start="$2" end="$3"
|
||||||
|
sed -i.bak "/${start}/,/${end}/d" "$file"
|
||||||
|
rm -f "${file}.bak"
|
||||||
|
}
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Step 1: Create data directories on Fedora
|
# Step 1: Create data directories on Fedora
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
@@ -30,6 +73,9 @@ if ssh_exec FEDORA "test -d '${DATA_PATH}/data'"; then
|
|||||||
log_info "Data directory already exists — skipping"
|
log_info "Data directory already exists — skipping"
|
||||||
else
|
else
|
||||||
ssh_exec FEDORA "mkdir -p '${DATA_PATH}/data' '${DATA_PATH}/config'"
|
ssh_exec FEDORA "mkdir -p '${DATA_PATH}/data' '${DATA_PATH}/config'"
|
||||||
|
if [[ "${GITEA_DB_TYPE}" != "sqlite3" ]]; then
|
||||||
|
ssh_exec FEDORA "mkdir -p '${DATA_PATH}/db'"
|
||||||
|
fi
|
||||||
log_success "Data directories created"
|
log_success "Data directories created"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -43,8 +89,18 @@ if ssh_exec FEDORA "test -f '${DATA_PATH}/docker-compose.yml'"; then
|
|||||||
else
|
else
|
||||||
TMPFILE=$(mktemp)
|
TMPFILE=$(mktemp)
|
||||||
export DATA_PATH GITEA_PORT="${FEDORA_GITEA_PORT}" GITEA_SSH_PORT="${FEDORA_GITEA_SSH_PORT}"
|
export DATA_PATH GITEA_PORT="${FEDORA_GITEA_PORT}" GITEA_SSH_PORT="${FEDORA_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
|
||||||
|
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
|
||||||
|
_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 FEDORA "$TMPFILE" "${DATA_PATH}/docker-compose.yml"
|
scp_to FEDORA "$TMPFILE" "${DATA_PATH}/docker-compose.yml"
|
||||||
rm -f "$TMPFILE"
|
rm -f "$TMPFILE"
|
||||||
log_success "docker-compose.yml deployed"
|
log_success "docker-compose.yml deployed"
|
||||||
@@ -68,8 +124,17 @@ else
|
|||||||
# the Fedora instance doesn't have a public domain
|
# the Fedora instance doesn't have a public domain
|
||||||
GITEA_DOMAIN="${FEDORA_IP}:${FEDORA_GITEA_PORT}"
|
GITEA_DOMAIN="${FEDORA_IP}:${FEDORA_GITEA_PORT}"
|
||||||
export GITEA_DOMAIN
|
export GITEA_DOMAIN
|
||||||
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 FEDORA "$TMPFILE" "${DATA_PATH}/config/app.ini"
|
scp_to FEDORA "$TMPFILE" "${DATA_PATH}/config/app.ini"
|
||||||
rm -f "$TMPFILE"
|
rm -f "$TMPFILE"
|
||||||
log_success "app.ini deployed"
|
log_success "app.ini deployed"
|
||||||
|
|||||||
Reference in New Issue
Block a user