105 lines
3.0 KiB
Bash
Executable File
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}"
|