mnemo_cards/tools/deploy/BACKEND_FIX_REPORT_2025-11-19.md
2025-11-19 22:59:53 +03:00

203 lines
6.4 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.

# Отчет об исправлении Backend Server
**Дата**: 19 ноября 2025
**Проблема**: Backend сервер падал при сборке с ошибкой "Address already in use, port = 8443"
## Причина проблемы
**Конфликт портов**: Backend сервер и code-server (VSCode) были настроены на один и тот же порт **8443**.
### Хронология
1. При восстановлении VSCode Server мы настроили code-server на порт 8443
2. Backend сервер также был настроен на порт 8443
3. При попытке запуска backend получал ошибку: `SocketException: Address already in use, port = 8443`
4. Systemd пытался перезапустить сервис 5 раз и сдался
## Решение
### 1. Изменение порта Backend
- **Старый порт**: 8443 (конфликт с code-server)
- **Новый порт**: 8081 (стандартный порт для API)
### 2. Обновление конфигураций
#### systemd Service
Файл: `/etc/systemd/system/mnemo_cards_server.service`
```ini
[Service]
ExecStart=/root/mnemo_cards_backend/server.exe -a 0.0.0.0 -p 8081
```
Изменено: `-p 8443``-p 8081`
#### nginx Configuration
Файл: `/etc/nginx/sites-available/api`
```nginx
location / {
proxy_pass http://localhost:8081; # было: https://localhost:8443
}
```
Изменения:
- Порт: 8443 → 8081
- Протокол: https → http (SSL терминируется в nginx)
### 3. Включение автозапуска
```bash
systemctl enable mnemo_cards_server
```
## Результаты
### ✅ Backend Server
```bash
● mnemo_cards_server.service - MnemoCardsServer
Loaded: loaded (/etc/systemd/system/mnemo_cards_server.service; enabled)
Active: active (running)
```
### ✅ Порты
| Сервис | Порт | Адрес | Статус |
|--------|------|-------|--------|
| code-server (VSCode) | 8443 | 127.0.0.1 | ✅ Работает |
| backend (API) | 8081 | 0.0.0.0 | ✅ Работает |
| nginx (HTTPS) | 443 | 0.0.0.0 | ✅ Работает |
### ✅ Доступность API
```bash
curl -I https://api.mnemo-cards.online/
HTTP/2 404
server: nginx/1.18.0 (Ubuntu)
access-control-allow-origin: *
```
✅ Сервер отвечает (404 нормально для корневого пути)
## Архитектура
```
Internet
nginx (port 443) - SSL Termination
├─→ api.mnemo-cards.online → http://localhost:8081 (Backend)
└─→ vscode.mnemo-cards.online → http://127.0.0.1:8443 (VSCode)
```
## Созданные инструменты
### fix-backend-port-conflict.sh
Автоматический скрипт для исправления конфликта портов:
- Изменяет порт в systemd service
- Обновляет nginx конфигурацию
- Перезапускает сервисы
- Проверяет работоспособность
**Использование**:
```bash
cd /Users/dmitry/StudioProjects/mnemo_cards/tools/deploy
./fix-backend-port-conflict.sh
```
## Управление Backend
### Проверка статуса
```bash
ssh root@147.45.152.129 'systemctl status mnemo_cards_server'
```
### Просмотр логов
```bash
ssh root@147.45.152.129 'journalctl -u mnemo_cards_server -f'
```
### Перезапуск
```bash
ssh root@147.45.152.129 'systemctl restart mnemo_cards_server'
```
### Проверка порта
```bash
ssh root@147.45.152.129 'ss -tuln | grep 8081'
```
## Предотвращение проблем в будущем
### ✅ Сделано
1. Backend настроен на автозапуск при загрузке
2. Backend использует уникальный порт (8081)
3. Созданы скрипты для быстрого восстановления
4. Документирована архитектура и порты
### 📋 Рекомендации
1. При добавлении новых сервисов проверять свободные порты
2. Документировать используемые порты в конфигурации
3. Использовать стандартные порты:
- Backend API: 8081
- VSCode: 8443
- Forgejo: 3000
- Frontend: через nginx на 443
## Тестирование
### Тест 1: Backend работает
```bash
ssh root@147.45.152.129 'curl -I http://localhost:8081/'
# ✅ HTTP/1.1 404 Not Found
```
### Тест 2: nginx проксирует на backend
```bash
ssh root@147.45.152.129 'curl -I https://api.mnemo-cards.online/'
# ✅ HTTP/2 404
```
### Тест 3: VSCode работает
```bash
ssh root@147.45.152.129 'curl -I http://127.0.0.1:8443/'
# ✅ HTTP/1.1 302 Found (redirect to login)
```
### Тест 4: Порты не конфликтуют
```bash
ssh root@147.45.152.129 'ss -tuln | grep -E "(8081|8443)"'
# ✅ Оба порта слушают без ошибок
```
## Время восстановления
- **Обнаружение проблемы**: 22:34
- **Диагностика**: 22:35
- **Исправление**: 22:37
- **Проверка**: 22:39
**Общее время**: ~5 минут
## Статус
🟢 **RESOLVED**
### Работающие сервисы
- ✅ Backend API: https://api.mnemo-cards.online/
- ✅ VSCode Server: https://vscode.mnemo-cards.online/
- ✅ Forgejo Git: https://code.mnemo-cards.online/
### Автозапуск
- ✅ mnemo_cards_server: enabled
- ✅ code-server: enabled
- ✅ nginx: enabled
## Дополнительная информация
### Связанные документы
- [VSCODE_SERVER_SETUP.md](./VSCODE_SERVER_SETUP.md) - Настройка VSCode Server
- [RECOVERY_REPORT_2025-11-19.md](./RECOVERY_REPORT_2025-11-19.md) - Восстановление VSCode
- [README.md](./README.md) - Общая документация по деплою
### Скрипты
- `fix-backend-port-conflict.sh` - Исправление конфликта портов
- `fix-vscode-server.sh` - Восстановление VSCode Server
---
**Вывод**: Проблема полностью решена. Backend сервер работает на порту 8081, конфликт с VSCode устранен. Все сервисы настроены на автозапуск при перезагрузке сервера.