Конфігурація

4 хв читання

Конфігурація

PgArachne завантажує конфігурацію зі змінних середовища або з файлу.

Примітка: schema.sql намагається створити роль pgarachne_admin та надати її ролі pgarachne. Якщо ви запускаєте скрипт без прав суперкористувача, створення ролі буде пропущено. За потреби створіть роль та надайте права вручну.
Проксі-користувач (DB_USER) повинен бути членом pgarachne та pgarachne_admin, щоб перевіряти та видавати API-токени.
Примітка щодо безпеки: PgArachne не обробляє паролі бази даних у конфігураційному файлі. Для автентифікації покладайтеся на стандартний механізм файлу PostgreSQL .pgpass (або системну змінну PGPASSWORD).
Порада: Якщо ви запускаєте PgArachne за зворотним проксі, встановіть TRUSTED_PROXIES, щоб IP-адреси клієнтів визначалися коректно і обмеження частоти запитів не можна було обійти.
Порядок пошуку: Якщо конфігураційний файл не вказано через CLI, пошук відбувається в такому порядку:
  1. Поточний каталог: ./pgarachne.env (усі ОС)
  2. Конфігурація користувача:
    • Linux/macOS: ~/.config/pgarachne/pgarachne.env
    • Windows: %USERPROFILE%\.config\pgarachne\pgarachne.env
  3. Системна конфігурація: /etc/pgarachne/pgarachne.env (лише Linux/macOS)

Приклад мінімальної конфігурації

Це все, що потрібно для початку роботи:

DB_HOST=localhost
DB_PORT=5432
DB_USER=pgarachne
JWT_SECRET=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

Обов’язкові змінні: DB_HOST, DB_PORT, DB_USER, JWT_SECRET (мінімум 32 байти; згенеруйте за допомогою openssl rand -hex 32).

Швидкий контрольний список перевірки

  • JWT_SECRET довгий, випадковий і не використовується повторно в різних середовищах.
  • DB_USER може перемикатися лише на очікувані ролі (перевірте права членства в ролях).
  • TRUSTED_PROXIES встановлено, якщо ви працюєте за зворотним проксі.
  • LOGIN_RATE_LIMIT увімкнено для розгортань, доступних з інтернету.
  • METRICS_LISTEN_ADDR є приватним (наприклад, 127.0.0.1:9090).

Довідник конфігурації

