#!/bin/bash # Provision a fresh dedicated search box: Node 22 + Meilisearch + api + crawler. # Secrets passed via env: MEILI_KEY, ANTHROPIC_API_KEY. Idempotent-ish. set -e : "${MEILI_KEY:?set MEILI_KEY}" "${ANTHROPIC_API_KEY:?set ANTHROPIC_API_KEY}" echo "=== packages ===" export DEBIAN_FRONTEND=noninteractive apt-get update -qq apt-get install -y -qq git curl ca-certificates >/dev/null echo "=== Node 22 ===" if ! command -v node >/dev/null || [ "$(node -v | cut -c2-3)" -lt 22 ]; then curl -fsSL https://deb.nodesource.com/setup_22.x | bash - >/dev/null 2>&1 apt-get install -y -qq nodejs >/dev/null fi node -v echo "=== clone repo ===" rm -rf /opt/search-engine git clone --depth 1 https://github.com/kingomarwashere/search-engine /opt/search-engine >/dev/null 2>&1 cd /opt/search-engine/api && npm install --omit=dev --no-audit --no-fund >/dev/null 2>&1 cd /opt/search-engine/crawler && npm install --no-audit --no-fund >/dev/null 2>&1 echo "deps installed" echo "=== Meilisearch ===" if [ ! -x /usr/local/bin/meilisearch ]; then curl -sL https://install.meilisearch.com | sh >/dev/null 2>&1 mv ./meilisearch /usr/local/bin/meilisearch fi mkdir -p /var/lib/meilisearch/data cat > /etc/systemd/system/meilisearch.service < /etc/systemd/system/search-api.service < /etc/systemd/system/search-crawler.service < /usr/local/bin/crawl-diskguard.sh <<'EOF' #!/bin/sh FREE=$(df --output=avail / | tail -1 | tr -d ' ') if [ "$FREE" -lt 5000000 ]; then systemctl stop search-crawler curl -s -d "RADICAL_SEARCH crawler STOPPED on search-engine box: disk free ${FREE}KB <5GB" ntfy.sh/radicalparty-vm-alerts-x7k2q9 >/dev/null 2>&1 fi EOF chmod +x /usr/local/bin/crawl-diskguard.sh ( crontab -l 2>/dev/null | grep -v crawl-diskguard; echo "*/5 * * * * /usr/local/bin/crawl-diskguard.sh" ) | crontab - echo "=== start meili + api ===" systemctl daemon-reload systemctl enable --now meilisearch search-api >/dev/null 2>&1 sleep 4 systemctl is-active meilisearch search-api echo "BOOTSTRAP DONE"