#!/bin/bash # ============================================================ # ZEMA BOOTSTRAP for vps-6 (one-liner via VNC, root) # Что делает: 1) SSH-ключ Зёмы 2) PostgreSQL+n8n (docker) # 3) nginx vhost + TLS 4) отчёт # Идемпотентен: повторный запуск ничего не ломает. # ============================================================ set -u exec 2>&1 echo "=== [1/4] SSH-ключ Зёмы ===" mkdir -p /root/.ssh && chmod 700 /root/.ssh && touch /root/.ssh/authorized_keys && chmod 600 /root/.ssh/authorized_keys PUB='ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJcGXJL16eHdI2HhmCiCdc7PYJaCYQmVVodwZwHCM2Pt zema@phoenix-sandbox-0709' if grep -qxF "$PUB" /root/.ssh/authorized_keys; then echo " ключ уже на месте" else echo "$PUB" >> /root/.ssh/authorized_keys && echo " ключ ДОБАВЛЕН" fi echo "=== [2/4] Стек: PostgreSQL + n8n (/opt/stack) ===" mkdir -p /opt/stack && cd /opt/stack if [ ! -f .env ]; then PG_PW=$(head -c 24 /dev/urandom | base64 | tr -d '/+=' | head -c 28) N8N_KEY=$(head -c 30 /dev/urandom | base64 | tr -d '/+=' | head -c 40) umask 177 cat > .env < docker-compose.yml </dev/null 2>&1; then DC="docker compose"; else DC="docker-compose"; fi echo " поднимаю стек ($DC)..." $DC up -d $DC ps echo "=== [3/4] nginx + TLS: n8n.4i-tech.ru ===" if [ ! -f /etc/nginx/sites-available/n8n.4i-tech.ru ]; then cat > /etc/nginx/sites-available/n8n.4i-tech.ru <<'EOF' server { listen 80; server_name n8n.4i-tech.ru; location / { proxy_pass http://127.0.0.1:5678; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; client_max_body_size 32m; } } EOF ln -sf /etc/nginx/sites-available/n8n.4i-tech.ru /etc/nginx/sites-enabled/n8n.4i-tech.ru echo " vhost записан" fi nginx -t 2>&1 | tail -1 && systemctl reload nginx && echo " nginx перезагружен" if [ ! -f /etc/letsencrypt/live/n8n.4i-tech.ru/fullchain.pem ]; then echo " запрашиваю TLS-сертификат..." certbot --nginx -d n8n.4i-tech.ru -m ataman@4i-tech.ru --agree-tos --non-interactive --redirect 2>&1 | tail -3 || echo " !! certbot не прошёл (DNS/лимит) — HTTP-vhost жив, повтори позже" else echo " серт уже есть" fi echo "=== [4/4] Отчёт ===" sleep 5 echo "--- контейнеры:" docker ps --filter name=stack- --format "{{.Names}}: {{.Status}}" echo "--- n8n локально:" curl -s -o /dev/null -w " http://127.0.0.1:5678 -> %{http_code}\n" --max-time 8 http://127.0.0.1:5678/ || echo " n8n ещё поднимается" echo "--- снаружи:" curl -s -o /dev/null -w " https://n8n.4i-tech.ru -> %{http_code}\n" --max-time 8 https://n8n.4i-tech.ru/ 2>/dev/null || echo " (DNS/TLS ещё не готов — Зёма доведёт)" echo "=== BOOTSTRAP ЗАВЕРШЁН. Зёма, заходи. ==="