Chatly is a high-performance, scalable real-time chat backend built with Go. It features horizontal scaling via Redis Pub/Sub, production-grade security with JWT Refresh Token Rotation, and a robust Clean Architecture.
Chatly adalah backend chat real-time berperforma tinggi yang dibangun dengan Go. Fokus utama project ini adalah pada Scalability (Horizontal Scaling), Clean Architecture, dan Production-grade Security.
- Language: Go 1.25+
- HTTP Framework: Gin (High-performance web framework)
- Real-time: Gorilla WebSocket
- Persistence: PostgreSQL
- Cache & Pub/Sub (Scaling): Redis
- Authentication: JWT (v5) with Refresh Token Rotation & Reuse Detection
- Rate Limiter: Implementation of Sliding Window algorithm via Redis
- Deployment: Docker & Docker Compose (Multi-stage build)
Sistem ini menggunakan Redis Pub/Sub untuk mensinkronisasi pesan antar instance server, memungkinkan Horizontal Scaling secara efisien.
graph TD
UserA[User A] <--> |WebSocket| App1(App Instance 1)
UserB[User B] <--> |WebSocket| App2(App Instance 2)
App1 <--> |Pub/Sub| Redis{Redis Broker}
App2 <--> |Pub/Sub| Redis
App1 --> |Persist| DB[(PostgreSQL)]
App2 --> |Persist| DB
App1 -.-> |Rate Limit| Redis
App2 -.-> |Rate Limit| Redis
- WebSocket Scaling: Pesan tersinkronisasi antar banyak instance via Redis.
- Advanced Auth: Rotasi token otomatis untuk mencegah pembajakan sesi.
- Interactive Documentation: Swagger UI integrated for easy API testing.
- Demo Frontend: Simple HTML/JS client included for real-time demo.
- Unit Tested: Core logic covered with high-quality unit tests.
- Rate Limiting: Melindungi server dari spamming (20 req/menit per IP).
- Clean Architecture: Kode terstruktur rapi sehingga mudah di-maintain.
- Automatic Migrations: Skema database diperbarui otomatis saat startup dengan Advisory Lock.
cmd/main.go: Entry point & Dependency Injection.internal/domain: Model data & Interface.internal/repository: Implementasi akses data (Postgres).internal/service: Logika bisnis & Unit Tests.internal/delivery: HTTP Handlers, Routing, & Swagger.static/: Frontend assets (HTML/CSS/JS).
- Docker & Docker Compose
- Pastikan Postgres dan Redis Anda yang sudah ada sedang berjalan.
docker compose up --build- Jalankan aplikasi:
docker compose up - Buka http://localhost:8090/swagger/index.html
- Anda bisa mencoba semua API (Register, Login, Me) langsung dari sana!
- Buka http://localhost:8090/ di browser Anda.
- Login menggunakan kredensial default (
al@chatly.io/password123) atau register user baru. - Buka tab baru di browser ke http://localhost:8091/ (App 2).
- Chat antar tab! Pesan akan sinkron secara real-time via Redis Pub/Sub.
go test ./internal/service/... -v