WebSocket com Ratchet em PHP 8.2 usando Docker e Painel ICP

WebSocket com Ratchet em PHP 8.2 usando Docker e Painel ICP

Neste tutorial você aprenderá a subir um servidor WebSocket com Ratchet em PHP, rodando em Docker, exposto por domínio próprio e testado diretamente pelo terminal.

Neste tutorial, você verá:

✔️ Baixar o docker oficial do Ratchet
✔️ Configurar um domínio com SSL usando o painel ICP
✔️ Teste simples de uso

📌 Pré-requisitos

  • Docker instalado
  • Domínio configurado (ex: ratchet.panel-icp.integrator.host)
  • Terminal ssh para teste (opcional)

📌 Estrutura do nosso projeto

ratchet-webSocket/
├── ChatServer.php
├── server.php
├── composer.json

📌 Passo 1 - Criar o nosso arquivo ChatServer.php

<?php
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;

class ChatServer implements MessageComponentInterface {
    protected $clients;

    public function __construct() {
        $this->clients = new \SplObjectStorage;
        echo "[ChatServer] iniciado\n";
    }

    public function onOpen(ConnectionInterface $conn) {
        $this->clients->attach($conn);
        $conn->send(json_encode([
            'type' => 'welcome',
            'id'   => $conn->resourceId
        ]));
    }

    public function onMessage(ConnectionInterface $from, $msg) {
        foreach ($this->clients as $client) {
            $client->send(json_encode([
                'type' => 'message',
                'from' => $from->resourceId,
                'msg'  => $msg
            ]));
        }
    }

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
    }

    public function onError(ConnectionInterface $conn, \Exception $e) {
        $conn->close();
    }
}

📌 Passo 2 - Criar o nosso arquivo server.php

<?php
require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/ChatServer.php';

use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use Ratchet\Server\IoServer;

$port = 8080;

$server = IoServer::factory(
    new HttpServer(new WsServer(new ChatServer())),
    $port
);

echo "[server] WebSocket na porta {$port}\n";
$server->run();

📌 Passo 3 - Criar o nosso arquivo composer.json

{
  "require": {
    "cboden/ratchet": "^0.4"
  }
}

📌 Passo 4 - Realizar o PULL da imagem oficial docker.io/library/php:8.2-cli usando o painel ICP da Integrator.

1) Acessar no menu o item Container
2) Depois Imagens
3) Informar a imagem que vamos usar library/php:8.2-cli

📌 Passo 5 - Subir o Docker com usando o painel ICP da Integrator.

1) Acessar no menu o item Container
2) Depois Container
3) Depois Criar
4) De um nome para o seu Docker
5) Informe a porta Externa
6) Informe a porta Interna
7) Escolha a rede
8) Local físico dos arquivos ( criado nos passos acima )
9) Local virtual dentro do docker
10) Em Command use o código abaixo

bash -lc "cd /app && apt-get update && apt-get install -y git unzip curl && curl -sS https://getcomposer.org/installer -o composer-setup.php && php composer-setup.php && php composer.phar install --no-interaction && php server.php"

11) Clique tem Confirmar.

📌 Passo 6 - Vamos ter algo assim em nosso painel ICP

📌 Passo 7 - Vamos criar agora um domínio usando o Painel ICP da Integrator

1) No menu clique em Domínios
2) Depois em Criar
3) Escolha a Opção Proxy
4) Informe o domínio/subdomínio desejado
5) Informe a porta que esta rodando externamente o seu Docker
6) Clique em Confirmar

📌 Passo 8 - Vamos criar agora um SSL para o domínio usando o Painel ICP da Integrator

1) No menu clique em SSL
2) Depois em Obter
3) Informe o seu domínio
4) Escolha HTTP
5) Clique em confirmar

7) Clique em aplicar


7) Clique em Habilitar
8) Escolha o SSL que pertence ao seu domínio
9) Clique em Salvar


📌 Passo 9 - Vamos testar agora via terminal SSH



Até a próxima pessoal!