From ab5c0084b241002b5abf389f0dc77c83185d9ca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9=20=D0=91=D0=BE=D0=B1?= =?UTF-8?q?=D1=8B=D1=80=D0=B5=D0=B2?= Date: Sun, 24 May 2026 22:22:41 +0300 Subject: [PATCH] fix: node-native VPS deploy when disk is low Co-authored-by: Cursor --- docker-compose.yml | 4 ++ install.sh | 26 +++++++--- scripts/install-node.sh | 109 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 133 insertions(+), 6 deletions(-) create mode 100644 scripts/install-node.sh diff --git a/docker-compose.yml b/docker-compose.yml index 3433822..d988548 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,6 +19,8 @@ services: postgres: image: postgres:16-alpine + ports: + - "127.0.0.1:5432:5432" environment: POSTGRES_USER: scanner POSTGRES_PASSWORD: scanner @@ -34,6 +36,8 @@ services: redis: image: redis:7-alpine + ports: + - "127.0.0.1:6379:6379" command: redis-server --appendonly yes volumes: - redis_data:/data diff --git a/install.sh b/install.sh index 7479cdd..33e1aa3 100755 --- a/install.sh +++ b/install.sh @@ -4,7 +4,7 @@ set -euo pipefail REPO_URL="${DOMAIN_SCANNER_REPO_URL:-https://github.com/andrey271192/Domain_web.git}" BRANCH="${DOMAIN_SCANNER_BRANCH:-main}" -INSTALL_DIR="${DOMAIN_SCANNER_INSTALL_DIR:-/opt/domain-scanner}" +INSTALL_DIR="${DOMAIN_SCANNER_INSTALL_DIR:-/opt/domain_web}" SERVICE_NAME="domain-scanner" NGINX_SITE="domain-scanner" APP_PORT="${DOMAIN_SCANNER_PORT:-3000}" @@ -34,8 +34,9 @@ install_docker() { fi log "Installing Docker..." curl -fsSL https://get.docker.com | sh - systemctl enable docker - systemctl start docker + systemctl enable docker.socket docker.service + systemctl start docker.socket + systemctl start docker.service } stop_legacy() { @@ -76,15 +77,28 @@ setup_env() { } deploy_compose() { - log "Building and starting Docker stack..." cd "${INSTALL_DIR}" export PORT="${APP_PORT}" + AVAIL_KB=$(df -k "${INSTALL_DIR}" | awk 'NR==2 {print $4}') + if [[ "${AVAIL_KB:-0}" -lt 2500000 ]]; then + log "Low disk — Node-native deploy..." + bash "${INSTALL_DIR}/scripts/install-node.sh" + return + fi + log "Building Docker stack..." if docker compose version >/dev/null 2>&1; then - docker compose build --pull + if ! docker compose build 2>&1; then + log "Docker build failed — Node-native deploy..." + bash "${INSTALL_DIR}/scripts/install-node.sh" + return + fi docker compose up -d docker compose exec -T web npx prisma db push else - docker-compose build --pull + if ! docker-compose build 2>&1; then + bash "${INSTALL_DIR}/scripts/install-node.sh" + return + fi docker-compose up -d docker-compose exec -T web npx prisma db push fi diff --git a/scripts/install-node.sh b/scripts/install-node.sh new file mode 100644 index 0000000..c84989c --- /dev/null +++ b/scripts/install-node.sh @@ -0,0 +1,109 @@ +#!/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 + 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}')/"