Grzybcio Wiki
GrzybcioRynekWeb

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

plugins/GrzybcioRynekWeb/config.yml
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: true

plugin

OpcjaDomyślnieOpis
enabledtrueGłówny wyłącznik. false wyłącza most bez usuwania pliku JAR
required-market-version"1.0.3"Minimalna wersja GrzybcioRynku
required-api-contract1Wersja 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

OpcjaDomyślnieOpis
enabledtrueWłącza serwer HTTP
host"0.0.0.0"Interfejs nasłuchu. 127.0.0.1 = tylko lokalnie
port8765Port serwera HTTP
max-limit100Górny limit limit= w zapytaniach
default-limit24Ile wyników, gdy klient nie poda limit
request-timeout-seconds8Po 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.

OpcjaDomyślnieOpis
enabledtrueCzy endpointy danych wymagają klucza
header"X-API-Key"Nazwa nagłówka z kluczem
keyslistaKlucze wraz z nazwą i uprawnieniami

api.cors

OpcjaDomyślnieOpis
enabledtrueCzy wysyłać nagłówki CORS
allowed-origins["https://example.com"]Lista dozwolonych domen
allowed-headersContent-Type, Accept, X-API-Key, Authorization—
allowed-methodsGET, OPTIONSMost 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

OpcjaDomyślnieOpis
enabledtrueWłącza limity
requests-per-minute120Limit dla zapytań bez klucza (per IP)
authenticated-requests-per-minute300Limit 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

OpcjaDomyślnieOpis
enabledtrueWłącza strumień zdarzeń
heartbeat-seconds15Co ile sekund wysyłać : keepalive
max-connections64Maksymalna 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.

OpcjaDomyślnieUwagi
listings-seconds2Oferty zmieniają się najczęściej
stats-seconds10—
players-seconds30Profile zmieniają się rzadko
categories-seconds10—
history-seconds10—
price-history-seconds30Wykresy — 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

OpcjaDomyślnieOpis
requestsfalseLoguje każde zapytanie HTTP
errorstrueLoguje 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

On this page