2026-04-07 20:29:49 +05:30
|
|
|
|
#!/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
|
2026-04-07 20:57:48 +05:30
|
|
|
|
bash "$(dirname "$0")/ensure-env-ports.sh"
|
2026-04-07 20:29:49 +05:30
|
|
|
|
|
|
|
|
|
|
echo "[6/6] Starting YakPanel dev stack..."
|
2026-04-07 20:53:04 +05:30
|
|
|
|
# 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
|
2026-04-07 20:29:49 +05:30
|
|
|
|
|
|
|
|
|
|
echo
|
|
|
|
|
|
echo "YakPanel dev stack started."
|
2026-04-07 20:57:48 +05:30
|
|
|
|
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)"
|
2026-04-07 21:35:20 +05:30
|
|
|
|
_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 <20> change after first sign-in)"
|
|
|
|
|
|
echo "API (scaffold): http://localhost:${_API}/health"
|
|
|
|
|
|
echo "Panel API (proxied): http://localhost:${_PANEL}/api/health"
|
2026-04-07 20:57:48 +05:30
|
|
|
|
echo "PostgreSQL: localhost:${_PG}"
|
|
|
|
|
|
echo "Redis: localhost:${_RD}"
|
|
|
|
|
|
echo "NATS monitor: http://localhost:${_NATS_MON}"
|
|
|
|
|
|
echo "MinIO console: http://localhost:${_MINIO_C}"
|
2026-04-07 21:35:20 +05:30
|
|
|
|
echo "Prometheus: http://localhost:${_PROM}"
|
|
|
|
|
|
echo "Grafana: http://localhost:${_GRAF} (admin user from .env)"
|
2026-04-07 20:57:48 +05:30
|
|
|
|
echo "(Ports come from .env; defaults avoid system PostgreSQL/Redis on 5432/6379.)"
|
2026-04-07 20:29:49 +05:30
|
|
|
|
echo
|
2026-04-07 20:53:04 +05:30
|
|
|
|
echo "Docker group is configured; if a future terminal still cannot run docker, log out and back in once."
|