Preços

Início rápido

Arquivos-fonte

Esta página foi gerada com base nos seguintes arquivos-fonte:

O gochat é um sistema de chat distribuído escrito em Go, projetado para oferecer comunicação em tempo real através de WebSocket e TCP. O projeto utiliza uma arquitetura baseada em microserviços com descoberta de serviços via etcd, armazenamento em Redis e gerenciamento de processos através do Supervisor.

Pré-requisitos e Ambiente Docker

O projeto gochat utiliza Docker como ambiente de execução principal, simplificando significativamente a configuração e implantação. A imagem Docker é baseada em Golang 1.18 e inclui todas as dependências necessárias pré-instaladas (docker/Dockerfile:1-29).

Dependências Instaladas

A imagem Docker inclui as seguintes dependências principais:

DependênciaVersãoFinalidade
Golang1.18Runtime principal da aplicação
etcdv3.4.3Descoberta de serviços e configuração distribuída
Redis5.0.9Cache e armazenamento de sessões
Supervisor-Gerenciamento de processos

O processo de build da imagem pode ser executado localmente através do Makefile, permitindo personalizar a tag da imagem conforme necessário (Makefile:1-4).

Modos de Execução

O sistema suporta dois modos de execução configurados através da variável de ambiente RUN_MODE:

  • dev: Ambiente de desenvolvimento com configurações padrão
  • prod: Ambiente de produção (requer configuração adicional)

O modo padrão é dev, conforme definido no Dockerfile (docker/Dockerfile:1-29).

Instalação e Build da Imagem

Usando a Imagem Predefinida

A maneira mais rápida de iniciar é utilizando a imagem Docker predefinida disponível no Docker Hub. A imagem lockgit/gochat:1.18 já contém todas as dependências necessárias (run.sh:42-47).

Construindo a Imagem Localmente

Para arquiteturas não suportadas pela imagem predefinida (como Apple Silicon M1), é necessário construir a imagem localmente:

bash
1cd docker
2docker build -t lockgit/gochat:1.18 .

Ou utilizando o Makefile:

bash
1make build TAG=1.18

O Makefile demonstra o comando de build com tag personalizável (Makefile:1-4).

Executando o Projeto

O script run.sh é o ponto de entrada principal para inicialização do sistema. Este script gerencia toda a configuração e execução do container Docker.

Parâmetros Necessários

O script requer dois parâmetros obrigatórios:

  1. CONFIG_ENV: Ambiente de execução (dev ou prod)
  2. IPADDR: Endereço IP válido para configuração dos serviços

A validação do endereço IP é realizada através de uma função que verifica o formato IPv4 padrão (run.sh:8-22).

Comando de Inicialização

Para ambiente de desenvolvimento:

bash
1sh run.sh dev 127.0.0.1

Para ambiente de produção:

bash
1sh run.sh prod x.x.x.x

O script valida os parâmetros e exibe mensagens de erro apropriadas se os argumentos estiverem incorretos (run.sh:24-37).

Portas Expostas

O container expõe as seguintes portas para comunicação externa (run.sh:66-71):

PortaServiçoDescrição
8080HTTPInterface web principal
7070APIAPI HTTP para comunicação
7000WebSocketConexões WebSocket
7001WebSocketConexões WebSocket alternativas
7002TCP/RPCComunicação RPC entre serviços

Volumes Montados

O script configura os seguintes volumes para persistência e configuração (run.sh:61-64):

  • Código fonte: diretório atual → /go/src/gochat
  • Configuração do Supervisor: docker/{env}/supervisord.d/etc/supervisord.d
  • Arquivo principal do Supervisor: docker/{env}/supervisord.conf/etc/supervisord.conf
  • Configuração do Redis: docker/{env}/redis.conf/root/redis.conf

Processo de Inicialização

Após o container iniciar, o script reload.sh é executado automaticamente para:

  1. Substituir os endereços IP nos arquivos JavaScript estáticos
  2. Compilar o binário gochat.bin
  3. Reiniciar todos os serviços via Supervisor

O script de reload realiza a compilação com flags específicas para compatibilidade com SQLite3 (reload.sh:12-17).

Configuração do Supervisor

O Supervisor é utilizado para gerenciar todos os processos do sistema dentro do container Docker. A configuração principal define os parâmetros globais de execução (docker/dev/supervisord.conf:1-141).

Configuração Global

O arquivo de configuração define:

  • Socket Unix para comunicação: /tmp/supervisor.sock
  • Arquivo de log principal: /tmp/supervisord.log
  • Nível de log: info
  • PID file: /tmp/supervisord.pid

