feat: add Gitea service (SQLite, HTTPS-only)
- gitea/docker-compose.yml: single container, SQLite, port 3000, data at /data/server-infra/gitea/ - setup.sh: restructure to separate recovery (one-time) from deploy (idempotent) for all services; add data dirs for gitea; loop over all services on deploy Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
14
gitea/docker-compose.yml
Normal file
14
gitea/docker-compose.yml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
services:
|
||||||
|
gitea:
|
||||||
|
image: gitea/gitea:latest
|
||||||
|
container_name: gitea
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "3000:3000"
|
||||||
|
volumes:
|
||||||
|
- /data/server-infra/gitea:/data
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
environment:
|
||||||
|
- GITEA__database__DB_TYPE=sqlite3
|
||||||
|
- GITEA__server__SSH_DISABLED=true
|
||||||
70
setup.sh
70
setup.sh
@@ -6,13 +6,18 @@
|
|||||||
# sudo bash setup.sh
|
# sudo bash setup.sh
|
||||||
#
|
#
|
||||||
# What it does:
|
# What it does:
|
||||||
# 1. Recovers docker-compose.yml files from running containers via uvx docker-autocompose
|
# 1. Recovers docker-compose.yml files from already-running containers (one-time)
|
||||||
# 2. Creates infra_service system user (docker group, nologin)
|
# 2. Creates infra_service system user (docker group, nologin)
|
||||||
# 3. Creates /opt/server-infra/{umami,reverse-proxy}/ and deploys compose files
|
# 3. Creates /data/server-infra/{service}/ data directories
|
||||||
# 4. Copies recovered files back into this repo directory (ready to commit)
|
# 4. Deploys all compose files from this repo to /opt/server-infra/ (idempotent)
|
||||||
#
|
#
|
||||||
# Padelnomics containers are recovered to /tmp/padelnomics-compose-recovered.yml only.
|
# Padelnomics containers are recovered to /tmp/padelnomics-compose-recovered.yml only.
|
||||||
# They belong in the padelnomics repo, not here.
|
# They belong in the padelnomics repo, not here.
|
||||||
|
#
|
||||||
|
# Services managed by this repo:
|
||||||
|
# umami — analytics (recovered from running containers)
|
||||||
|
# reverse-proxy — nginx proxy manager (recovered from running containers)
|
||||||
|
# gitea — self-hosted git (new, compose file already in repo)
|
||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
@@ -115,60 +120,77 @@ else
|
|||||||
fi
|
fi
|
||||||
usermod -aG docker "${SERVICE_USER}"
|
usermod -aG docker "${SERVICE_USER}"
|
||||||
|
|
||||||
# ── Deploy directory ───────────────────────────────────────────────────────────
|
# ── Data directories ───────────────────────────────────────────────────────────
|
||||||
|
|
||||||
log "Creating deploy directory ${DEPLOY_DIR}..."
|
log "Creating data directories..."
|
||||||
mkdir -p "${DEPLOY_DIR}/umami" "${DEPLOY_DIR}/reverse-proxy"
|
mkdir -p /data/server-infra/gitea
|
||||||
|
chown -R "${SERVICE_USER}:${SERVICE_USER}" /data/server-infra
|
||||||
|
|
||||||
for pair in \
|
# ── Deploy: copy all compose files from repo to deploy dir (idempotent) ────────
|
||||||
"/tmp/server-infra-recovery/umami.yml:${DEPLOY_DIR}/umami/docker-compose.yml" \
|
#
|
||||||
"/tmp/server-infra-recovery/reverse-proxy.yml:${DEPLOY_DIR}/reverse-proxy/docker-compose.yml"; do
|
# Recovered files (umami, reverse-proxy) are already in ${SCRIPT_DIR} after
|
||||||
src="${pair%%:*}"
|
# the recovery section above. Gitea compose is committed directly in the repo.
|
||||||
dst="${pair##*:}"
|
# This section deploys all of them to DEPLOY_DIR.
|
||||||
|
|
||||||
|
log "Deploying compose files to ${DEPLOY_DIR}..."
|
||||||
|
|
||||||
|
for service in umami reverse-proxy gitea; do
|
||||||
|
src="${SCRIPT_DIR}/${service}/docker-compose.yml"
|
||||||
|
dst="${DEPLOY_DIR}/${service}/docker-compose.yml"
|
||||||
if [ -f "${src}" ]; then
|
if [ -f "${src}" ]; then
|
||||||
|
mkdir -p "${DEPLOY_DIR}/${service}"
|
||||||
cp "${src}" "${dst}"
|
cp "${src}" "${dst}"
|
||||||
|
log " ${service} → ${dst}"
|
||||||
|
else
|
||||||
|
warn " ${service}/docker-compose.yml not in repo — skipping deploy"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
chown -R "${SERVICE_USER}:${SERVICE_USER}" "${DEPLOY_DIR}"
|
chown -R "${SERVICE_USER}:${SERVICE_USER}" "${DEPLOY_DIR}"
|
||||||
log " Ownership set to ${SERVICE_USER}."
|
|
||||||
|
|
||||||
# ── Summary ────────────────────────────────────────────────────────────────────
|
# ── Summary ────────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "=================================================================="
|
echo "=================================================================="
|
||||||
echo ""
|
echo ""
|
||||||
echo " Recovery complete. Files recovered:"
|
echo " Setup complete."
|
||||||
echo ""
|
echo ""
|
||||||
|
echo " Deployed services:"
|
||||||
[ -f "${DEPLOY_DIR}/umami/docker-compose.yml" ] && echo " umami → ${DEPLOY_DIR}/umami/docker-compose.yml"
|
[ -f "${DEPLOY_DIR}/umami/docker-compose.yml" ] && echo " umami → ${DEPLOY_DIR}/umami/docker-compose.yml"
|
||||||
[ -f "${DEPLOY_DIR}/reverse-proxy/docker-compose.yml" ] && echo " reverse-proxy → ${DEPLOY_DIR}/reverse-proxy/docker-compose.yml"
|
[ -f "${DEPLOY_DIR}/reverse-proxy/docker-compose.yml" ] && echo " reverse-proxy → ${DEPLOY_DIR}/reverse-proxy/docker-compose.yml"
|
||||||
|
[ -f "${DEPLOY_DIR}/gitea/docker-compose.yml" ] && echo " gitea → ${DEPLOY_DIR}/gitea/docker-compose.yml"
|
||||||
echo ""
|
echo ""
|
||||||
if [ -f "/tmp/padelnomics-compose-recovered.yml" ]; then
|
if [ -f "/tmp/padelnomics-compose-recovered.yml" ]; then
|
||||||
echo " Padelnomics (NOT in repo — save to padelnomics repo):"
|
echo " Padelnomics (NOT in repo — save to padelnomics repo):"
|
||||||
echo " /tmp/padelnomics-compose-recovered.yml"
|
echo " /tmp/padelnomics-compose-recovered.yml"
|
||||||
echo ""
|
echo ""
|
||||||
fi
|
fi
|
||||||
echo " Service user: ${SERVICE_USER} (docker group)"
|
echo " Service user: ${SERVICE_USER} (docker group)"
|
||||||
echo " Deploy dir: ${DEPLOY_DIR}/"
|
echo " Deploy dir: ${DEPLOY_DIR}/"
|
||||||
|
echo " Data dir: /data/server-infra/"
|
||||||
echo ""
|
echo ""
|
||||||
echo "=================================================================="
|
echo "=================================================================="
|
||||||
echo ""
|
echo ""
|
||||||
echo " Next steps:"
|
echo " Next steps:"
|
||||||
echo ""
|
echo ""
|
||||||
echo " 1. Inspect recovered files and fix up any gaps (env vars, volumes):"
|
echo " 1. Commit recovered compose files to git:"
|
||||||
echo " docker compose -f ${DEPLOY_DIR}/umami/docker-compose.yml config"
|
|
||||||
echo " docker compose -f ${DEPLOY_DIR}/reverse-proxy/docker-compose.yml config"
|
|
||||||
echo ""
|
|
||||||
echo " 2. Commit recovered files to git:"
|
|
||||||
echo " cd ${SCRIPT_DIR}"
|
echo " cd ${SCRIPT_DIR}"
|
||||||
echo " git add umami/docker-compose.yml reverse-proxy/docker-compose.yml"
|
echo " git add umami/docker-compose.yml reverse-proxy/docker-compose.yml"
|
||||||
echo " git commit -m 'chore: recover compose files from running containers'"
|
echo " git commit -m 'chore: recover compose files from running containers'"
|
||||||
echo ""
|
echo ""
|
||||||
echo " 3. Move padelnomics compose to the padelnomics repo:"
|
echo " 2. Start Gitea:"
|
||||||
echo " /tmp/padelnomics-compose-recovered.yml"
|
echo " sudo -u ${SERVICE_USER} docker compose -f ${DEPLOY_DIR}/gitea/docker-compose.yml up -d"
|
||||||
|
echo " # Then open http://<server-ip>:3000 to complete the web installer"
|
||||||
|
echo " # Set ROOT_URL to your public domain (e.g. https://git.yourdomain.com)"
|
||||||
echo ""
|
echo ""
|
||||||
echo " 4. To restart a service if containers go down:"
|
echo " 3. Add Gitea proxy host in nginx proxy manager:"
|
||||||
echo " sudo -u ${SERVICE_USER} docker compose -f ${DEPLOY_DIR}/umami/docker-compose.yml up -d"
|
echo " Forward to <server-ip>:3000"
|
||||||
|
echo ""
|
||||||
|
echo " 4. To restart any service if containers go down:"
|
||||||
|
echo " sudo -u ${SERVICE_USER} docker compose -f ${DEPLOY_DIR}/<service>/docker-compose.yml up -d"
|
||||||
|
echo ""
|
||||||
|
echo " 5. Move padelnomics compose to the padelnomics repo:"
|
||||||
|
echo " /tmp/padelnomics-compose-recovered.yml"
|
||||||
echo ""
|
echo ""
|
||||||
echo "=================================================================="
|
echo "=================================================================="
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
Reference in New Issue
Block a user