ChiwiChat is a backend platform built with a microservices architecture for secure, encrypted peer-to-peer (P2P) messaging. Designed for university environments, it provides robust user authentication, real-time conversation management, end-to-end encryption using OpenSSL, and WebSocket support — all orchestrated via Docker Compose.
The system is composed of multiple independent repositories (Git submodules) that work together to deliver a cohesive and scalable messaging solution.
ChiwiChat/
├── usuarios_service/ # Users & Auth microservice (PHP + MySQL)
├── chats_service_mongo/ # Chats microservice (PHP + MongoDB)
├── ChiwiWebsocket/ # [Submodule] Real-time WebSocket server (Node.js)
├── ChiwiCrypt/ # [Submodule] End-to-end encryption service (PHP + OpenSSL)
├── docker-compose.yml # Container orchestration
└── .env.example # Environment variables template
⚙️ Submodule-based design:
ChiwiWebsocketandChiwiCryptare maintained as independent Git submodules, allowing them to evolve separately and be reused across other projects.
| Service | Technology | Description |
|---|---|---|
usuarios_service |
PHP 8.3 + MySQL 8 | User registration, login, JWT authentication |
chats_service_mongo |
PHP 8.3 + MongoDB 4.4 | Chat creation, message handling, conversation management |
ChiwiWebsocket (submodule) |
Node.js | Real-time bidirectional communication via WebSockets |
ChiwiCrypt (submodule) |
PHP + OpenSSL | Asymmetric key generation and message encryption/decryption |
- Runtime: PHP 8.3 on Apache 2.4
- Databases: MySQL 8.0 (users) · MongoDB 4.4 (messages)
- Auth: JWT (
firebase/php-jwt) - Validation:
respect/validation - Migrations: Phinx (
robmorgan/phinx) - Encryption: OpenSSL via ChiwiCrypt
- WebSockets: Node.js via ChiwiWebsocket
- Containerization: Docker & Docker Compose
- Image Registry: Docker Hub (
gusher/chiwichat)
- Docker Desktop with WSL2 backend
- Git (with submodule support)
git clone --recurse-submodules https://github.com/Gusthere/ChiwiChat.git
cd ChiwiChatIf you already cloned without
--recurse-submodules, run:git submodule update --init --recursive
cp .env.example .envEdit .env with your credentials:
# MySQL – Users DB
MYSQL_ROOT_PASSWORD_USERS=your_secure_password
MYSQL_DATABASE_USERS=users_db
# MongoDB – Chats DB
MONGO_ROOT_PASSWORD=your_mongo_password
MONGO_DATABASE=chats_mongo
# JWT
JWT_SECRET=your_very_long_and_secret_jwt_keydocker compose up -ddocker compose exec usuarios_service composer migrate
docker compose exec chats_service_mongo composer migratedocker compose ps| Method | Endpoint | Description |
|---|---|---|
POST |
/api/auth/register |
Register a new user |
POST |
/api/auth/login |
Authenticate and receive JWT |
GET |
/api/users |
Search/list users |
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/conversations |
Create a new conversation |
GET |
/api/conversations/{id} |
Get messages from a conversation |
POST |
/api/messages |
Send a message |
# Stop all services
docker compose down
# View real-time logs
docker compose logs -f usuarios_service
# Restart a specific service
docker compose restart chats_service_mongo
# Full reset (deletes volumes)
docker compose down -v && docker compose up -d --build| Author | GitHub | Role |
|---|---|---|
| Gustavo Heredia | @Gusthere | Lead Backend – Users & Chats services |
| Diego Noss | @diegonoss | ChiwiCrypt – Encryption service |
| Jugney | @jugneyidk | ChiwiWebsocket – Real-time WebSocket server |
| Samuel Pereira | @shame652003 | Backend contributor |
| Ana Wyatt | @anawyatt | Backend contributor |
ChiwiChat es una plataforma backend construida con arquitectura de microservicios para mensajería cifrada punto a punto (P2P). Diseñada para entornos universitarios, ofrece autenticación robusta de usuarios, gestión de conversaciones en tiempo real, cifrado extremo a extremo con OpenSSL y soporte WebSocket — todo orquestado mediante Docker Compose.
El sistema está compuesto por múltiples repositorios independientes (submódulos de Git) que trabajan en conjunto para entregar una solución de mensajería cohesiva y escalable.
ChiwiChat/
├── usuarios_service/ # Microservicio de usuarios y autenticación (PHP + MySQL)
├── chats_service_mongo/ # Microservicio de chats (PHP + MongoDB)
├── ChiwiWebsocket/ # [Submódulo] Servidor WebSocket en tiempo real (Node.js)
├── ChiwiCrypt/ # [Submódulo] Servicio de cifrado E2E (PHP + OpenSSL)
├── docker-compose.yml # Orquestación de contenedores
└── .env.example # Plantilla de variables de entorno
⚙️ Diseño basado en submódulos:
ChiwiWebsocketyChiwiCryptse mantienen como submódulos Git independientes, lo que les permite evolucionar por separado y ser reutilizados en otros proyectos.
| Servicio | Tecnología | Descripción |
|---|---|---|
usuarios_service |
PHP 8.3 + MySQL 8 | Registro de usuarios, login, autenticación JWT |
chats_service_mongo |
PHP 8.3 + MongoDB 4.4 | Creación de chats, mensajes, gestión de conversaciones |
ChiwiWebsocket (submódulo) |
Node.js | Comunicación bidireccional en tiempo real vía WebSockets |
ChiwiCrypt (submódulo) |
PHP + OpenSSL | Generación de claves asimétricas y cifrado/descifrado de mensajes |
- Runtime: PHP 8.3 sobre Apache 2.4
- Bases de datos: MySQL 8.0 (usuarios) · MongoDB 4.4 (mensajes)
- Autenticación: JWT (
firebase/php-jwt) - Validación:
respect/validation - Migraciones: Phinx (
robmorgan/phinx) - Cifrado: OpenSSL a través de ChiwiCrypt
- WebSockets: Node.js a través de ChiwiWebsocket
- Contenedores: Docker & Docker Compose
- Registro de imágenes: Docker Hub (
gusher/chiwichat)
- Docker Desktop con backend WSL2
- Git (con soporte para submódulos)
git clone --recurse-submodules https://github.com/Gusthere/ChiwiChat.git
cd ChiwiChatSi ya clonaste sin
--recurse-submodules, ejecuta:git submodule update --init --recursive
cp .env.example .envEdita .env con tus credenciales:
# MySQL – Base de datos de usuarios
MYSQL_ROOT_PASSWORD_USERS=tu_contraseña_segura
MYSQL_DATABASE_USERS=users_db
# MongoDB – Base de datos de chats
MONGO_ROOT_PASSWORD=tu_contraseña_mongo
MONGO_DATABASE=chats_mongo
# JWT
JWT_SECRET=una_clave_secreta_muy_larga_y_seguradocker compose up -ddocker compose exec usuarios_service composer migrate
docker compose exec chats_service_mongo composer migratedocker compose ps| Método | Endpoint | Descripción |
|---|---|---|
POST |
/api/auth/register |
Registrar un nuevo usuario |
POST |
/api/auth/login |
Autenticarse y recibir JWT |
GET |
/api/users |
Buscar/listar usuarios |
| Método | Endpoint | Descripción |
|---|---|---|
POST |
/api/conversations |
Crear una nueva conversación |
GET |
/api/conversations/{id} |
Obtener mensajes de una conversación |
POST |
/api/messages |
Enviar un mensaje |
# Detener todos los servicios
docker compose down
# Ver logs en tiempo real
docker compose logs -f usuarios_service
# Reiniciar un servicio específico
docker compose restart chats_service_mongo
# Reset completo (elimina volúmenes)
docker compose down -v && docker compose up -d --buildLas migraciones fallan:
# Verificar que la base de datos está accesible
docker compose exec db_users mysql -u root -p -e "SHOW DATABASES;"
# Revisar los logs del servicio
docker compose logs usuarios_serviceLos contenedores no inician:
# Reconstruir desde cero
docker compose down -v
docker compose up -d --buildLos submódulos están vacíos:
git submodule update --init --recursive| Autor | GitHub | Rol |
|---|---|---|
| Gustavo Heredia | @Gusthere | Backend principal – Servicios de usuarios y chats |
| Diego Noss | @diegonoss | ChiwiCrypt – Servicio de cifrado |
| Jugney | @jugneyidk | ChiwiWebsocket – Servidor WebSocket en tiempo real |
| Samuel Pereira | @shame652003 | Contribuidor backend |
| Ana Wyatt | @anawyatt | Contribuidora backend |
Made at the university · Creado en la universidad