Grzybcio Wiki
Marketplace website

Hosting

Własny serwer, reverse proxy z HTTPS, oraz co zmienić przy wdrożeniu na Vercelu.

Wariant zalecany — własny serwer

Strona i serwer Minecraft na tej samej maszynie to najprostszy i najbezpieczniejszy układ:

Internet
   │  :443 HTTPS
   ▼
nginx / Caddy                  ← certyfikat, reverse proxy
   │  :3000
   ▼
Next.js (ta strona)
   │  127.0.0.1:8765           ← ruch nie opuszcza maszyny
   ▼
GrzybcioRynekWeb

Zalety:

  • port 8765 nie musi być otwarty na świat,
  • klucz API nie przechodzi przez sieć publiczną,
  • SSE działa bez ograniczeń.

W takim układzie w config.yml mostu ustaw:

api:
  host: "127.0.0.1"

Reverse proxy z HTTPS

nginx

server {
  listen 443 ssl http2;
  server_name rynek.twojadomena.pl;

  ssl_certificate     /etc/letsencrypt/live/rynek.twojadomena.pl/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/rynek.twojadomena.pl/privkey.pem;

  location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Host              $host;
    proxy_set_header X-Real-IP         $remote_addr;
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    # Bez tego SSE nie działa
    proxy_buffering off;
    proxy_cache off;
    proxy_read_timeout 3600s;
  }
}

proxy_buffering off to nie jest opcja

Nginx domyślnie buforuje odpowiedzi, czyli czeka, aż serwer skończy odpowiadać. Strumień SSE nigdy nie „kończy się", więc bez wyłączenia buforowania aktualizacje na żywo po prostu nie dochodzą — i wygląda to jak błąd strony.

Caddy

Caddy sam załatwia certyfikat i domyślnie nie buforuje:

rynek.twojadomena.pl {
  reverse_proxy 127.0.0.1:3000
}

Vercel i inne hostingi serverless

Da się, ale z jednym ustępstwem.

SSE trzeba wyłączyć

Funkcje serverless mają limit czasu wykonania. Strumień SSE, który ma trwać godzinami, zostanie ucięty. Na Vercelu ustaw:

NEXT_PUBLIC_MARKET_SSE=false
NEXT_PUBLIC_MARKET_POLL_MS=15000

Dodatkowo, przy hostingu poza twoją maszyną:

Most musi być dostępny z internetu

MARKET_API_URL nie może wskazywać na 127.0.0.1 — Vercel nie ma dostępu do twojego localhosta. Potrzebujesz publicznego adresu i otwartego portu.

Postaw most za HTTPS

Ruch z kluczem API poleci przez internet. Wystaw most za reverse proxy z certyfikatem, zamiast otwierać goły port 8765.

Ustaw zmienne w panelu Vercela

MARKET_API_KEY wpisz jako zmienną środowiskową projektu, nie w repozytorium.

Uważaj na limity zapytań

Przy pollingu co 15 sekund i większym ruchu limit 300 zapytań na minutę kończy się szybciej niż przy SSE. W razie potrzeby podnieś authenticated-requests-per-minute w konfiguracji mostu.

Firewall

PortOtwierać na świat?
443 (HTTPS)Tak
80 (HTTP → przekierowanie)Tak
3000 (Next.js)Nie — tylko przez reverse proxy
8765 (most)Nie, chyba że strona stoi na innej maszynie
25565 (Minecraft)Tak, jak zwykle

Aktualizacja strony

git pull
npm install
npm run build
pm2 restart rynek

Monitoring

Najprostszy sensowny zestaw:

Co sprawdzaćJak
Czy most żyjeGET /api/v1/health — bez klucza, nie obciąża serwera gry
Czy strona odpowiadaGET / na domenie strony
Czy certyfikat nie wygasaAlert z Let's Encrypt albo zewnętrzny monitor

Nie monitoruj endpointów z danymi

Ustawienie monitora na /api/v1/listings co minutę zjada limit zapytań i niepotrzebnie odpytuje serwer gry. Od tego jest /api/v1/health.

On this page