#!/usr/bin/env bash set -euo pipefail # Konfiguration SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" GITEA_DIR="/opt/gitea-server" WEBSITE_DIR="$SCRIPT_DIR/Website" GITEA_DOMAIN="update.meine-domain" GITEA_HTTP_PORT=3001 GITEA_SSH_PORT=2222 GITEA_BIND_IP="127.0.0.1" WEBSITE_DOMAIN="meine-domain" WEBSITE_UPSTREAM_PORT=4999 RUNTIME_ENV_FILE="$GITEA_DIR/runtime.env" ACTION="${1:-start}" usage() { echo "Nutzung: $0 [start|stop|restart|status]" } current_host_info() { local host_name local host_ip host_name="$(hostname)" host_ip="$(hostname -I 2>/dev/null | awk '{print $1}')" if [ -z "$host_ip" ]; then host_ip="unbekannt" fi echo "$host_name ($host_ip)" } write_gitea_compose() { local gitea_http_port="$1" echo "Erstelle docker-compose.yml fuer Gitea..." cat < "$GITEA_DIR/docker-compose.yml" networks: gitea: external: false services: server: image: gitea/gitea:1.21 container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 - GITEA__database__DB_TYPE=sqlite3 - GITEA__server__DOMAIN=$GITEA_DOMAIN - GITEA__server__SSH_DOMAIN=$GITEA_DOMAIN - GITEA__server__HTTP_PORT=3001 - GITEA__server__ROOT_URL=https://$GITEA_DOMAIN - GITEA__server__SSH_PORT=$GITEA_SSH_PORT restart: always networks: - gitea volumes: - ./data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "$GITEA_BIND_IP:$gitea_http_port:3001" - "$GITEA_SSH_PORT:22" EOF } write_runtime_config() { local gitea_http_port="$1" # Runtime-Konfiguration fuer getrenntes nginx Setup speichern. sudo tee "$RUNTIME_ENV_FILE" >/dev/null </dev/null sudo docker rm gitea >/dev/null fi if [ -f "$WEBSITE_DIR/docker-compose.yml" ]; then cd "$WEBSITE_DIR" sudo docker compose down || true fi echo "-------------------------------------------------------" echo "Services wurden gestoppt." echo "Hinweis: nginx Proxy-Konfiguration bleibt aktiv und getrennt verwaltet." echo "-------------------------------------------------------" } start_services() { echo "Erstelle Gitea-Verzeichnisse in $GITEA_DIR..." sudo mkdir -p "$GITEA_DIR/data" "$GITEA_DIR/config" write_gitea_compose "$GITEA_HTTP_PORT" write_runtime_config "$GITEA_HTTP_PORT" start_gitea_service start_website_service if [ -x "$SCRIPT_DIR/nginx.sh" ]; then echo "Aktualisiere Nginx Reverse Proxy..." sudo "$SCRIPT_DIR/nginx.sh" apply || echo "Warnung: Nginx konnte nicht automatisch aktualisiert werden." fi if [ -x "$WEBSITE_DIR/sync_dev_hosts.sh" ]; then echo "Aktualisiere Hosts-Datei fuer Subdomains..." sudo "$WEBSITE_DIR/sync_dev_hosts.sh" || echo "Warnung: Hosts-Sync konnte nicht automatisch aktualisiert werden." fi echo "-------------------------------------------------------" echo "Docker Services wurden gestartet!" echo "Gitea Intern: $GITEA_BIND_IP:$GITEA_HTTP_PORT" echo "Gitea SSH: $GITEA_SSH_PORT" echo "Website Port: $WEBSITE_UPSTREAM_PORT" echo "Gitea Domain: $GITEA_DOMAIN" echo "Web Domain: $WEBSITE_DOMAIN" echo "Aktueller Host: $(current_host_info)" echo "" echo "Nginx Reverse Proxy wurde automatisch aktualisiert, falls verfuegbar." echo "Hosts-Datei wurde automatisch synchronisiert, falls verfuegbar." echo "-------------------------------------------------------" } show_status() { echo "Docker Status (gitea / website):" sudo docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}' | grep -E 'NAMES|gitea|website-website-1|website-mongodb-1' || true } case "$ACTION" in start) start_services ;; stop) stop_services ;; restart) stop_services start_services ;; status) show_status ;; *) usage exit 1 ;; esac