Aplicação de chat online em grupo com visual retro inspirado em MSN, Orkut e MySpace.
- Backend API: PHP 8.x (REST API)
- Backend Real-time: Elixir/Phoenix (WebSockets)
- Banco de Dados: MySQL 8.0
- Frontend: HTML5, CSS3, JavaScript (ES6+)
/
├── php-api/ # API REST em PHP
│ ├── config.php # Configuração MySQL
│ ├── user.php # Endpoint de usuários
│ └── messages.php # Endpoint de mensagens
├── elixir-chat/ # Servidor Phoenix
│ ├── mix.exs
│ ├── config/
│ └── lib/
├── public/ # Frontend
│ ├── index.html
│ ├── css/
│ │ └── style.css
│ └── js/
│ └── chat.js
├── database/
│ └── schema.sql # Schema MySQL
├── nginx.conf # Configuração Nginx
└── README.md
- PHP 8.x com extensões: pdo, pdo_mysql
- Elixir 1.15+ e Erlang/OTP 25+
- MySQL 8.0
- Nginx (para produção)
- Node.js (para compilar assets do Phoenix, opcional)
# Criar banco de dados
mysql -u root -p < database/schema.sqlOu execute manualmente:
CREATE DATABASE chat_online;
USE chat_online;
-- Execute o conteúdo de database/schema.sqlEdite php-api/config.php com suas credenciais MySQL:
define('DB_HOST', 'localhost');
define('DB_NAME', 'chat_online');
define('DB_USER', 'seu_usuario');
define('DB_PASS', 'sua_senha');Edite elixir-chat/config/config.exs e config/dev.exs com suas credenciais:
config :chat_online, ChatOnline.Repo,
username: "seu_usuario",
password: "sua_senha",
hostname: "localhost",
database: "chat_online"cd elixir-chat
mix deps.get
mix compileTerminal 1 - PHP (usando servidor built-in):
cd php-api
php -S localhost:8000Terminal 2 - Phoenix:
cd elixir-chat
mix phx.serverTerminal 3 - Frontend (opcional, ou use servidor web):
cd public
python3 -m http.server 8080Acesse: http://localhost:8080
- Configurar PHP-FPM:
sudo apt update
sudo apt install php-fpm php-mysql nginx mysql-server- Configurar Nginx:
sudo cp nginx.conf /etc/nginx/sites-available/chat_online
sudo ln -s /etc/nginx/sites-available/chat_online /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx- Configurar Phoenix como serviço:
Crie /etc/systemd/system/chat_online.service:
[Unit]
Description=Chat Online Phoenix Server
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/chat_online/elixir-chat
Environment=MIX_ENV=prod
Environment=PORT=4000
ExecStart=/usr/local/bin/mix phx.server
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable chat_online
sudo systemctl start chat_online- Configurar Firewall:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 4000/tcp # Apenas se necessário- Build Phoenix para produção:
cd elixir-chat
MIX_ENV=prod mix deps.get --only prod
MIX_ENV=prod mix compile
MIX_ENV=prod mix phx.digestCrie um arquivo .env ou configure variáveis de ambiente:
export DB_USER="seu_usuario"
export DB_PASS="sua_senha"
export DB_HOST="localhost"
export DB_NAME="chat_online"
export SECRET_KEY_BASE="$(mix phx.gen.secret)"
export PORT=4000- Gere secret key para Phoenix:
cd elixir-chat
mix phx.gen.secret-
Atualize
config/prod.exscom o secret key gerado. -
Configure SSL/HTTPS usando Let's Encrypt:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d seu-dominio.com- Acesse a aplicação no navegador
- Digite um nome de usuário (2-50 caracteres)
- Clique em "ENTRAR"
- Comece a conversar na sala de chat!
- Cores vibrantes (roxo, rosa, azul, verde neon)
- Fontes Comic Sans MS
- Bordas arredondadas com sombras exageradas
- Gradientes chamativos
- Animações (blink, glow, bounce)
- Estilo Y2K inspirado em MSN/Orkut/MySpace
- Verifique se a porta 4000 está aberta
- Verifique logs:
journalctl -u chat_online -f - Teste conexão:
curl http://localhost:4000/socket/websocket
- Verifique se PHP-FPM está rodando:
sudo systemctl status php8.1-fpm - Verifique permissões dos arquivos
- Verifique logs do Nginx:
sudo tail -f /var/log/nginx/error.log
- Verifique se o Nginx está fazendo proxy corretamente
- Verifique CORS no Phoenix
- Abra console do navegador (F12) para ver erros
Este projeto é open source e está disponível para uso livre.
- PHP 8.x
- Elixir/Phoenix
- MySQL
- HTML5/CSS3/JavaScript
- Muito ❤️ e nostalgia dos anos 2000!