FCH — современный мессенджер с real-time чатами, групповыми беседами
и WebSocket-взаимодействием, построенный на микросервисной архитектуре Go.
- Overview
- Architecture
- Features
- Tech Stack
- Quick Start
- API Documentation
- WebSocket
- Project Structure
- Screenshots
- License
FCH (Fast Chat Hub) — это real-time мессенджер, разработанный на Go с использованием микросервисной архитектуры. Проект поддерживает личные и групповые чаты, WebSocket для мгновенного обмена сообщениями, JWT-аутентификацию, CSRF-защиту и инвайт-коды для групповых чатов.
Фронтенд серверный (Go templates) с тёмной и светлой темой. API задокументирован через Swagger/OpenAPI.
┌──────────────┐
│ API Gateway │ (Go — :8080)
└──────┬───────┘
│
┌───────────────────┼───────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ Web Service │ │ User Service │ │ Chat Service │
│ (Go) :8081 │ │ (Go) :8082 │ │ (Go) :8083 │
└───────────────┘ └───────────────┘ └───────┬───────┘
│
┌────────┴────────┐
│ PostgreSQL │
│ :5432 │
└─────────────────┘
WebSocket Flow:
Client ──WS──▶ API Gateway ──proxy──▶ Chat Service ──▶ Hub (sync.Map)
│
┌────────────┴────────────┐
▼ ▼
BroadcastToChat SendTo
(всем, кроме автора) (direct message)
| Service | Port | Description |
|---|---|---|
api-gateway |
8080 | Reverse proxy, JWT + CSRF middleware, Swagger UI |
web-service |
8081 | Главная страница с поиском пользователей |
user-service |
8082 | Регистрация, вход, поиск пользователей |
chat-service |
8083 | Чаты, WebSocket, группы, сообщения |
db (PostgreSQL) |
5433 | Основная база данных |
- 💬 Real-time чаты — WebSocket с auto-reconnect
- 👥 Групповые чаты — создание, приглашение по invite-коду
- 🔍 Поиск пользователей — находите собеседников по нику
- 🔐 JWT + CSRF — безопасная аутентификация и защита форм
- 🌗 Dark/Light тема — переключаемая цветовая схема
- 📄 Swagger API — интерактивная документация на
/swagger/
- Language: Go 1.26
- HTTP Router: gorilla/mux
- WebSocket: gorilla/websocket
- Database: PostgreSQL 15 + GORM
- Auth: JWT (HS256) + bcrypt + gorilla/csrf
- Docs: swaggo/swag
- Deployment: Docker Compose (multi-stage builds)
# 1. Клонирование
git clone https://github.com/kempedron/FCH.git
cd FCH
# 2. Настройка окружения
cp .env.example .env
# Отредактируйте .env под свои нужды
# 3. Запуск
chmod +x start.sh
./start.shПосле запуска:
- Main page: http://localhost:8080
- Swagger UI: http://localhost:8080/swagger/
Swagger-документация доступна в формате OpenAPI:
docs/api-gateway/swagger.jsondocs/api-gateway/swagger.yaml
Веб-интерфейс: GET /swagger/ на API Gateway.
| Method | Path | Auth | Description |
|---|---|---|---|
GET |
/ |
— | Главная страница |
GET/POST |
/register |
— | Регистрация |
GET/POST |
/login |
— | Вход |
GET |
/search |
✓ | Поиск пользователей |
GET |
/my-chats |
✓ | Список чатов |
GET |
/chat/{id} |
✓ | Страница чата |
POST |
/chat/new/{userId} |
✓ | Начать личный чат |
GET/POST |
/chat/create/group |
✓ | Создать группу |
POST |
/chat/{id}/join/{code} |
✓ | Присоединиться по коду |
Подключение к WebSocket для real-time сообщений:
const ws = new WebSocket(`ws://localhost:8080/ws/chat/${chatId}`);
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
// { type: "message", chat_id, author_id, content, created_at }
};
ws.send(JSON.stringify({
chat_id: 1,
content: "Привет!"
}));WebSocket Hub (internal/chat-service/handler/websocket.go) использует sync.Map для:
Register— подключение клиентаUnregister— отключение клиентаSendTo— отправка конкретному пользователюBroadcastToChat— рассылка всем участникам чата (кроме отправителя)
FCH/
├── cmd/
│ ├── api-gateway/ # Входная точка Gateway
│ ├── chat-service/ # Чат-сервис (WebSocket + HTTP)
│ ├── user-service/ # Управление пользователями
│ └── web-service/ # Frontend сервис
├── internal/
│ ├── chat-service/ # Бизнес-логика чатов
│ │ ├── handler/ # HTTP + WebSocket хендлеры
│ │ └── service/ # Логика создания/управления чатами
│ ├── database/ # GORM инициализация
│ ├── jwt/ # JWT токены
│ ├── middleware/ # Middleware (JWT, helpers)
│ ├── models/ # GORM модели
│ ├── repository/ # Репозитории
│ ├── user-service/ # Бизнес-логика пользователей
│ └── web-service/ # Логика главной страницы
├── web/templates/ # HTML шаблоны
├── docs/api-gateway/ # Swagger спецификация
├── docker-compose.yml # Оркестрация
└── start.sh # Скрипт запуска
Распространяется под лицензией MIT. См. файл LICENSE для получения дополнительной информации.
Made with ❤️ by kempedron