#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # ------------------------------------------------------------------ # Load config # ------------------------------------------------------------------ if [ ! -f "$SCRIPT_DIR/.env" ]; then echo "ERROR: $SCRIPT_DIR/.env not found. Copy .env.example and fill in values." exit 1 fi source "$SCRIPT_DIR/.env" DATA_ROOT="${DATA_ROOT:-/opt/docker-data}" echo "==> VPS info:" cat /etc/os-release echo "" # ------------------------------------------------------------------ # Install Docker if not present # ------------------------------------------------------------------ if ! command -v docker &>/dev/null; then echo "==> Installing Docker..." curl -fsSL https://get.docker.com | sh systemctl enable --now docker echo "==> Docker installed." else echo "==> Docker already installed: $(docker --version)" fi # Ensure docker compose plugin is available if ! docker compose version &>/dev/null; then echo "ERROR: docker compose plugin not found. Install it manually." exit 1 fi # ------------------------------------------------------------------ # Create shared Docker network # ------------------------------------------------------------------ if ! docker network inspect proxy &>/dev/null 2>&1; then echo "==> Creating 'proxy' Docker network..." docker network create proxy else echo "==> 'proxy' network already exists." fi # ------------------------------------------------------------------ # Create data directories # ------------------------------------------------------------------ echo "==> Creating data directories under $DATA_ROOT..." mkdir -p "$DATA_ROOT"/{caddy/data,caddy/config} mkdir -p "$DATA_ROOT"/{nextcloud/html,nextcloud/data,nextcloud/db} mkdir -p "$DATA_ROOT"/{gitea/data,gitea/config} mkdir -p /opt/backups # ------------------------------------------------------------------ # Check .env files exist for each service # ------------------------------------------------------------------ for svc in nextcloud gitea monitoring; do if [ ! -f "$SCRIPT_DIR/$svc/.env" ]; then echo "WARNING: $svc/.env not found. Copy $svc/.env.example and fill in values." fi done # ------------------------------------------------------------------ # Start stacks in order # ------------------------------------------------------------------ echo "==> Starting Caddy..." docker compose -f "$SCRIPT_DIR/caddy/docker-compose.yml" --env-file "$SCRIPT_DIR/.env" up -d echo "==> Starting Nextcloud..." docker compose -f "$SCRIPT_DIR/nextcloud/docker-compose.yml" --env-file "$SCRIPT_DIR/.env" up -d echo "==> Starting Gitea..." docker compose -f "$SCRIPT_DIR/gitea/docker-compose.yml" --env-file "$SCRIPT_DIR/.env" up -d echo "==> Starting Monitoring..." docker compose -f "$SCRIPT_DIR/monitoring/docker-compose.yml" --env-file "$SCRIPT_DIR/.env" up -d echo "" echo "==> All services started. Verify with: docker ps" echo "==> DNS A records required:" echo " nextcloud.t-gstone.de -> " echo " git.t-gstone.de -> "