182 lines
5.9 KiB
Markdown
182 lines
5.9 KiB
Markdown
# Управление портами 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 |
|
||
| - | - | - | - |
|
||
|
||
Обновляйте эту таблицу при добавлении новых сервисов!
|