Розгортання та HTTPS
Розгортання та 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;
}
# SSE: /{API_PREFIX}/{database}/sse — long-lived stream, must not be buffered
location ~ ^/db/[^/]+/sse$ {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
proxy_read_timeout 1h;
}
# File downloads: /{API_PREFIX}/{database}/file — large files and ZIP archives
location ~ ^/db/[^/]+/file/?$ {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
proxy_read_timeout 300s;
}Замініть db на ваш API_PREFIX, якщо ви його змінили.
Великі завантаження (/file) за reverse proxy
- Вимкніть буферизацію відповідей (
proxy_buffering offу Nginx). Одиночний файл надсилається із заголовкомContent-Length, ZIP-архів передається потоком без нього. Якщо буферизація ввімкнена, Nginx спочатку записує всю відповідь у тимчасовий файл, що затримує початок завантаження і займає місце на диску. - Збільште тайм-аут читання (
proxy_read_timeout, за умовчанням 60 с), якщо функція бази даних, що формує файли, може працювати довше — PgArachne нічого не надсилає, доки функція не поверне всі рядки. - Не стискайте
application/zipта вже стиснені типи медіа (gzipдля ZIP лише марнує CPU). - Ліміт пам’яті: PgArachne буферизує рядки однієї відповіді в пам’яті (обмежено
FILE_MAX_BYTES, за умовчанням 64 МіБ, таFILE_MAX_ENTRIES); підберіть ліміти під очікувану кількість одночасних завантажень.client_max_body_sizeстосується лише невеликого JSON-запиту, а не завантаження. - Caddy за умовчанням передає відповіді потоком; додаткове налаштування не потрібне.