ЗміннаОбов’язковаОпис
Підключення до бази даних
DB_HOSTАдреса сервера PostgreSQL (наприклад, localhost).
DB_PORTПорт бази даних.
DB_USERКористувач бази даних, під яким підключається PgArachne.
DB_SSLMODEРежим SSL PostgreSQL. За умовчанням: require. Встановлюйте disable явно лише для локальної розробки з PostgreSQL без TLS.
DB_SSLROOTCERTШлях до кореневого сертифіката CA (PEM).
DB_SSLCERTШлях до клієнтського сертифіката (PEM).
DB_SSLKEYШлях до приватного ключа клієнта (PEM).
HTTP-сервер
HTTP_PORTПорт для прослуховування. За умовчанням: 8080.
API_PREFIXПерший сегмент шляху URL для всіх ендпоінтів бази даних (/jsonrpc, /sse, /mcp). За умовчанням: db, що дає маршрути типу /db/:database/jsonrpc. Дозволені лише букви, цифри, дефіси та підкреслення.
PID_FILEШлях до PID-файлу демона, що використовується для -start/-stop. За умовчанням: кеш-каталог користувача ОС (запасний варіант: тимчасовий каталог).
ALLOWED_ORIGINSНалаштування CORS. Список дозволених джерел, розділених комами (наприклад, https://myapp.com). За умовчанням: не встановлено — міждоменні запити з браузера вимкнено. Встановіть * явно, щоб дозволити будь-яке джерело.
STATIC_FILES_PATHАбсолютний шлях для надання статичних файлів (Explorer/Frontend).
Безпека (JWT)
JWT_SECRETДовгий випадковий рядок, що використовується для підписання токенів сесії. Мінімум 32 байти; згенеруйте за допомогою openssl rand -hex 32.
JWT_EXPIRY_HOURSТермін дії сесії в годинах. За умовчанням: 8.
JWT_ISSUERЯкщо встановлено, записується в claim iss під час видачі і повинно точно збігатися під час перевірки. Залиште порожнім, щоб пропустити перевірку видавця.
JWT_AUDIENCEЯкщо встановлено, записується в claim aud під час видачі і повинно збігатися під час перевірки. Залиште порожнім, щоб пропустити перевірку аудиторії.
JWT_LEEWAYДопуск на розсинхронізацію годинників для перевірки exp/nbf/iat (наприклад, 30s). За умовчанням: 30s.
LOGIN_RATE_LIMITМаксимальна кількість спроб входу за одне вікно. За умовчанням: 5. Встановіть 0, щоб вимкнути.
LOGIN_RATE_LIMIT_PER_IPМаксимальна кількість спроб входу на IP-адресу клієнта за всіма іменами користувачів, тож зміна імен користувачів не дозволяє обійти обмеження. За умовчанням: 5× LOGIN_RATE_LIMIT. Встановіть 0, щоб вимкнути.
LOGIN_RATE_WINDOWТривалість вікна обмеження частоти. За умовчанням: 1m.
Обмеження частоти входу діє в межах одного екземпляра (у пам’яті). У розгортаннях з кількома екземплярами використовуйте спільний лімітер, якщо потрібне глобальне застосування.
TRUSTED_PROXIESДовірені IP-адреси/CIDR проксі для обробки X-Forwarded-For. Розділені комами. Якщо порожньо, forwarded-заголовки ігноруються, а IP клієнта береться з прямого з’єднання.
MAX_REQUEST_BYTESМаксимальний розмір тіла запиту в байтах. За умовчанням: 2097152.
MCP_SQL_ERROR_DETAILВключати необроблене повідомлення про помилку PostgreSQL у помилках інструментів MCP. Детальні помилки допомагають LLM-агентам самостійно виправлятися, але можуть розкрити деталі схеми (назви таблиць та обмежень) автентифікованим викликачам. За умовчанням: false.
DIRECT_POOL_LIMITМаксимальна кількість окремих пулів з’єднань облікових даних Basic Auth. За умовчанням: 1000.
METRICS_ENABLEDУвімкнути виділений ендпоінт метрик. За умовчанням: true.
METRICS_LISTEN_ADDRАдреса слухача метрик (host:port). За умовчанням: 127.0.0.1:9090.
SSE_MAX_CHANNELSМаксимальна кількість каналів на одне з’єднання SSE. За умовчанням: 8.
SSE_MAX_CLIENTSМаксимальна кількість одночасних клієнтів SSE на базу даних. За умовчанням: 1000.
SSE_CLIENT_BUFFERРозмір буфера SSE на одного клієнта (кількість повідомлень). За умовчанням: 64.
SSE_SEND_TIMEOUTМаксимальний час очікування під час надсилання повільному клієнту. За умовчанням: 2s.
SSE_HEARTBEATІнтервал heartbeat для з’єднань SSE. За умовчанням: 20s.
SSE_IDLE_TIMEOUTТайм-аут неактивності без сповіщень. За умовчанням: 90s.
Журналювання
LOG_LEVELРівень деталізації: DEBUG, INFO, WARN, ERROR. За умовчанням: INFO.
LOG_OUTPUTКуди записувати журнали: stdout або шлях до файлу.

Обов’язково   Необов’язково

Поведінка безпеки: запити без дійсного заголовка Authorization відхиляються ще до відкриття з’єднання з базою даних.

Запустіть сервер:

./pgarachne -config .env

Дивіться також