#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ENV_FILE="$SCRIPT_DIR/.env" if [ ! -f "$ENV_FILE" ]; then echo "No .env found. Copy .env.example to .env and set MYSQL_PASSWORD." >&2 exit 1 fi set -a # shellcheck disable=SC1090 . "$ENV_FILE" set +a if [ -z "${MYSQL_PASSWORD:-}" ] || [ "${MYSQL_PASSWORD}" = "CHANGE_ME" ]; then echo "MYSQL_PASSWORD is unset or still the placeholder in .env." >&2 echo "Generate one with: openssl rand -base64 32" >&2 exit 1 fi : "${GITEA_UID:=1000}" : "${GITEA_GID:=1000}" : "${GITEA_DATA_DIR:=./data}" : "${GITEA_CONFIG_DIR:=./config}" : "${NGINX_CONFIG_DIR:=./nginx}" resolve_path() { case "$1" in /*) printf '%s\n' "$1" ;; *) printf '%s/%s\n' "$SCRIPT_DIR" "$1" ;; esac } DATA_DIR="$(resolve_path "$GITEA_DATA_DIR")" CONFIG_DIR="$(resolve_path "$GITEA_CONFIG_DIR")" NGINX_DIR="$(resolve_path "$NGINX_CONFIG_DIR")" mkdir -p "$DATA_DIR" "$CONFIG_DIR" "$NGINX_DIR" # Only the Gitea bind mounts need this; MySQL uses a named volume and manages # its own ownership. chown_cmd=(chown -R "${GITEA_UID}:${GITEA_GID}" "$DATA_DIR" "$CONFIG_DIR") if [ "$(id -u)" -ne 0 ]; then if command -v sudo >/dev/null 2>&1; then sudo "${chown_cmd[@]}" else echo "Need ownership change to ${GITEA_UID}:${GITEA_GID}; re-run as root or with sudo" >&2 exit 1 fi else "${chown_cmd[@]}" fi if docker compose version >/dev/null 2>&1; then COMPOSE_CMD=(docker compose) elif command -v docker-compose >/dev/null 2>&1; then COMPOSE_CMD=(docker-compose) else echo "docker compose not found" >&2 exit 1 fi (cd "$SCRIPT_DIR" && "${COMPOSE_CMD[@]}" up -d) cat <