Files
2026-06-30 18:30:24 +00:00

105 lines
3.0 KiB
Bash
Executable File

#!/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}"