#!/usr/bin/env bash # Node-native production deploy (low disk — no Docker image build) set -euo pipefail INSTALL_DIR="${DOMAIN_SCANNER_INSTALL_DIR:-/opt/domain_web}" SERVICE_NAME="domain-scanner" NGINX_SITE="domain-scanner" APP_PORT="${DOMAIN_SCANNER_PORT:-3000}" NODE_PORT="${APP_PORT}" log() { echo "[domain-scanner-node] $*"; } install_packages() { apt-get update -qq apt-get install -y -qq nginx git curl ca-certificates >/dev/null if ! command -v node >/dev/null || [[ $(node -v | cut -d. -f1 | tr -d v) -lt 20 ]]; then curl -fsSL https://deb.nodesource.com/setup_22.x | bash - apt-get install -y -qq nodejs >/dev/null fi } setup_compose_db() { cd "${INSTALL_DIR}" if command -v docker-compose >/dev/null; then DC=docker-compose else DC="docker compose" fi $DC up -d postgres redis sleep 5 } setup_env() { if [[ ! -f "${INSTALL_DIR}/.env" ]]; then cp "${INSTALL_DIR}/.env.example" "${INSTALL_DIR}/.env" SECRET=$(openssl rand -base64 32 2>/dev/null || head -c 32 /dev/urandom | base64) cat >>"${INSTALL_DIR}/.env" <"/etc/systemd/system/${SERVICE_NAME}.service" <"/etc/nginx/sites-available/${NGINX_SITE}" </dev/null || true rm -f /etc/nginx/sites-enabled/default ln -sf "/etc/nginx/sites-available/${NGINX_SITE}" "/etc/nginx/sites-enabled/${NGINX_SITE}" nginx -t && systemctl restart nginx } if [[ "${EUID}" -ne 0 ]]; then echo "Run as root" >&2; exit 1; fi install_packages setup_env setup_compose_db build_app install_systemd install_nginx log "Done: http://$(hostname -I | awk '{print $1}')/"