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!