cubenet_backend/PORT_ALLOCATION.md

182 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Управление портами Cubenet Backend
## 📌 Выделение портов
Для обеспечения порядка и предотвращения конфликтов портов, используется следующая система выделения:
## 🔴 Зарезервированные порты
### REST API (8000-8099)
```
8000 - API Gateway (REST + Swagger UI + OpenAPI docs)
8001 - API (Internal REST)
```
### gRPC Internal (9000-9099)
```
9000 - [Зарезервирован для будущего использования]
```
### Микросервисы (13000-14000)
```
13000 - TemplateService (Шаблон для новых сервисов) [НЕ ИСПОЛЬЗУЕТСЯ]
13001 - User Service ✓
13002 - [Доступно]
13003 - [Доступно]
...
14000 - [Доступно]
```
## ✅ Матрица микросервисов
| Порт | Сервис | Статус | Proto файл | Примечание |
|------|--------|--------|----------|-----------|
| 13000 | Template Service | Шаблон | - | Используйте для создания новых сервисов |
| 13001 | User Service | ✓ Активен | user.proto | Пример реализации |
| 13002 | Product Service | [Доступен] | - | Пример: сервис продуктов |
| 13003 | Order Service | [Доступен] | - | Пример: сервис заказов |
| 13004 | Auth Service | [Доступен] | - | Пример: сервис аутентификации |
| 13005-14000 | Your Services | [Доступны] | - | Используйте эти порты для ваших сервисов |
## 🎯 Создание нового микросервиса
### Шаг 1: Выбрать свободный порт
1. Посмотрите матрицу выше
2. Выберите первый свободный порт (например 13002)
3. Обновите эту таблицу (пометьте как "✓ Активен")
### Шаг 2: Создать структуру
```bash
# 1. Копировать шаблон
cp -r microservices/template_service microservices/product_service
# 2. Обновить Cargo.toml
# Измените:
# [package]
# name = "product_service"
# 3. Создать proto файл (shared_proto/proto/product.proto)
# 4. Обновить shared_proto/src/lib.rs
# 5. Обновить shared_proto/build.rs
# 6. Реализовать сервис
```
### Шаг 3: Зарегистрировать в Workspace
```toml
# Cargo.toml (корневой)
[workspace]
members = [
"api_gateway",
"api",
"microservices/user_service",
"microservices/product_service", # ← Добавить
"shared_proto"
]
```
## 📋 Процедура добавления микросервиса
1. **Выбрать порт** → Обновить таблицу выше
2. **Создать proto**`shared_proto/proto/my_service.proto`
3. **Обновить shared_proto** → Добавить в `src/lib.rs` и `build.rs`
4. **Создать сервис**`microservices/my_service/`
5. **Добавить в workspace** → Обновить корневой `Cargo.toml`
6. **Протестировать**`cargo check && cargo build`
## 🔍 Проверка свободных портов
### Linux/Mac
```bash
# Проверить какой процесс на порту
lsof -i :13002
# Проверить все используемые порты
netstat -an | grep LISTEN
```
### Windows
```bash
# Проверить порты
netstat -ano | findstr :13002
```
## 🚨 Правила выделения портов
**ДЕЛАЙТЕ:**
- Выбирайте порты из диапазона 13000-14000 для микросервисов
- Обновляйте этот файл при добавлении нового сервиса
- Используйте шаблон (template_service) для новых сервисов
- Проверяйте что порт свободен перед запуском
**НЕ ДЕЛАЙТЕ:**
- Не используйте зарезервированные порты (8000, 8001)
- Не переопределяйте уже выделенные порты
- Не запускайте несколько сервисов на одном порту
- Не используйте порты за пределами 13000-14000 для микросервисов
## 💡 Примеры
### Пример 1: Product Service на 13002
```toml
# shared_proto/proto/product.proto
service ProductService {
rpc GetProduct(GetProductRequest) returns (Product);
}
```
```rust
// microservices/product_service/src/main.rs
let addr = "127.0.0.1:13002".parse()?;
```
### Пример 2: Auth Service на 13004
```toml
# shared_proto/proto/auth.proto
service AuthService {
rpc Login(LoginRequest) returns (TokenResponse);
}
```
```rust
// microservices/auth_service/src/main.rs
let addr = "127.0.0.1:13004".parse()?;
```
## 📞 Команды для проверки
```bash
# Проверить запущенные сервисы
cargo run --list-targets
# Скомпилировать всё
cargo build
# Запустить конкретный сервис
cargo run -p user_service
# Проверить что порт слушается
grpcurl -plaintext localhost:13001 list
```
## 🔄 Обновление таблицы
Когда вы создаете новый микросервис:
```markdown
| 13002 | Product Service | ✓ Активен | product.proto | Сервис управления продуктами |
```
## 📝 История добавления сервисов
| Дата | Сервис | Порт | Автор |
|------|--------|------|-------|
| 2024-11-19 | User Service | 13001 | Cubenet Team |
| - | - | - | - |
Обновляйте эту таблицу при добавлении новых сервисов!