#!/usr/bin/env bash set -euo pipefail if [[ "${EUID}" -eq 0 ]]; then echo "Run this script as a regular sudo-capable user, not root." exit 1 fi echo "[1/6] Updating apt package index..." sudo apt-get update -y echo "[2/6] Installing required Ubuntu packages..." sudo apt-get install -y ca-certificates curl gnupg lsb-release make git if ! command -v docker >/dev/null 2>&1; then echo "[3/6] Installing Docker Engine..." sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null sudo apt-get update -y sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin else echo "[3/6] Docker already installed, skipping." fi echo "[4/6] Ensuring current user can run Docker..." sudo usermod -aG docker "$USER" echo "[5/6] Initializing YakPanel environment file..." cd "$(dirname "$0")/.." cp -n .env.example .env || true bash "$(dirname "$0")/ensure-env-ports.sh" echo "[6/6] Starting YakPanel dev stack..." # Use scripts/docker-compose.sh so compose works in this shell even when docker group # was just added (usermod does not apply until a new login unless we use sg docker). bash "$(dirname "$0")/docker-compose.sh" up -d --build bash "$(dirname "$0")/docker-compose.sh" run --rm db-migrate echo echo "YakPanel dev stack started." dotenv_get() { grep -E "^${1}=" .env 2>/dev/null | tail -1 | cut -d= -f2- | tr -d '\r'; } _API="$(dotenv_get API_PORT)" _PG="$(dotenv_get POSTGRES_PORT)" _RD="$(dotenv_get REDIS_PORT)" _NATS_MON="$(dotenv_get NATS_MONITOR_PORT)" _MINIO_C="$(dotenv_get MINIO_CONSOLE_PORT)" _PANEL="$(dotenv_get PANEL_UI_PORT)" _PROM="$(dotenv_get PROMETHEUS_PORT)" _GRAF="$(dotenv_get GRAFANA_PORT)" echo "Web control panel: http://localhost:${_PANEL}/ (login: admin / admin — change after first sign-in)" echo "API (scaffold): http://localhost:${_API}/health" echo "Panel API (proxied): http://localhost:${_PANEL}/api/health" echo "PostgreSQL: localhost:${_PG}" echo "Redis: localhost:${_RD}" echo "NATS monitor: http://localhost:${_NATS_MON}" echo "MinIO console: http://localhost:${_MINIO_C}" echo "Prometheus: http://localhost:${_PROM}" echo "Grafana: http://localhost:${_GRAF} (admin user from .env)" echo "(Ports come from .env; defaults avoid system PostgreSQL/Redis on 5432/6379.)" echo echo "Docker group is configured; if a future terminal still cannot run docker, log out and back in once."