Files
SneakyScope/sandbox.sh
2025-08-20 21:22:28 +00:00

102 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# --- CONFIG ---
SANDBOX_STORAGE="${SANDBOX_STORAGE:-./data}"
APP_URL="${APP_URL:-http://localhost:8000}"
# --- FUNCTIONS ---
prepare_storage() {
echo "[*] Checking storage path: $SANDBOX_STORAGE"
if [ ! -d "$SANDBOX_STORAGE" ]; then
echo " -> Creating $SANDBOX_STORAGE on host"
sudo mkdir -p "$SANDBOX_STORAGE"
fi
echo " -> Setting ownership to Playwright user (pwuser / UID 1000)"
sudo chown -R 1000:1000 "$SANDBOX_STORAGE"
sudo chmod -R 755 "$SANDBOX_STORAGE"
echo "[+] Storage ready."
}
start_stack() {
prepare_storage
echo "[*] Building Docker image..."
docker compose build
if [[ "${1:-}" == "-d" ]]; then
echo "[*] Starting services in detached mode..."
docker compose up -d
else
echo "[*] Starting services (attached)..."
docker compose up
fi
}
stop_stack() {
echo "[*] Stopping services..."
docker compose down
}
clean_stack() {
echo "[*] Removing containers, networks, and volumes..."
docker compose down -v --remove-orphans
}
restart_stack() {
stop_stack
echo "[*] Restarting services..."
start_stack -d
}
logs_stack() {
echo "[*] Showing logs (Ctrl+C to exit)..."
docker compose logs -f
}
status_stack() {
echo "[*] Current service status:"
docker compose ps
}
healthcheck_stack() {
echo "[*] Running health check on $APP_URL ..."
if curl -fsS "$APP_URL" > /dev/null; then
echo "[+] Service is healthy and reachable."
else
echo "[!] Service is NOT reachable at $APP_URL"
exit 1
fi
}
# --- MAIN ---
case "${1:-}" in
start)
shift
start_stack "$@"
;;
stop)
stop_stack
;;
restart)
restart_stack
;;
clean)
clean_stack
;;
logs)
logs_stack
;;
status)
status_stack
;;
healthcheck)
healthcheck_stack
;;
*)
echo "Usage: $0 {start [-d for detached mode] | stop | restart | clean | logs | status | healthcheck}"
exit 1
;;
esac