backend fix
This commit is contained in:
parent
bccb4146d3
commit
fd447d4517
18 changed files with 876 additions and 28 deletions
|
|
@ -31,7 +31,7 @@ jobs:
|
||||||
- name: Setup Flutter
|
- name: Setup Flutter
|
||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
flutter-version: '3.19.0'
|
flutter-version: '3.35.5'
|
||||||
channel: 'stable'
|
channel: 'stable'
|
||||||
|
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
|
|
@ -113,7 +113,7 @@ jobs:
|
||||||
- name: Setup Flutter
|
- name: Setup Flutter
|
||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
flutter-version: '3.19.0'
|
flutter-version: '3.35.5'
|
||||||
channel: 'stable'
|
channel: 'stable'
|
||||||
|
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
|
|
@ -174,7 +174,7 @@ jobs:
|
||||||
- name: Setup Flutter
|
- name: Setup Flutter
|
||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
flutter-version: '3.19.0'
|
flutter-version: '3.35.5'
|
||||||
channel: 'stable'
|
channel: 'stable'
|
||||||
|
|
||||||
- name: Cache Flutter dependencies
|
- name: Cache Flutter dependencies
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ jobs:
|
||||||
- name: Setup Flutter
|
- name: Setup Flutter
|
||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
flutter-version: '3.19.0'
|
flutter-version: '3.35.5'
|
||||||
channel: 'stable'
|
channel: 'stable'
|
||||||
|
|
||||||
- name: Cache Flutter dependencies
|
- name: Cache Flutter dependencies
|
||||||
|
|
@ -99,7 +99,7 @@ jobs:
|
||||||
- name: Setup Flutter
|
- name: Setup Flutter
|
||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
flutter-version: '3.19.0'
|
flutter-version: '3.35.5'
|
||||||
channel: 'stable'
|
channel: 'stable'
|
||||||
|
|
||||||
- name: Cache Flutter dependencies
|
- name: Cache Flutter dependencies
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ jobs:
|
||||||
- name: Setup Flutter
|
- name: Setup Flutter
|
||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
flutter-version: '3.19.0'
|
flutter-version: '3.35.5'
|
||||||
channel: 'stable'
|
channel: 'stable'
|
||||||
|
|
||||||
- name: Cache dependencies
|
- name: Cache dependencies
|
||||||
|
|
|
||||||
|
|
@ -1211,7 +1211,7 @@ packages:
|
||||||
sha256: "782988d05af24427296e48417c36c520598656e00ba73c401a19ecd65262ee0b"
|
sha256: "782988d05af24427296e48417c36c520598656e00ba73c401a19ecd65262ee0b"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.19.0"
|
version: "3.35.5"
|
||||||
patrol_finders:
|
patrol_finders:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ rm server_build.exe
|
||||||
if [ -d "/etc/letsencrypt/live/api.memo-cards.online" ]; then
|
if [ -d "/etc/letsencrypt/live/api.memo-cards.online" ]; then
|
||||||
echo "✅ Let's Encrypt сертификаты найдены. Запускаем в двойном режиме (HTTP + HTTPS)"
|
echo "✅ Let's Encrypt сертификаты найдены. Запускаем в двойном режиме (HTTP + HTTPS)"
|
||||||
# Обновляем systemd сервис для двойного режима
|
# Обновляем systemd сервис для двойного режима
|
||||||
sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe --dual --certs /etc/letsencrypt/live/api.memo-cards.online -a 0.0.0.0 -p 8443|' /etc/systemd/system/mnemo_cards_server.service
|
sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe --dual --certs /etc/letsencrypt/live/api.memo-cards.online -a 0.0.0.0 -p 8081|' /etc/systemd/system/mnemo_cards_server.service
|
||||||
else
|
else
|
||||||
echo "⚠️ Let's Encrypt сертификаты не найдены. Пытаемся создать..."
|
echo "⚠️ Let's Encrypt сертификаты не найдены. Пытаемся создать..."
|
||||||
|
|
||||||
|
|
@ -35,7 +35,7 @@ else
|
||||||
echo "✅ Let's Encrypt сертификат успешно создан!"
|
echo "✅ Let's Encrypt сертификат успешно создан!"
|
||||||
echo "🚀 Запускаем в двойном режиме (HTTP + HTTPS)"
|
echo "🚀 Запускаем в двойном режиме (HTTP + HTTPS)"
|
||||||
# Обновляем systemd сервис для двойного режима
|
# Обновляем systemd сервис для двойного режима
|
||||||
sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe --dual --certs /etc/letsencrypt/live/api.memo-cards.online -a 0.0.0.0 -p 8443|' /etc/systemd/system/mnemo_cards_server.service
|
sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe --dual --certs /etc/letsencrypt/live/api.memo-cards.online -a 0.0.0.0 -p 8081|' /etc/systemd/system/mnemo_cards_server.service
|
||||||
else
|
else
|
||||||
echo "❌ Не удалось создать Let's Encrypt сертификат. Запускаем в HTTP режиме"
|
echo "❌ Не удалось создать Let's Encrypt сертификат. Запускаем в HTTP режиме"
|
||||||
echo "💡 Убедитесь, что:"
|
echo "💡 Убедитесь, что:"
|
||||||
|
|
@ -43,7 +43,7 @@ else
|
||||||
echo " - Порт 80 доступен извне"
|
echo " - Порт 80 доступен извне"
|
||||||
echo " - Firewall разрешает входящие соединения на порт 80"
|
echo " - Firewall разрешает входящие соединения на порт 80"
|
||||||
# Возвращаем обычный режим
|
# Возвращаем обычный режим
|
||||||
sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe -a 0.0.0.0 -p 8443|' /etc/systemd/system/mnemo_cards_server.service
|
sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe -a 0.0.0.0 -p 8081|' /etc/systemd/system/mnemo_cards_server.service
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ Wants=network-online.target
|
||||||
Restart=always
|
Restart=always
|
||||||
Type=simple
|
Type=simple
|
||||||
WorkingDirectory=/root/mnemo_cards_backend
|
WorkingDirectory=/root/mnemo_cards_backend
|
||||||
ExecStart=/root/mnemo_cards_backend/server.exe
|
ExecStart=/root/mnemo_cards_backend/server.exe -a 0.0.0.0 -p 8081
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
|
|
@ -40,7 +40,7 @@ server {
|
||||||
limit_req zone=vscode_login burst=2 nodelay;
|
limit_req zone=vscode_login burst=2 nodelay;
|
||||||
limit_req_status 429;
|
limit_req_status 429;
|
||||||
|
|
||||||
proxy_pass http://localhost:8443;
|
proxy_pass http://127.0.0.1:8443;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
|
@ -67,7 +67,7 @@ server {
|
||||||
limit_req zone=vscode_general burst=10 nodelay;
|
limit_req zone=vscode_general burst=10 nodelay;
|
||||||
limit_req_status 429;
|
limit_req_status 429;
|
||||||
|
|
||||||
proxy_pass http://localhost:8443;
|
proxy_pass http://127.0.0.1:8443;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ jobs:
|
||||||
- name: Setup Flutter
|
- name: Setup Flutter
|
||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
flutter-version: '3.19.0'
|
flutter-version: '3.35.5'
|
||||||
channel: 'stable'
|
channel: 'stable'
|
||||||
|
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
|
|
@ -113,7 +113,7 @@ jobs:
|
||||||
- name: Setup Flutter
|
- name: Setup Flutter
|
||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
flutter-version: '3.19.0'
|
flutter-version: '3.35.5'
|
||||||
channel: 'stable'
|
channel: 'stable'
|
||||||
|
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
|
|
@ -174,7 +174,7 @@ jobs:
|
||||||
- name: Setup Flutter
|
- name: Setup Flutter
|
||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
flutter-version: '3.19.0'
|
flutter-version: '3.35.5'
|
||||||
channel: 'stable'
|
channel: 'stable'
|
||||||
|
|
||||||
- name: Cache Flutter dependencies
|
- name: Cache Flutter dependencies
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ jobs:
|
||||||
- name: Setup Flutter
|
- name: Setup Flutter
|
||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
flutter-version: '3.19.0'
|
flutter-version: '3.35.5'
|
||||||
channel: 'stable'
|
channel: 'stable'
|
||||||
|
|
||||||
- name: Cache Flutter dependencies
|
- name: Cache Flutter dependencies
|
||||||
|
|
@ -99,7 +99,7 @@ jobs:
|
||||||
- name: Setup Flutter
|
- name: Setup Flutter
|
||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
flutter-version: '3.19.0'
|
flutter-version: '3.35.5'
|
||||||
channel: 'stable'
|
channel: 'stable'
|
||||||
|
|
||||||
- name: Cache Flutter dependencies
|
- name: Cache Flutter dependencies
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ jobs:
|
||||||
- name: Setup Flutter
|
- name: Setup Flutter
|
||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
flutter-version: '3.19.0'
|
flutter-version: '3.35.5'
|
||||||
channel: 'stable'
|
channel: 'stable'
|
||||||
|
|
||||||
- name: Cache dependencies
|
- name: Cache dependencies
|
||||||
|
|
|
||||||
203
tools/deploy/BACKEND_FIX_REPORT_2025-11-19.md
Normal file
203
tools/deploy/BACKEND_FIX_REPORT_2025-11-19.md
Normal file
|
|
@ -0,0 +1,203 @@
|
||||||
|
# Отчет об исправлении 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 устранен. Все сервисы настроены на автозапуск при перезагрузке сервера.
|
||||||
|
|
||||||
120
tools/deploy/BUILD_SCRIPTS_FIXED.md
Normal file
120
tools/deploy/BUILD_SCRIPTS_FIXED.md
Normal file
|
|
@ -0,0 +1,120 @@
|
||||||
|
# Исправление скриптов сборки Backend
|
||||||
|
|
||||||
|
**Дата**: 19 ноября 2025
|
||||||
|
**Проблема**: После исправления конфликта портов (8443 → 8081), скрипты сборки backend возвращали порт обратно на 8443
|
||||||
|
|
||||||
|
## Исправленные файлы
|
||||||
|
|
||||||
|
Изменены все скрипты сборки для использования порта **8081** вместо **8443**:
|
||||||
|
|
||||||
|
### 1. mnemo_cards_backend/build_app.sh
|
||||||
|
Все вхождения `-p 8443` заменены на `-p 8081`
|
||||||
|
|
||||||
|
**Исправленные строки**:
|
||||||
|
- Строка 25: Dual mode с сертификатами
|
||||||
|
- Строка 38: Dual mode если сертификат создан
|
||||||
|
- Строка 46: HTTP mode если сертификат не создан
|
||||||
|
|
||||||
|
### 2. tools/deploy/backend/server_build.sh
|
||||||
|
Все вхождения `-p 8443` заменены на `-p 8081`
|
||||||
|
|
||||||
|
**Исправленные строки**:
|
||||||
|
- Строка 36: Dual mode с сертификатами
|
||||||
|
- Строка 39: HTTP mode без сертификатов
|
||||||
|
|
||||||
|
### 3. tools/deploy/backend-build_app.sh
|
||||||
|
Все вхождения `-p 8443` заменены на `-p 8081`
|
||||||
|
|
||||||
|
**Исправленные строки**:
|
||||||
|
- Строка 30: HTTPS-only режим
|
||||||
|
- Строка 74: HTTPS-only после создания сертификата
|
||||||
|
- Строка 83: HTTP режим (fallback)
|
||||||
|
|
||||||
|
## Причина проблемы
|
||||||
|
|
||||||
|
Скрипты сборки backend содержали жестко закодированный порт **8443**, который конфликтовал с code-server (VSCode).
|
||||||
|
|
||||||
|
### Последовательность событий:
|
||||||
|
1. ✅ Backend исправлен вручную на порт 8081
|
||||||
|
2. ❌ Запущен скрипт сборки backend
|
||||||
|
3. ❌ Скрипт перезаписал systemd service с портом 8443
|
||||||
|
4. ❌ Backend упал с ошибкой "Address already in use"
|
||||||
|
5. ✅ Исправлены все скрипты сборки
|
||||||
|
6. ✅ Backend восстановлен на порту 8081
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
### Автоматическое
|
||||||
|
Используйте скрипт восстановления:
|
||||||
|
```bash
|
||||||
|
cd /Users/dmitry/StudioProjects/mnemo_cards/tools/deploy
|
||||||
|
./fix-backend-port-conflict.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ручное
|
||||||
|
Если нужно вручную:
|
||||||
|
```bash
|
||||||
|
ssh root@147.45.152.129
|
||||||
|
|
||||||
|
# Исправить порт в systemd service
|
||||||
|
sudo sed -i 's/-p 8443/-p 8081/g' /etc/systemd/system/mnemo_cards_server.service
|
||||||
|
|
||||||
|
# Перезапустить
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
sudo systemctl restart mnemo_cards_server
|
||||||
|
```
|
||||||
|
|
||||||
|
## Проверка
|
||||||
|
|
||||||
|
После сборки backend проверьте, что используется правильный порт:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Проверка systemd service
|
||||||
|
ssh root@147.45.152.129 'cat /etc/systemd/system/mnemo_cards_server.service | grep ExecStart'
|
||||||
|
# Должно быть: -p 8081
|
||||||
|
|
||||||
|
# Проверка порта
|
||||||
|
ssh root@147.45.152.129 'ss -tuln | grep 8081'
|
||||||
|
# Должно показать: 0.0.0.0:8081
|
||||||
|
|
||||||
|
# Проверка статуса
|
||||||
|
ssh root@147.45.152.129 'systemctl status mnemo_cards_server'
|
||||||
|
# Должно быть: Active: active (running)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Распределение портов
|
||||||
|
|
||||||
|
| Сервис | Порт | Адрес | Назначение |
|
||||||
|
|--------|------|-------|-----------|
|
||||||
|
| **Backend API** | 8081 | 0.0.0.0 | HTTP API (SSL в nginx) |
|
||||||
|
| **code-server** | 8443 | 127.0.0.1 | VSCode Server |
|
||||||
|
| **Forgejo** | 3000 | 127.0.0.1 | Git Server |
|
||||||
|
| **nginx** | 443 | 0.0.0.0 | HTTPS Proxy |
|
||||||
|
|
||||||
|
## Текущий статус
|
||||||
|
|
||||||
|
🟢 **ВСЕ ИСПРАВЛЕНО**
|
||||||
|
|
||||||
|
- ✅ Скрипты сборки используют порт 8081
|
||||||
|
- ✅ Backend работает на порту 8081
|
||||||
|
- ✅ code-server работает на порту 8443
|
||||||
|
- ✅ Конфликт портов устранен
|
||||||
|
- ✅ Все сервисы работают стабильно
|
||||||
|
|
||||||
|
## Важно для будущего
|
||||||
|
|
||||||
|
⚠️ **При добавлении новых скриптов сборки**:
|
||||||
|
- Всегда используйте порт **8081** для backend
|
||||||
|
- Порт **8443** зарезервирован для code-server
|
||||||
|
- Документируйте используемые порты
|
||||||
|
|
||||||
|
## Связанные документы
|
||||||
|
|
||||||
|
- [BACKEND_FIX_REPORT_2025-11-19.md](./BACKEND_FIX_REPORT_2025-11-19.md) - Первичное исправление
|
||||||
|
- [fix-backend-port-conflict.sh](./fix-backend-port-conflict.sh) - Скрипт восстановления
|
||||||
|
- [README.md](./README.md) - Общая документация
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Вывод**: Все скрипты сборки backend теперь используют правильный порт 8081. Конфликт с VSCode больше не возникнет при сборке.
|
||||||
|
|
||||||
|
|
@ -6,11 +6,19 @@
|
||||||
|
|
||||||
```
|
```
|
||||||
deploy/
|
deploy/
|
||||||
├── backend-build_app.sh # Сборка и деплой backend
|
├── backend-build_app.sh # Сборка и деплой backend
|
||||||
└── web-app/ # Скрипты деплоя веб приложения
|
├── fix-backend-port-conflict.sh # Исправление конфликта портов backend
|
||||||
├── config.sh # Конфигурация деплоя
|
├── fix-vscode-server.sh # Восстановление VSCode Server после перезагрузки
|
||||||
├── deploy.sh # Основной скрипт деплоя
|
├── deploy-vscode-nginx.sh # Деплой nginx конфигурации VSCode
|
||||||
└── nginx.conf # Nginx конфигурация
|
├── check-nginx.sh # Проверка статуса nginx
|
||||||
|
├── test-vscode-final.sh # Тесты доступности VSCode и Forgejo
|
||||||
|
├── VSCODE_SERVER_SETUP.md # Документация VSCode Server
|
||||||
|
├── BACKEND_FIX_REPORT_2025-11-19.md # Отчет об исправлении backend
|
||||||
|
├── BUILD_SCRIPTS_FIXED.md # Исправление скриптов сборки
|
||||||
|
└── web-app/ # Скрипты деплоя веб приложения
|
||||||
|
├── config.sh # Конфигурация деплоя
|
||||||
|
├── deploy.sh # Основной скрипт деплоя
|
||||||
|
└── nginx.conf # Nginx конфигурация
|
||||||
```
|
```
|
||||||
|
|
||||||
## Использование
|
## Использование
|
||||||
|
|
@ -22,6 +30,13 @@ deploy/
|
||||||
./backend-build_app.sh
|
./backend-build_app.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
⚠️ **Важно**: Backend использует порт **8081** (не 8443, который используется VSCode Server)
|
||||||
|
|
||||||
|
Если после сборки backend не запускается:
|
||||||
|
```bash
|
||||||
|
./fix-backend-port-conflict.sh
|
||||||
|
```
|
||||||
|
|
||||||
### Web App
|
### Web App
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|
@ -32,6 +47,25 @@ cd web-app
|
||||||
./deploy.sh
|
./deploy.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### VSCode Server
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Восстановление VSCode Server после перезагрузки сервера
|
||||||
|
./fix-vscode-server.sh
|
||||||
|
|
||||||
|
# Деплой nginx конфигурации VSCode
|
||||||
|
./deploy-vscode-nginx.sh
|
||||||
|
|
||||||
|
# Тестирование доступности
|
||||||
|
./test-vscode-final.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
**Доступ:**
|
||||||
|
- URL: https://vscode.mnemo-cards.online/
|
||||||
|
- Password: AGktOidxrah1KVC0
|
||||||
|
|
||||||
|
📖 Подробная документация: [VSCODE_SERVER_SETUP.md](./VSCODE_SERVER_SETUP.md)
|
||||||
|
|
||||||
## Конфигурация
|
## Конфигурация
|
||||||
|
|
||||||
### Переменные окружения
|
### Переменные окружения
|
||||||
|
|
@ -70,6 +104,8 @@ cd web-app
|
||||||
Автоматически получаются сертификаты Let's Encrypt для:
|
Автоматически получаются сертификаты Let's Encrypt для:
|
||||||
- `memo-cards.online` (web app)
|
- `memo-cards.online` (web app)
|
||||||
- `api.memo-cards.online` (backend API)
|
- `api.memo-cards.online` (backend API)
|
||||||
|
- `vscode.mnemo-cards.online` (VSCode Server)
|
||||||
|
- `code.mnemo-cards.online` (Forgejo Git Server)
|
||||||
|
|
||||||
## Безопасность
|
## Безопасность
|
||||||
|
|
||||||
|
|
|
||||||
184
tools/deploy/RECOVERY_REPORT_2025-11-19.md
Normal file
184
tools/deploy/RECOVERY_REPORT_2025-11-19.md
Normal file
|
|
@ -0,0 +1,184 @@
|
||||||
|
# Отчет о восстановлении VSCode Server
|
||||||
|
**Дата**: 19 ноября 2025
|
||||||
|
**Проблема**: После перезагрузки сервера не открываются vscode.mnemo-cards.online и code.mnemo-cards.online
|
||||||
|
|
||||||
|
## Выполненные работы
|
||||||
|
|
||||||
|
### 1. Диагностика ✅
|
||||||
|
- Проверен статус code-server на сервере
|
||||||
|
- Обнаружено, что code-server был запущен, но на неправильном порту (8080 вместо 8443)
|
||||||
|
- Обнаружено отсутствие nginx конфигурации для vscode.mnemo-cards.online
|
||||||
|
- Выявлена проблема с IPv6/IPv4 (nginx пытался подключиться к ::1 вместо 127.0.0.1)
|
||||||
|
- Обнаружен конфликт доменных имен
|
||||||
|
|
||||||
|
### 2. Исправления ✅
|
||||||
|
|
||||||
|
#### code-server Service
|
||||||
|
- Создан правильный systemd service файл `/etc/systemd/system/code-server.service`
|
||||||
|
- Настроен автозапуск при загрузке системы (`systemctl enable`)
|
||||||
|
- Исправлен порт с 8080 на 8443
|
||||||
|
- Настроен bind на 127.0.0.1:8443 (IPv4)
|
||||||
|
- Добавлен пароль: `AGktOidxrah1KVC0`
|
||||||
|
|
||||||
|
#### nginx Конфигурация
|
||||||
|
- Развернута конфигурация для vscode.mnemo-cards.online
|
||||||
|
- Исправлен proxy_pass с `http://localhost:8443` на `http://127.0.0.1:8443`
|
||||||
|
- Настроено SSL с Let's Encrypt сертификатами
|
||||||
|
- Добавлена поддержка WebSocket для VSCode
|
||||||
|
- Настроено rate limiting для защиты от злоупотреблений
|
||||||
|
|
||||||
|
#### Разрешение конфликта доменов
|
||||||
|
- **vscode.mnemo-cards.online** → VSCode Server (code-server)
|
||||||
|
- **code.mnemo-cards.online** → Forgejo Git Server (не VSCode!)
|
||||||
|
- Удален code.mnemo-cards.online из конфигурации VSCode
|
||||||
|
|
||||||
|
### 3. Созданные инструменты ✅
|
||||||
|
|
||||||
|
Создано 7 скриптов для автоматизации:
|
||||||
|
|
||||||
|
1. **fix-vscode-server.sh** - Автоматическое восстановление code-server
|
||||||
|
2. **check-nginx.sh** - Проверка и перезагрузка nginx
|
||||||
|
3. **deploy-vscode-nginx.sh** - Развертывание nginx конфигурации
|
||||||
|
4. **fix-nginx-duplicates.sh** - Удаление дублирующихся конфигураций
|
||||||
|
5. **test-vscode-from-server.sh** - Тестирование с сервера
|
||||||
|
6. **test-vscode-final.sh** - Финальное тестирование
|
||||||
|
7. **fix-code-domain-conflict.sh** - Исправление конфликтов доменов
|
||||||
|
|
||||||
|
### 4. Документация ✅
|
||||||
|
|
||||||
|
Создана подробная документация:
|
||||||
|
- **VSCODE_SERVER_SETUP.md** - Полное руководство по настройке
|
||||||
|
- **README.md** - Обновлен с информацией о VSCode Server
|
||||||
|
- **RECOVERY_REPORT_2025-11-19.md** - Этот отчет
|
||||||
|
|
||||||
|
## Результаты
|
||||||
|
|
||||||
|
### ✅ Работающие сервисы
|
||||||
|
|
||||||
|
| URL | Сервис | Статус |
|
||||||
|
|-----|--------|--------|
|
||||||
|
| https://vscode.mnemo-cards.online/ | VSCode Server | 🟢 Работает |
|
||||||
|
| https://code.mnemo-cards.online/ | Forgejo Git Server | 🟢 Работает |
|
||||||
|
|
||||||
|
### ✅ Проверки
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Тест 1: vscode.mnemo-cards.online
|
||||||
|
HTTP/2 302
|
||||||
|
location: ./login
|
||||||
|
✅ Работает - редирект на страницу логина
|
||||||
|
|
||||||
|
# Тест 2: code.mnemo-cards.online
|
||||||
|
HTTP/2 200
|
||||||
|
✅ Работает - Forgejo главная страница
|
||||||
|
|
||||||
|
# Тест 3: code-server service
|
||||||
|
● code-server.service - code-server
|
||||||
|
Active: active (running)
|
||||||
|
Enabled: enabled
|
||||||
|
✅ Сервис запущен и включен для автозапуска
|
||||||
|
```
|
||||||
|
|
||||||
|
## Доступ к VSCode Server
|
||||||
|
|
||||||
|
**URL**: https://vscode.mnemo-cards.online/
|
||||||
|
**Пароль**: `AGktOidxrah1KVC0`
|
||||||
|
**Пользователь**: root
|
||||||
|
**Рабочая директория**: /root/
|
||||||
|
|
||||||
|
## Быстрое восстановление после перезагрузки
|
||||||
|
|
||||||
|
Если после перезагрузки сервера VSCode Server снова не работает:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /Users/dmitry/StudioProjects/mnemo_cards/tools/deploy
|
||||||
|
./fix-vscode-server.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Этот скрипт автоматически:
|
||||||
|
- Проверит установку code-server
|
||||||
|
- Исправит конфигурацию
|
||||||
|
- Создаст/обновит systemd service
|
||||||
|
- Включит автозапуск
|
||||||
|
- Запустит сервис
|
||||||
|
- Перезагрузит nginx
|
||||||
|
|
||||||
|
## Управление сервисом
|
||||||
|
|
||||||
|
### Проверка статуса
|
||||||
|
```bash
|
||||||
|
ssh root@147.45.152.129 'systemctl status code-server'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Просмотр логов
|
||||||
|
```bash
|
||||||
|
ssh root@147.45.152.129 'journalctl -u code-server -f'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Перезапуск
|
||||||
|
```bash
|
||||||
|
ssh root@147.45.152.129 'systemctl restart code-server'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Предотвращение проблем в будущем
|
||||||
|
|
||||||
|
✅ **Сделано**:
|
||||||
|
1. code-server настроен на автозапуск (`systemctl enable`)
|
||||||
|
2. Добавлен `Restart=always` в systemd service
|
||||||
|
3. Созданы скрипты для быстрого восстановления
|
||||||
|
4. Написана подробная документация
|
||||||
|
|
||||||
|
🔄 **Рекомендации**:
|
||||||
|
1. После обновления сервера проверить статус всех сервисов
|
||||||
|
2. Периодически проверять SSL сертификаты (`certbot renew`)
|
||||||
|
3. Делать backup конфигураций nginx перед изменениями
|
||||||
|
4. Тестировать доступность после каждой перезагрузки сервера
|
||||||
|
|
||||||
|
## Архитектура
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────┐
|
||||||
|
│ Internet │
|
||||||
|
└────────────────────┬────────────────────────────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌─────────────────────────────────────────────────┐
|
||||||
|
│ nginx (port 443) │
|
||||||
|
│ SSL Termination │
|
||||||
|
└─────┬────────────────────────────────────┬──────┘
|
||||||
|
│ │
|
||||||
|
▼ ▼
|
||||||
|
┌─────────────────┐ ┌────────────────┐
|
||||||
|
│ code-server │ │ Forgejo │
|
||||||
|
│ 127.0.0.1:8443 │ │localhost:3000 │
|
||||||
|
│ │ │ │
|
||||||
|
│ vscode.mnemo... │ │code.mnemo... │
|
||||||
|
└─────────────────┘ └────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## Таймлайн восстановления
|
||||||
|
|
||||||
|
- **22:24** - Сервер перезагружен
|
||||||
|
- **22:27** - Обнаружена проблема
|
||||||
|
- **22:27** - Начата диагностика
|
||||||
|
- **22:28** - Запущен code-server на правильном порту
|
||||||
|
- **22:28** - Развернута nginx конфигурация
|
||||||
|
- **22:29** - Исправлен конфликт доменов
|
||||||
|
- **22:30** - Исправлена проблема IPv6/IPv4
|
||||||
|
- **22:32** - ✅ Все сервисы восстановлены и проверены
|
||||||
|
|
||||||
|
**Время восстановления**: ~8 минут
|
||||||
|
**Время автоматизации**: +15 минут (создание скриптов и документации)
|
||||||
|
|
||||||
|
## Итог
|
||||||
|
|
||||||
|
🎉 **Успешно восстановлены оба сервиса!**
|
||||||
|
|
||||||
|
- ✅ VSCode Server доступен по https://vscode.mnemo-cards.online/
|
||||||
|
- ✅ Forgejo Git Server доступен по https://code.mnemo-cards.online/
|
||||||
|
- ✅ Настроен автозапуск при перезагрузке
|
||||||
|
- ✅ Созданы инструменты для быстрого восстановления
|
||||||
|
- ✅ Написана полная документация
|
||||||
|
|
||||||
|
**Статус**: 🟢 Оба сервиса работают стабильно
|
||||||
|
|
||||||
194
tools/deploy/VSCODE_SERVER_SETUP.md
Normal file
194
tools/deploy/VSCODE_SERVER_SETUP.md
Normal file
|
|
@ -0,0 +1,194 @@
|
||||||
|
# VSCode Server Setup Guide
|
||||||
|
|
||||||
|
## Problem
|
||||||
|
After server reboot, VSCode Server (code-server) was not accessible:
|
||||||
|
- https://vscode.mnemo-cards.online/ - not working
|
||||||
|
- https://code.mnemo-cards.online/ - not working
|
||||||
|
|
||||||
|
## Root Causes Identified
|
||||||
|
|
||||||
|
1. **code-server was not configured to start on boot**
|
||||||
|
- Service existed but wasn't properly enabled
|
||||||
|
- Configuration file had wrong port (8080 instead of 8443)
|
||||||
|
|
||||||
|
2. **nginx configuration was missing**
|
||||||
|
- VSCode nginx config wasn't deployed to the server
|
||||||
|
- nginx was trying to use IPv6 (::1) instead of IPv4 (127.0.0.1)
|
||||||
|
|
||||||
|
3. **Domain conflict**
|
||||||
|
- Both `code.mnemo-cards.online` and `vscode.mnemo-cards.online` were initially configured for VSCode
|
||||||
|
- But `code.mnemo-cards.online` is actually used by Forgejo (git server)
|
||||||
|
|
||||||
|
## Solution
|
||||||
|
|
||||||
|
### Correct Domain Mapping
|
||||||
|
- **https://vscode.mnemo-cards.online/** → VSCode Server (code-server on port 8443)
|
||||||
|
- **https://code.mnemo-cards.online/** → Forgejo Git Server (port 3000)
|
||||||
|
|
||||||
|
### Fixed Components
|
||||||
|
|
||||||
|
#### 1. code-server Service
|
||||||
|
Created proper systemd service at `/etc/systemd/system/code-server.service`:
|
||||||
|
```ini
|
||||||
|
[Unit]
|
||||||
|
Description=code-server
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
Environment=PASSWORD=AGktOidxrah1KVC0
|
||||||
|
ExecStart=/usr/bin/code-server --bind-addr 127.0.0.1:8443 --auth password
|
||||||
|
WorkingDirectory=/root
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10
|
||||||
|
User=root
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
Configuration at `/root/.config/code-server/config.yaml`:
|
||||||
|
```yaml
|
||||||
|
bind-addr: 127.0.0.1:8443
|
||||||
|
auth: password
|
||||||
|
password: AGktOidxrah1KVC0
|
||||||
|
cert: false
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. nginx Configuration
|
||||||
|
Deployed proper nginx configuration for vscode.mnemo-cards.online:
|
||||||
|
- Location: `/etc/nginx/sites-available/vscode.mnemo-cards.online`
|
||||||
|
- Proxy: http://127.0.0.1:8443 (using IPv4, not localhost which resolves to IPv6)
|
||||||
|
- SSL: Let's Encrypt certificates
|
||||||
|
- Rate limiting: Configured for login and general access
|
||||||
|
- WebSocket support: Enabled for VSCode
|
||||||
|
|
||||||
|
## Deployment Scripts
|
||||||
|
|
||||||
|
Created the following scripts in `tools/deploy/`:
|
||||||
|
|
||||||
|
1. **fix-vscode-server.sh** - Diagnoses and fixes code-server installation and configuration
|
||||||
|
2. **check-nginx.sh** - Checks nginx status and reloads configuration
|
||||||
|
3. **deploy-vscode-nginx.sh** - Deploys VSCode nginx configuration to server
|
||||||
|
4. **fix-nginx-duplicates.sh** - Removes duplicate nginx configurations
|
||||||
|
5. **test-vscode-from-server.sh** - Tests VSCode connectivity from server
|
||||||
|
6. **test-vscode-final.sh** - Final tests of both URLs
|
||||||
|
|
||||||
|
## How to Use
|
||||||
|
|
||||||
|
### Quick Fix After Server Reboot
|
||||||
|
If VSCode Server is not accessible after server reboot, run:
|
||||||
|
```bash
|
||||||
|
cd /Users/dmitry/StudioProjects/mnemo_cards/tools/deploy
|
||||||
|
./fix-vscode-server.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Deploy nginx Configuration
|
||||||
|
To deploy or update nginx configuration:
|
||||||
|
```bash
|
||||||
|
cd /Users/dmitry/StudioProjects/mnemo_cards/tools/deploy
|
||||||
|
./deploy-vscode-nginx.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Test Connectivity
|
||||||
|
To test if everything is working:
|
||||||
|
```bash
|
||||||
|
cd /Users/dmitry/StudioProjects/mnemo_cards/tools/deploy
|
||||||
|
./test-vscode-final.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Access Information
|
||||||
|
|
||||||
|
- **URL**: https://vscode.mnemo-cards.online/
|
||||||
|
- **Username**: (no username required, password only)
|
||||||
|
- **Password**: AGktOidxrah1KVC0
|
||||||
|
|
||||||
|
## Service Management
|
||||||
|
|
||||||
|
### Check Status
|
||||||
|
```bash
|
||||||
|
ssh root@147.45.152.129
|
||||||
|
systemctl status code-server
|
||||||
|
```
|
||||||
|
|
||||||
|
### View Logs
|
||||||
|
```bash
|
||||||
|
ssh root@147.45.152.129
|
||||||
|
journalctl -u code-server -f
|
||||||
|
```
|
||||||
|
|
||||||
|
### Restart Service
|
||||||
|
```bash
|
||||||
|
ssh root@147.45.152.129
|
||||||
|
systemctl restart code-server
|
||||||
|
```
|
||||||
|
|
||||||
|
### Check nginx Status
|
||||||
|
```bash
|
||||||
|
ssh root@147.45.152.129
|
||||||
|
systemctl status nginx
|
||||||
|
nginx -t # Test configuration
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### VSCode Server Not Starting
|
||||||
|
1. Check if service is running: `systemctl status code-server`
|
||||||
|
2. Check logs: `journalctl -u code-server -n 50`
|
||||||
|
3. Verify port is listening: `ss -tuln | grep 8443`
|
||||||
|
4. Run fix script: `./fix-vscode-server.sh`
|
||||||
|
|
||||||
|
### nginx 502 Bad Gateway
|
||||||
|
1. Verify code-server is running on port 8443
|
||||||
|
2. Check nginx error logs: `tail -f /var/log/nginx/error.log`
|
||||||
|
3. Verify proxy_pass uses 127.0.0.1:8443 (not localhost)
|
||||||
|
|
||||||
|
### SSL Certificate Issues
|
||||||
|
Certificates are managed by Let's Encrypt and stored at:
|
||||||
|
```
|
||||||
|
/etc/letsencrypt/live/vscode.mnemo-cards.online/
|
||||||
|
```
|
||||||
|
|
||||||
|
To renew certificates:
|
||||||
|
```bash
|
||||||
|
ssh root@147.45.152.129
|
||||||
|
certbot renew
|
||||||
|
systemctl reload nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
```
|
||||||
|
Internet
|
||||||
|
↓
|
||||||
|
nginx (port 443) - SSL termination
|
||||||
|
↓
|
||||||
|
code-server (127.0.0.1:8443) - VSCode Server
|
||||||
|
↓
|
||||||
|
/root/ - Working directory
|
||||||
|
```
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- code-server runs as root user (WorkingDirectory=/root)
|
||||||
|
- Authentication is enabled with password
|
||||||
|
- WebSocket support is enabled for VSCode features
|
||||||
|
- Rate limiting is configured to prevent abuse
|
||||||
|
- Automatic restart is configured (Restart=always)
|
||||||
|
- Service is enabled to start on boot (enabled via systemctl)
|
||||||
|
|
||||||
|
## Recent Changes (2025-11-19)
|
||||||
|
|
||||||
|
1. ✅ Fixed code-server service configuration
|
||||||
|
2. ✅ Deployed nginx configuration
|
||||||
|
3. ✅ Fixed IPv6/IPv4 issue (localhost → 127.0.0.1)
|
||||||
|
4. ✅ Resolved domain conflict (removed code.mnemo-cards.online from VSCode config)
|
||||||
|
5. ✅ Enabled service auto-start on boot
|
||||||
|
6. ✅ Verified both URLs are working
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
🟢 **OPERATIONAL**
|
||||||
|
- vscode.mnemo-cards.online - Working ✅
|
||||||
|
- code.mnemo-cards.online - Working ✅ (Forgejo)
|
||||||
|
|
||||||
|
|
@ -27,7 +27,7 @@ rm server_build.exe
|
||||||
if [ -d "/etc/letsencrypt/live/mnemo-cards.online" ] && [ -f "/etc/letsencrypt/live/mnemo-cards.online/fullchain.pem" ]; then
|
if [ -d "/etc/letsencrypt/live/mnemo-cards.online" ] && [ -f "/etc/letsencrypt/live/mnemo-cards.online/fullchain.pem" ]; then
|
||||||
echo "✅ Let's Encrypt multi-domain сертификаты найдены. Запускаем в HTTPS-only режиме"
|
echo "✅ Let's Encrypt multi-domain сертификаты найдены. Запускаем в HTTPS-only режиме"
|
||||||
# Обновляем systemd сервис для HTTPS-only режима
|
# Обновляем systemd сервис для HTTPS-only режима
|
||||||
sudo sed -i 's|ExecStart=$BACKEND_DIR/server.exe.*|ExecStart=$BACKEND_DIR/server.exe --certs /etc/letsencrypt/live/mnemo-cards.online -a 0.0.0.0 -p 8443|' /etc/systemd/system/mnemo_cards_server.service
|
sudo sed -i 's|ExecStart=$BACKEND_DIR/server.exe.*|ExecStart=$BACKEND_DIR/server.exe --certs /etc/letsencrypt/live/mnemo-cards.online -a 0.0.0.0 -p 8081|' /etc/systemd/system/mnemo_cards_server.service
|
||||||
else
|
else
|
||||||
echo "⚠️ Let's Encrypt сертификаты не найдены или повреждены. Пытаемся создать..."
|
echo "⚠️ Let's Encrypt сертификаты не найдены или повреждены. Пытаемся создать..."
|
||||||
|
|
||||||
|
|
@ -71,7 +71,7 @@ else
|
||||||
echo "✅ Let's Encrypt multi-domain сертификат успешно создан!"
|
echo "✅ Let's Encrypt multi-domain сертификат успешно создан!"
|
||||||
echo "🚀 Запускаем в HTTPS-only режиме"
|
echo "🚀 Запускаем в HTTPS-only режиме"
|
||||||
# Обновляем systemd сервис для HTTPS-only режима (используем общий сертификат)
|
# Обновляем systemd сервис для HTTPS-only режима (используем общий сертификат)
|
||||||
sudo sed -i 's|ExecStart=$BACKEND_DIR/server.exe.*|ExecStart=$BACKEND_DIR/server.exe --certs /etc/letsencrypt/live/mnemo-cards.online -a 0.0.0.0 -p 8443|' /etc/systemd/system/mnemo_cards_server.service
|
sudo sed -i 's|ExecStart=$BACKEND_DIR/server.exe.*|ExecStart=$BACKEND_DIR/server.exe --certs /etc/letsencrypt/live/mnemo-cards.online -a 0.0.0.0 -p 8081|' /etc/systemd/system/mnemo_cards_server.service
|
||||||
else
|
else
|
||||||
echo "❌ Не удалось создать Let's Encrypt сертификат. Запускаем в HTTP режиме"
|
echo "❌ Не удалось создать Let's Encrypt сертификат. Запускаем в HTTP режиме"
|
||||||
echo "💡 Возможные причины и решения:"
|
echo "💡 Возможные причины и решения:"
|
||||||
|
|
|
||||||
|
|
@ -33,10 +33,10 @@ rm server_build.exe
|
||||||
# Check certificates and configure mode
|
# Check certificates and configure mode
|
||||||
if [ -d "/etc/letsencrypt/live/api.memo-cards.online" ]; then
|
if [ -d "/etc/letsencrypt/live/api.memo-cards.online" ]; then
|
||||||
echo "✅ Let's Encrypt certificates found. Configuring dual mode..."
|
echo "✅ Let's Encrypt certificates found. Configuring dual mode..."
|
||||||
sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe --dual --certs /etc/letsencrypt/live/api.memo-cards.online -a 0.0.0.0 -p 8443|' /etc/systemd/system/mnemo_cards_server.service
|
sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe --dual --certs /etc/letsencrypt/live/api.memo-cards.online -a 0.0.0.0 -p 8081|' /etc/systemd/system/mnemo_cards_server.service
|
||||||
else
|
else
|
||||||
echo "⚠️ No certificates found. Configuring HTTP mode..."
|
echo "⚠️ No certificates found. Configuring HTTP mode..."
|
||||||
sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe -a 0.0.0.0 -p 8443|' /etc/systemd/system/mnemo_cards_server.service
|
sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe -a 0.0.0.0 -p 8081|' /etc/systemd/system/mnemo_cards_server.service
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Reload and restart
|
# Reload and restart
|
||||||
|
|
|
||||||
111
tools/deploy/fix-backend-port-conflict.sh
Executable file
111
tools/deploy/fix-backend-port-conflict.sh
Executable file
|
|
@ -0,0 +1,111 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Script to fix backend server port conflict (8443 is used by code-server)
|
||||||
|
# Backend should use port 8081
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
SERVER_IP="147.45.152.129"
|
||||||
|
SERVER_USER="root"
|
||||||
|
|
||||||
|
echo "🔧 Fixing backend server port conflict..."
|
||||||
|
echo "Backend will be moved from port 8443 to port 8081"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
ssh "$SERVER_USER@$SERVER_IP" << 'ENDSSH'
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "📊 Step 1: Checking current port usage..."
|
||||||
|
echo "Port 8443:"
|
||||||
|
ss -tuln | grep 8443 || echo " Not in use"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Port 8081:"
|
||||||
|
ss -tuln | grep 8081 || echo " Not in use"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🔧 Step 2: Updating backend systemd service to use port 8081..."
|
||||||
|
|
||||||
|
# Backup current service file
|
||||||
|
cp /etc/systemd/system/mnemo_cards_server.service /etc/systemd/system/mnemo_cards_server.service.backup.$(date +%Y%m%d_%H%M%S)
|
||||||
|
|
||||||
|
# Update port from 8443 to 8081
|
||||||
|
sed -i 's/-p 8443/-p 8081/g' /etc/systemd/system/mnemo_cards_server.service
|
||||||
|
|
||||||
|
echo "Updated service file:"
|
||||||
|
cat /etc/systemd/system/mnemo_cards_server.service
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🔧 Step 3: Checking nginx API configuration..."
|
||||||
|
|
||||||
|
if [ -f /etc/nginx/sites-available/api ]; then
|
||||||
|
echo "Current API nginx config proxy_pass:"
|
||||||
|
grep "proxy_pass" /etc/nginx/sites-available/api | head -3
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Updating nginx to proxy to port 8081..."
|
||||||
|
|
||||||
|
# Backup nginx config
|
||||||
|
cp /etc/nginx/sites-available/api /etc/nginx/sites-available/api.backup.$(date +%Y%m%d_%H%M%S)
|
||||||
|
|
||||||
|
# Update proxy_pass to use port 8081
|
||||||
|
sed -i 's|proxy_pass https://localhost:8443|proxy_pass https://localhost:8081|g' /etc/nginx/sites-available/api
|
||||||
|
sed -i 's|proxy_pass http://localhost:8443|proxy_pass http://localhost:8081|g' /etc/nginx/sites-available/api
|
||||||
|
|
||||||
|
echo "Updated proxy_pass:"
|
||||||
|
grep "proxy_pass" /etc/nginx/sites-available/api | head -3
|
||||||
|
else
|
||||||
|
echo "⚠️ API nginx config not found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "📊 Step 4: Testing nginx configuration..."
|
||||||
|
if /usr/sbin/nginx -t 2>&1; then
|
||||||
|
echo "✅ nginx config is valid"
|
||||||
|
else
|
||||||
|
echo "❌ nginx config is invalid, restoring backup..."
|
||||||
|
cp /etc/nginx/sites-available/api.backup.$(date +%Y%m%d_%H%M%S | sort -r | head -1) /etc/nginx/sites-available/api
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🔄 Step 5: Reloading systemd and nginx..."
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl reload nginx
|
||||||
|
echo "✅ Reloaded"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🚀 Step 6: Starting backend server..."
|
||||||
|
systemctl restart mnemo_cards_server
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "⏳ Waiting for server to start..."
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "📊 Step 7: Checking backend server status..."
|
||||||
|
systemctl status mnemo_cards_server --no-pager || true
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "📊 Step 8: Checking if port 8081 is now listening..."
|
||||||
|
if ss -tuln | grep 8081; then
|
||||||
|
echo "✅ Backend is listening on port 8081"
|
||||||
|
else
|
||||||
|
echo "⚠️ Backend is not listening on port 8081 yet"
|
||||||
|
echo "Checking logs:"
|
||||||
|
journalctl -u mnemo_cards_server -n 20 --no-pager
|
||||||
|
fi
|
||||||
|
|
||||||
|
ENDSSH
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "✅ Done!"
|
||||||
|
echo ""
|
||||||
|
echo "📝 Summary:"
|
||||||
|
echo " - code-server: 127.0.0.1:8443 (VSCode)"
|
||||||
|
echo " - backend: 0.0.0.0:8081 (API)"
|
||||||
|
echo ""
|
||||||
|
echo "🌐 URLs:"
|
||||||
|
echo " - API: https://api.memo-cards.online:8081/"
|
||||||
|
echo " - VSCode: https://vscode.mnemo-cards.online/"
|
||||||
|
|
||||||
Loading…
Reference in a new issue