Publication date:

10/28/24

Soketi jako darmowa alternatywa dla Pusher'a

Jak uruchomić Soketi jako darmową alternatywę dla Pusher'a?

Jeśli szukasz wydajnego i darmowego rozwiązania WebSocket dla swojej aplikacji, Soketi może być idealną alternatywą dla płatnego Pushera. Soketi to open-source’owy serwer WebSocket w pełni kompatybilny z API Pushera, co pozwala na łatwe przejście i uniknięcie wysokich kosztów. W tym artykule pokażemy ci jak skonfigurować Soketi z Docker Compose. Zakładam, że masz już skonfigurowane reverse proxy z obsługą SSL (np. Nginx z automatycznym odnawianiem certyfikatów SSL przez Let’s Encrypt).

Dlaczego warto wybrać Soketi?

Soketi jest zaprojektowany jako lekka alternatywa dla Pushera, a jego kluczowe zalety to:

  • Open-source: Pełna kontrola nad środowiskiem i brak opłat licencyjnych.

  • Zgodność z API Pushera: Minimalne zmiany w aplikacji podczas migracji.

  • Skalowalność: Możliwość obsługi dużego ruchu dzięki pracy w klastrach.

Wymagania wstępne

Przed przystąpieniem do konfiguracji upewnij się, że masz:

  • Docker i Docker Compose,

  • Reverse proxy z certyfikatem SSL skonfigurowanym pod Twój domenowy adres.

Tworzymy plik .env

Dodaj plik .env do katalogu projektu, aby łatwiej zarządzać zmiennymi środowiskowymi, takimi jak domena projektu i klucze aplikacji:

PROJECT_DOMAIN=your-domain.com
APP_ID=1
APP_KEY=your-app-key
APP_SECRET=your-app-secret
Konfiguracja pliku Docker Compose

Poniżej znajduje się konfiguracja docker-compose.yml, która uruchomi Soketi oraz dostosuje środowisko do pracy z reverse proxy:

services:
  soketi:
    image: 'quay.io/soketi/soketi:latest-16-alpine'
    container_name: sockets
    environment:
      VIRTUAL_HOST: ${PROJECT_DOMAIN}
      LETSENCRYPT_HOST: ${PROJECT_DOMAIN}
      CERT_NAME: ${PROJECT_DOMAIN}
      VIRTUAL_PORT: 6001
      SOKETI_DEFAULT_APP_ID: ${APP_ID}
      SOKETI_DEFAULT_APP_KEY: ${APP_KEY}
      SOKETI_DEFAULT_APP_SECRET: ${APP_SECRET}
      PUSHER_HOST: ${PROJECT_DOMAIN}
      PUSHER_SCHEME: 'https'
    ports:
      - '6001'
      - '9601'
networks:
  default:
    name: myapp-network
    external: true
Wyjaśnienie konfiguracji
  • Zmienne środowiskowe: Używamy ${APP_ID}, ${APP_KEY}, ${APP_SECRET} oraz ${PROJECT_DOMAIN}, aby dynamicznie dostosować konfigurację do Twojego projektu.

  • Porty: Soketi będzie nasłuchiwać na porcie 6001, co jest zgodne ze standardową konfiguracją dla serwerów WebSocket.

  • Reverse Proxy: Dzięki obecnym w konfiguracji zmiennym środowiskowym (VIRTUAL_HOST i LETSENCRYPT_HOST) połączenia do Twojej aplikacji będą zabezpieczone przez certyfikaty SSL i przekierowywane przez reverse proxy.

Konfiguracja aplikacji z Soketi

Soketi jest w pełni zgodny z API Pushera, więc wystarczy, że zmienisz ustawienia klienta Pushera, np. w JavaScript:

const PusherClient = new Pusher(APP_KEY as string, {
  cluster: '1',
  forceTLS: true,
  wsHost: HOST_URL,
  enabledTransports: ['ws', 'wss'],
  channelAuthorization: {
    customHandler: async ({ channelName, socketId }, callback) => {
      try {
        const session = await getSession()

        if (!session) {
          return callback(new Error('No token found'), null)
        }

        const response = await fetch(
          ⁠ ${API_URL}/v1/auth/broadcasting/channel ⁠,
          {
            method: 'POST',
            headers: {
              'Content-Type': 'application/json',
              Authorization: ⁠ Bearer ${session.user.access_token},
            },
            body: JSON.stringify({
              channel_name: channelName,
              socket_id: socketId,
            }),
          },
        )

        const data = await response.json()

        callback(null, data)
      } catch (error) {
        callback(error as Error, null)
      }
    },
    transport: 'ajax',
    endpoint: ⁠ ${HOST_URL}/broadcasting/auth ⁠,
  },
})

Powyższa konfiguracja powinna zapewnić, że Twoja aplikacja działa dokładnie tak, jak wcześniej z Pusherem, ale bez dodatkowych kosztów.

Uruchomienie środowiska

Aby uruchomić Soketi, wykonaj w terminalu:

docker-compose up -d

Komenda uruchomi usługę w tle, a aplikacja zacznie nasłuchiwać na odpowiednich portach, gotowa do obsługi połączeń WebSocket.

Umów się na bezpłatną konsultację

Porozmawiaj z nami, a z przyjemnością oszacujemy Twój projekt bez żadnych kosztów.

Skontaktuj się z nami

HypeDev Group sp. z o.o.

ul. Jana III Sobieskiego 11/18

40-082 Katowice, Polska

+48 603 675 293

kontakt@hypedevgroup.pl

NIP: 6343019462

© HypeDev Group sp. z o.o.

Umów się na bezpłatną konsultację

Porozmawiaj z nami, a z przyjemnością oszacujemy Twój projekt bez żadnych kosztów.

Skontaktuj się z nami

HypeDev Group sp. z o.o.

ul. Jana III Sobieskiego 11/18

40-082 Katowice, Polska

+48 603 675 293

kontakt@hypedevgroup.pl

NIP: 6343019462

© HypeDev Group sp. z o.o.

Umów się na bezpłatną konsultację

Porozmawiaj z nami, a z przyjemnością oszacujemy Twój projekt bez żadnych kosztów.

Skontaktuj się z nami

HypeDev Group sp. z o.o.

ul. Jana III Sobieskiego 11/18

40-082 Katowice, Polska

+48 603 675 293

kontakt@hypedevgroup.pl

NIP: 6343019462

© HypeDev Group sp. z o.o.