Konfiguracja
Wszystkie sekcje config.yml — plugin, api, cache i logging.
Plik leży w plugins/GrzybcioRynekWeb/config.yml. Po zmianach:
/grzybciorynekweb reload.
Pełny domyślny plik
plugin:
enabled: true
required-market-version: "1.0.3"
required-api-contract: 1
api:
enabled: true
host: "0.0.0.0"
port: 8765
max-limit: 100
default-limit: 24
request-timeout-seconds: 8
authentication:
enabled: true
header: "X-API-Key"
keys:
- name: "website"
key: "CHANGE_ME"
permissions:
- "listings.read"
- "categories.read"
- "stats.read"
- "history.read"
- "players.read"
cors:
enabled: true
allowed-origins:
- "https://example.com"
allowed-headers:
- "Content-Type"
- "Accept"
- "X-API-Key"
- "Authorization"
allowed-methods:
- "GET"
- "OPTIONS"
rate-limit:
enabled: true
requests-per-minute: 120
authenticated-requests-per-minute: 300
sse:
enabled: true
heartbeat-seconds: 15
max-connections: 64
cache:
enabled: true
listings-seconds: 2
stats-seconds: 10
players-seconds: 30
categories-seconds: 10
history-seconds: 10
price-history-seconds: 30
logging:
requests: false
errors: trueplugin
| Opcja | Domyślnie | Opis |
|---|---|---|
enabled | true | Główny wyłącznik. false wyłącza most bez usuwania pliku JAR |
required-market-version | "1.0.3" | Minimalna wersja GrzybcioRynku |
required-api-contract | 1 | Wersja kontraktu API rynku |
Nie obniżaj tych wartości na siłę
Sprawdzanie zgodności istnieje po to, żeby most nie próbował czytać danych ze starszego rynku, którego nie rozumie. Obniżenie wartości, żeby „przeszło", skończy się błędami w locie zamiast czytelnego komunikatu przy starcie.
api
| Opcja | Domyślnie | Opis |
|---|---|---|
enabled | true | Włącza serwer HTTP |
host | "0.0.0.0" | Interfejs nasłuchu. 127.0.0.1 = tylko lokalnie |
port | 8765 | Port serwera HTTP |
max-limit | 100 | Górny limit limit= w zapytaniach |
default-limit | 24 | Ile wyników, gdy klient nie poda limit |
request-timeout-seconds | 8 | Po tylu sekundach zapytanie jest przerywane |
host: 127.0.0.1 to najbezpieczniejszy wybór
Jeśli strona WWW stoi na tej samej maszynie co serwer, ustaw host: "127.0.0.1".
API przestanie być widoczne z sieci, a strona i tak się do niego dostanie.
api.authentication
Opisane szczegółowo w Kluczach API.
| Opcja | Domyślnie | Opis |
|---|---|---|
enabled | true | Czy endpointy danych wymagają klucza |
header | "X-API-Key" | Nazwa nagłówka z kluczem |
keys | lista | Klucze wraz z nazwą i uprawnieniami |
api.cors
| Opcja | Domyślnie | Opis |
|---|---|---|
enabled | true | Czy wysyłać nagłówki CORS |
allowed-origins | ["https://example.com"] | Lista dozwolonych domen |
allowed-headers | Content-Type, Accept, X-API-Key, Authorization | — |
allowed-methods | GET, OPTIONS | Most jest tylko do odczytu |
Nigdy nie wpisuj gwiazdki na produkcji
allowed-origins: ["*"] otwiera API dla dowolnej strony w internecie. Wypisz swoje
domeny jawnie — to kilka sekund pracy, a zamyka całą klasę problemów.
api.rate-limit
| Opcja | Domyślnie | Opis |
|---|---|---|
enabled | true | Włącza limity |
requests-per-minute | 120 | Limit dla zapytań bez klucza (per IP) |
authenticated-requests-per-minute | 300 | Limit dla zapytań z kluczem (per nazwa klucza) |
Limity liczone są osobno per IP oraz per nazwa klucza API. Klient dostaje nagłówki
X-RateLimit-Limit i X-RateLimit-Remaining, a po przekroczeniu 429 z Retry-After.
api.sse
| Opcja | Domyślnie | Opis |
|---|---|---|
enabled | true | Włącza strumień zdarzeń |
heartbeat-seconds | 15 | Co ile sekund wysyłać : keepalive |
max-connections | 64 | Maksymalna liczba jednoczesnych strumieni |
Po co heartbeat
Proxy i load balancery lubią zamykać połączenia, na których nic się nie dzieje. Heartbeat co 15 sekund utrzymuje strumień przy życiu. Jeśli stoisz za nginxem z krótkim timeoutem, zmniejsz tę wartość.
cache
Każdy typ danych ma własny TTL w sekundach. Krótszy = świeższe dane, ale więcej pracy dla serwera gry.
| Opcja | Domyślnie | Uwagi |
|---|---|---|
listings-seconds | 2 | Oferty zmieniają się najczęściej |
stats-seconds | 10 | — |
players-seconds | 30 | Profile zmieniają się rzadko |
categories-seconds | 10 | — |
history-seconds | 10 | — |
price-history-seconds | 30 | Wykresy — nie ma potrzeby częściej |
Cache chroni tickrate serwera
Bez cache każde wejście na stronę odpytywałoby serwer gry. Przy kilkudziesięciu odwiedzających naraz to zauważalne obciążenie. Domyślne wartości są rozsądnym kompromisem — nie ma potrzeby ich obniżać, bo zmiany na żywo i tak lecą przez SSE.
logging
| Opcja | Domyślnie | Opis |
|---|---|---|
requests | false | Loguje każde zapytanie HTTP |
errors | true | Loguje błędy |
requests: true włączaj tylko na czas diagnozowania. Przy ruchu ze strony potrafi
zalać latest.log w kilka minut.
Przykładowa konfiguracja produkcyjna
Strona i serwer na tej samej maszynie:
api:
host: "127.0.0.1"
port: 8765
authentication:
enabled: true
keys:
- name: "website"
key: "dlugi-losowy-klucz-wygenerowany-lokalnie"
permissions:
- "listings.read"
- "categories.read"
- "stats.read"
- "history.read"
- "players.read"
cors:
enabled: true
allowed-origins:
- "https://rynek.twojadomena.pl"
logging:
requests: false
errors: true