Inclusão de Configurações

O Supervisor está configurado para incluir automaticamente todos os arquivos .ini do diretório /etc/supervisord.d (docker/dev/supervisord.conf:140-141). Isso permite modularizar a configuração de cada serviço em arquivos separados.

Os arquivos de configuração específicos de cada ambiente são montados durante a execução do container (run.sh:62-63).

Arquitetura RPC e Conexões

O sistema utiliza RPC (Remote Procedure Call) para comunicação entre os diferentes componentes distribuídos. A implementação é baseada na biblioteca rpcx com descoberta de serviços via etcd.

Descoberta de Serviços

O cliente RPC é inicializado com configurações de conexão ao etcd, incluindo timeout, credenciais e opções de persistência de conexão (connect/rpc.go:33-60). O sistema utiliza o padrão singleton para garantir uma única instância do cliente RPC.

Métodos RPC Disponíveis

O sistema implementa os seguintes métodos RPC principais:

MétodoDescrição
ConnectEstabelece conexão de um usuário
DisConnectEncerra conexão de um usuário
PushSingleMsgEnvia mensagem para um usuário específico
PushRoomMsgEnvia mensagem para todos os usuários de uma sala
PushRoomCountAtualiza contagem de usuários na sala

Os métodos de push são implementados no servidor RPC para receber mensagens do serviço de lógica e distribuí-las para os clientes conectados (connect/rpc.go:110-140).

Servidores RPC

O sistema inicializa servidores RPC separados para WebSocket e TCP, permitindo que cada protocolo tenha seu próprio endpoint de comunicação (connect/rpc.go:81-105).

正在加载图表渲染器...

Verificação e Validação

Confirmação de Inicialização Bem-sucedida

Após a execução do script run.sh, o sistema exibe mensagens de confirmação indicando que os serviços foram iniciados corretamente (reload.sh:16-18):

all Done.
Beautiful ! Now, You can visit http://127.0.0.1:8080 , start the world.

Acesso à Interface Web

A interface web principal está disponível em http://127.0.0.1:8080 (ou o IP configurado durante a inicialização). Esta URL permite acessar a interface de chat do sistema.

Verificação de Serviços

Para verificar se os serviços estão rodando corretamente dentro do container:

bash
1docker exec gochat-dev supervisorctl status

Este comando lista todos os processos gerenciados pelo Supervisor e seus respectivos status.

Problemas Comuns e Soluções

Erro de Validação de IP

Problema: O script exibe "ip address error !!! please check 'x.x.x.x' is ip address?"

Causa: O endereço IP fornecido não está no formato IPv4 válido.

Solução: Verificar se o IP está no formato correto (ex: 192.168.1.100) e se cada octeto está entre 0 e 255. A validação é realizada pela função valid_ip no script (run.sh:8-22).

Erro de Ambiente

Problema: O script exibe "Sorry, error! Please execute For example..."

Causa: O parâmetro de ambiente não é dev ou prod.

Solução: Utilizar apenas dev ou prod como primeiro parâmetro (run.sh:24-32):

bash
1sh run.sh dev 127.0.0.1

Container Não Inicia

Problema: O container Docker falha ao iniciar.

Causas possíveis:

  1. Portas já em uso por outro serviço
  2. Docker não instalado ou sem permissões
  3. Imagem não disponível localmente

Solução:

  1. Verificar se as portas 8080, 7070, 7000-7002 estão disponíveis
  2. Executar com sudo se necessário
  3. Construir a imagem localmente usando make build TAG=1.18

Problemas de Conexão RPC

Problema: Serviços não conseguem se comunicar via RPC.

Causa: etcd não está acessível ou configurado incorretamente.

Solução: Verificar se o etcd está rodando dentro do container e se as configurações de descoberta estão corretas (connect/rpc.go:43-50). O sistema registra erros fatais se a inicialização do cliente RPC falhar.

Próximos Passos

Após a inicialização bem-sucedida do sistema, os seguintes tópicos podem ser explorados:

  1. Configuração de Produção: Ajustar as configurações do arquivo docker/prod/supervisord.conf para ambiente de produção
  2. Escalonamento: Adicionar múltiplas instâncias do serviço de conexão para suportar mais usuários
  3. Monitoramento: Configurar ferramentas de monitoramento para acompanhar métricas do sistema
  4. Personalização: Modificar a interface web localizada em site/static/
  5. Integração: Utilizar a API HTTP (porta 7070) para integração com sistemas externos

O sistema está preparado para ambientes de desenvolvimento e pode ser adaptado para produção com as configurações apropriadas de segurança e escalabilidade.