Files
nextcloud-selfhosted/scripts/deploy.sh

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>"