Розгортання та HTTPS

2 хв читання

Розгортання та HTTPS

PgArachne створений, щоб добре виконувати одну роботу: API-шлюз. Для SSL/TLS (HTTPS), безпеки заголовків та публічної маршрутизації вам слід розмістити перед ним зворотний проксі.

Варіант A: Caddy Server

Найкраще для: Сучасних продакшн-розгортань, простоти використання.

Caddy — єдиний веб-сервер, який отримує та автоматично оновлює SSL-сертифікати (Let’s Encrypt) за умовчанням. Він потребує майже нульового налаштування.

# Caddyfile
example.com {
    reverse_proxy localhost:8080
}

Варіант B: Nginx

Найкраще для: Корпоративних середовищ, складної маршрутизації.

Nginx — галузевий стандарт для високопродуктивного балансування навантаження. Використовуйте це, якщо у вас уже є інфраструктура Nginx. Вам доведеться керувати Certbot вручну.

server {
    server_name example.com;
    location / {
        proxy_pass http://localhost:8080;
    }
}

Варіант C: Ngrok

Найкраще для: Локальної розробки, демонстрацій, тестування вебхуків.

Ngrok створює безпечний тунель з публічного інтернету безпосередньо до вашого ноутбука без налаштування фаєрволів. Ідеально підходить для миттєвої демонстрації роботи колегам.

./ngrok http 8080

Контрольний список для продакшну

  • Завершуйте TLS на зворотному проксі та передавайте X-Forwarded-Proto і X-Forwarded-For.
  • Встановіть у PgArachne TRUSTED_PROXIES на діапазони IP/CIDR вашого проксі.
  • Вимкніть буферизацію для маршрутів SSE та зробіть тайм-аути читання достатньо довгими для потокової передачі.
  • Надавайте доступ до метрик лише внутрішньо (за умовчанням 127.0.0.1:9090) і опитуйте (scrape) з вашої мережі моніторингу.

Приклад посилення захисту Nginx (SSE + forwarded-заголовки)

location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

location /sse/ {
    proxy_pass http://127.0.0.1:8080;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_buffering off;
    proxy_read_timeout 1h;
}