#!/usr/bin/env bash set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" GREEN='\033[0;32m' CYAN='\033[0;36m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' echo -e "${CYAN}========================================${NC}" echo -e "${CYAN} THE DARK ELITE HUB - DEPLOYMENT${NC}" echo -e "${CYAN}========================================${NC}" echo if [ "$EUID" -ne 0 ]; then echo -e "${RED}Run with sudo.${NC}" exit 1 fi if [ ! -f .env ]; then echo -e "${YELLOW}No .env file found. Creating from .env.example...${NC}" cp .env.example .env if command -v openssl >/dev/null 2>&1; then SECRET=$(openssl rand -hex 32) sed -i "s|HUB_SECRET=.*|HUB_SECRET=$SECRET|" .env echo -e "${GREEN}Auto-generated HUB_SECRET in .env${NC}" fi echo echo -e "${YELLOW}You must edit .env now and set HUB_PASSWORD.${NC}" echo -e "Press ENTER after you have edited .env, or Ctrl+C to abort." read fi if grep -q "change-me-to-a-real-password\|replace-with" .env; then echo -e "${RED}.env still has placeholder values. Edit it before deploying.${NC}" exit 1 fi if ! command -v docker >/dev/null 2>&1; then echo -e "${CYAN}==> Installing Docker...${NC}" curl -fsSL https://get.docker.com | sh systemctl enable --now docker fi if ! docker compose version >/dev/null 2>&1; then echo -e "${RED}Docker Compose plugin missing. Install docker-compose-plugin and re-run.${NC}" exit 1 fi echo -e "${CYAN}==> Setting up /opt/hub from skeleton...${NC}" mkdir -p /opt/hub rsync -a --ignore-existing skel/ /opt/hub/ mkdir -p /opt/hub/caddy/data /opt/hub/caddy/config chmod -R u+rw /opt/hub if ! docker network inspect hub >/dev/null 2>&1; then echo -e "${CYAN}==> Creating hub network...${NC}" docker network create hub fi echo -e "${CYAN}==> Pulling images and starting stacks...${NC}" docker compose --env-file .env up -d echo echo -e "${CYAN}==> Waiting for services...${NC}" sleep 15 IP=$(hostname -I | awk '{print $1}') echo echo -e "${GREEN}========================================${NC}" echo -e "${GREEN} DEPLOY COMPLETE${NC}" echo -e "${GREEN}========================================${NC}" echo echo -e "Hub URL: ${CYAN}http://$IP/${NC}" echo -e "Login: ${CYAN}http://$IP/login/${NC}" echo echo -e "${YELLOW}Note: ZIMs and PDFs are EMPTY. Upload via:${NC}" echo -e " Library admin: http://$IP/library/ (top of page)" echo -e " PDF library: http://$IP/pdfs/" echo echo -e "${CYAN}========================================${NC}" echo -e "${CYAN} MAP TILES${NC}" echo -e "${CYAN}========================================${NC}" echo echo "Maps page and Overlay page require base.pmtiles." echo "Download size: ~4-25 GB depending on detail level." echo "Download time: 10 min - 1 hour." echo read -p "Download North America map tiles now? [Y/n]: " yn yn=${yn:-Y} if [[ "$yn" =~ ^[Yy]$ ]]; then bash "$SCRIPT_DIR/fetch-maps.sh" else echo echo -e "${YELLOW}Skipped.${NC}" echo -e "Run ${CYAN}$SCRIPT_DIR/fetch-maps.sh${NC} anytime to download maps later." fi echo echo -e "${GREEN}Done.${NC}"