86 lines
3.0 KiB
Bash
Executable File
86 lines
3.0 KiB
Bash
Executable File
#!/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 -> <VPS_IP>"
|
|
echo " git.t-gstone.de -> <VPS_IP>"
|