25 KiB
Отчет по ошибкам развертывания на VDS
📋 Обзор
Документ содержит полный список ошибок, обнаруженных при развертывании приложения Digital Legal Entity на VDS сервере 185.221.214.140.
🚨 Обнаруженные ошибки
1. HTTP ERROR 503 - Service Unavailable
Описание: При обращении к http://185.221.214.140 возвращается ошибка 503.
Детали:
- Системный nginx уже запущен на портах 80/443
- Наш
dapp-frontend-nginxпытается занять те же порты - Контейнеры запускаются, но недоступны извне
Логи ошибок:
Error response from daemon: failed to set up container networking:
driver failed programming external connectivity on endpoint dapp-frontend-nginx:
failed to bind host port for 0.0.0.0:80:172.18.0.7:80/tcp: address already in use
2. Конфликт портов nginx
Проблема: Два nginx сервера пытаются использовать одни порты.
Системный nginx:
- Установлен в системе Linux
- Занимает порты 80 (HTTP) и 443 (HTTPS)
- Статус:
nginx: master process
Наш frontend-nginx:
- Docker контейнер
dapp-frontend-nginx - Пытается занять порты 80/443
- Статус: не может запуститься
3. Проблемы с health checks
Vector Search контейнер:
- Статус:
unhealthy - Причина: health check endpoint недоступен
- Влияние: блокирует запуск зависимых сервисов
Backend контейнер:
- Статус:
health: starting - Зависит от vector-search
- Не запускается из-за failed dependencies
4. Ошибки конфигурации nginx в контейнере
Frontend-nginx контейнер:
- Статус:
Restarting (1) - Ошибка:
invalid number of arguments in "server_name" directive in /etc/nginx/nginx.conf:37 - Причина: неправильная конфигурация nginx внутри контейнера
Логи ошибок:
2025/10/03 06:02:15 [emerg] 1#1: invalid number of arguments in "server_name" directive in /etc/nginx/nginx.conf:37
nginx: [emerg] invalid number of arguments in "server_name" directive in /etc/nginx/nginx.conf:37
5. Проблемы с системным nginx
Ошибка запуска:
- Команда:
systemctl restart nginx - Результат:
Job for nginx.service failed because the control process exited with error code
Логи ошибок:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] still could not bind()
6. Ошибки подключения к базе данных
Backend контейнер:
- Ошибка:
SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string - Причина: неправильная передача пароля для PostgreSQL
- Влияние: backend не может подключиться к базе данных
Логи ошибок:
Ошибка подключения к базе данных: Error: SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string
at /app/node_modules/pg-pool/index.js:45:11
7. Ошибки YAML синтаксиса в docker-compose.yml
Проблема: Неправильный формат переменных окружения в docker-compose.yml
Ошибки:
yaml: line 20: did not find expected '-' indicator
yaml: line 20: did not find expected key
Причина: Смешанный формат переменных окружения:
- В секции postgres:
- KEY=value(неправильно) - В секции backend:
- KEY=value(правильно для backend)
8. Отсутствующие таблицы в базе данных
Backend контейнер:
- Ошибка:
relation "email_settings" does not exist - Ошибка:
relation "db_settings" does not exist - Ошибка:
relation "session" does not exist
Логи ошибок:
error: Unhandled Rejection: relation "email_settings" does not exist {"code":"42P01"}
error: [DatabaseConnectionManager] Ошибка инициализации: relation "db_settings" does not exist {"code":"42P01"}
error: Unhandled Rejection: relation "session" does not exist {"code":"42P01"}
Диагностика базы данных:
docker exec dapp-postgres psql -U dapp_user -d dapp_db -c '\dt'
Did not find any relations.
Причина: База данных полностью пустая - отсутствует схема и все таблицы
Влияние: Backend не может полностью инициализироваться, API недоступен
9. Проблемы с пробросом портов
Frontend контейнер:
- Порт 5173 не проброшен наружу
- Контейнер запущен, но недоступен извне
- Статус:
Up (health: starting)
Frontend-nginx контейнер:
- Порт 9000 не проброшен наружу
- Контейнер не запускается из-за конфликтов
10. Проблемы с переменными окружения
Отсутствующие переменные в .env:
DB_NAME,DB_USER,DB_PASSWORDNODE_ENV,PORTOLLAMA_MODEL,OLLAMA_EMBEDDINGS_MODEL
Неправильная передача в docker-compose.yml:
- Переменные не передаются в контейнеры
- Backend использует "дефолтные настройки подключения к БД"
11. Отсутствие миграций базы данных
Проблема: Схема базы данных не создается автоматически
Найденные файлы:
./backend/scripts/run-migrations.js- скрипт для запуска миграций- Скрипт ищет SQL файлы в
./backend/db/migrations/
Диагностика:
find ./backend -name "*.sql" -o -name "*schema*" -o -name "*migration*"
# Результат: только node_modules файлы, нет SQL миграций
Причина: Отсутствуют файлы миграций для создания схемы базы данных
Влияние: База данных остается пустой, backend не может инициализироваться
12. Проверка ключа шифрования
Статус ключа шифрования:
- Локальный ключ:
MsPbvDsNXra/kqw4XgnaustFDcuuSvZY1TwhYrpxMnE= - Ключ на VDS:
MsPbvDsNXra/kqw4XgnaustFDcuuSvZY1TwhYrpxMnE= - Статус: Ключи идентичны, передача корректна
Монтирование в контейнер:
- Ключ доступен в
/app/ssl/full_db_encryption.key - Права доступа:
-rw------- 1 root root 45
Вывод: Проблема не в ключе шифрования
📊 Статистика ошибок
По типам:
- База данных: 4 ошибки (отсутствие схемы, миграций, таблиц)
- Конфигурация nginx: 3 ошибки
- Проблемы с портами: 2 ошибки
- Docker Compose: 2 ошибки
- Health checks: 1 ошибка
По критичности:
- Критические: 5 ошибок (блокируют работу приложения)
- Серьезные: 5 ошибок (влияют на функциональность)
- Предупреждения: 2 ошибки (не блокируют, но требуют внимания)
🔍 Диагностические данные
Статус контейнеров:
NAMES STATUS PORTS
dapp-frontend-nginx Restarting (1) 11 seconds ago
dapp-frontend Up 25 seconds (health: starting) 5173/tcp
dapp-backend Up 12 minutes (unhealthy) 0.0.0.0:8000->8000/tcp
dapp-vector-search Up 12 minutes (unhealthy) 8001/tcp
dapp-postgres Up 12 minutes (healthy) 5432/tcp
dapp-ollama Up 12 minutes (healthy) 11434/tcp
Занятые порты:
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 12785/nginx: master
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 12785/nginx: master
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 40287/docker-proxy
Процессы nginx:
root 12785 0.0 0.1 35468 9160 ? Ss Oct02 0:00 nginx: master process nginx -c /etc/nginx/nginx.conf
www-data 32875 0.0 0.1 36820 11032 ? S 05:11 0:00 nginx: worker process
www-data 32876 0.0 0.1 36820 10904 ? S 05:11 0:00 nginx: worker process
www-data 32877 0.0 0.1 36820 10776 ? S 05:11 0:00 nginx: worker process
www-data 32878 0.0 0.1 36820 10648 ? S 05:11 0:00 nginx: worker process
📝 Заключение
Обнаружено 20 различных типов ошибок при развертывании приложения на VDS сервере. Основные проблемы связаны с:
- Отсутствием схемы базы данных - база полностью пустая, нет таблиц и миграций
- Конфликтами портов между системным и контейнерным nginx
- Неправильной конфигурацией docker-compose.yml и переменных окружения
- Проблемами с health checks и зависимостями между сервисами
Ключевая проблема: Данные PostgreSQL импортированы в volume с неправильным именем. Контейнер читает из пустой базы данных, хотя данные есть в другом volume.
РЕШЕНО:
- База данных восстановлена, содержит 37 таблиц
- Backend подключается к базе данных
- AI сервис (Ollama) работает корректно
- Все основные сервисы функционируют
Ключ шифрования: Передан корректно, проблема не в нем.
Error 13: Проверка целостности архива данных
Описание: Проверка целостности архива docker-images-and-data.tar.gz на VDS.
Детали:
- Размер архива: 8.4GB
- Команда
tar -tfне возвращала содержимое - Подозрение на повреждение архива
- Проверка:
tar -xzf docker-images-and-data.tar.gz -C test-extract/ - Результат: Архив успешно распакован
Содержимое архива:
- Docker образы: 7 файлов (dapp-backend.tar, dapp-frontend.tar, dapp-frontend-nginx.tar, dapp-ollama.tar, dapp-postgres.tar, dapp-vector-search.tar, dapp-webssh-agent.tar)
- Данные volumes: 3 файла (ollama_data.tar.gz, postgres_data.tar.gz, vector_search_data.tar.gz)
Влияние: Критическое - без корректного архива невозможно восстановить данные приложения.
Статус: ✅ РЕШЕНО - архив целый и содержит все необходимые данные.
Error 14: Несоответствие имен Docker volumes
Описание: Данные PostgreSQL импортированы в volume с неправильным именем.
Детали:
- Скрипт импорта создает volume:
digital_legal_entitydle_postgres_data - Контейнер PostgreSQL использует volume:
dapp_postgres_data - Данные находятся в правильном volume, но контейнер читает из пустого
- Проверка:
docker inspect dapp-postgres | grep Mounts - Результат: Контейнер монтирует
dapp_postgres_data, а данные вdigital_legal_entitydle_postgres_data
Содержимое volumes:
dapp_postgres_data: пустая база данных (только системные файлы)digital_legal_entitydle_postgres_data: содержит базы данных (директории 1, 4, 5, 16384)
Влияние: Критическое - backend не может найти таблицы, так как читает из пустой базы данных.
Статус: ✅ РЕШЕНО - данные скопированы в правильный volume, база данных восстановлена.
Решение:
- Остановлен и удален контейнер PostgreSQL
- Удален пустой volume
dapp_postgres_data - Скопированы данные из
digital_legal_entitydle_postgres_dataвdapp_postgres_data - Запущен новый контейнер PostgreSQL с правильным volume
- Проверено: база данных
dapp_dbсодержит 37 таблиц, включаяemail_settings,db_settings,session
Error 15: Контейнеры в разных Docker сетях
Описание: Backend не может подключиться к PostgreSQL из-за разных Docker сетей.
Детали:
dapp-backendнаходится в сетиdapp_defaultdapp-postgresнаходится в сетиbridge- Backend пытается подключиться к хосту
postgres, но не может его найти - Ошибка:
getaddrinfo EAI_AGAIN postgres
Влияние: Критическое - backend не может подключиться к базе данных.
Статус: 🔄 В ПРОЦЕССЕ - требуется подключение контейнеров к одной сети.
Error 16: Неправильное имя хоста в переменных окружения
Описание: Backend ищет хост postgres, но контейнер называется dapp-postgres.
Детали:
- Переменная окружения:
DB_HOST=postgres - Реальное имя контейнера:
dapp-postgres - Контейнеры подключены к одной сети
dapp_default - Сетевое соединение работает (ping успешен)
- Проблема в DNS разрешении имени
postgres
Влияние: Критическое - backend не может найти PostgreSQL по имени хоста.
Статус: ✅ РЕШЕНО - backend перезапущен с правильной переменной окружения DB_HOST=dapp-postgres.
Решение:
- Остановлен и удален старый контейнер backend
- Запущен новый контейнер с правильными переменными окружения
- Проверено: API отвечает, база данных подключена
Error 17: Проблема с расшифровкой данных
Описание: Ошибка расшифровки base64 данных в базе данных.
Детали:
- Ошибка:
invalid symbol "-" found while decoding base64 sequence - Проблема в функции
decrypt_textPostgreSQL - Данные в базе зашифрованы, но ключ шифрования не подходит
- Влияет на EmailBotService и DbSettingsService
Влияние: Среднее - некоторые функции могут не работать из-за проблем с расшифровкой.
Статус: 🔄 В ПРОЦЕССЕ - требуется проверка ключа шифрования.
Error 18: AI сервис недоступен
Описание: Ollama сервис не отвечает на запросы.
Детали:
- Health check: AI сервис возвращает ошибку
- URL:
http://localhost:11434 - Ошибка:
fetch failed - Vector Search работает корректно
Влияние: Среднее - AI функции недоступны.
Статус: ✅ РЕШЕНО - добавлена переменная окружения OLLAMA_BASE_URL=http://ollama:11434.
Решение:
- Обнаружена проблема в коде:
ai-assistant.jsиспользовалlocalhost:11434по умолчанию - Добавлена переменная окружения
OLLAMA_BASE_URL=http://ollama:11434 - Backend перезапущен с правильными настройками
- Проверено: AI сервис работает, 1 модель доступна
Error 19: Проблема с расшифровкой данных
Описание: Ошибка расшифровки base64 данных в базе данных.
Детали:
- Ошибка:
invalid symbol "-" found while decoding base64 sequence - Проблема в функции
decrypt_textPostgreSQL - Данные в базе зашифрованы, но ключ шифрования не подходит
- Влияет на EmailBotService и DbSettingsService
Влияние: Среднее - некоторые функции могут не работать из-за проблем с расшифровкой.
Статус: ✅ РЕШЕНО - ключ шифрования смонтирован в контейнер.
Решение:
- Обнаружено, что ключ шифрования не был смонтирован в контейнер backend
- Ключ находился на хосте VDS в
/home/docker/dapp/ssl/keys/full_db_encryption.key - Backend перезапущен с монтированием
-v /home/docker/dapp/ssl:/app/ssl - Проверено: ключ доступен в контейнере, логи показывают "🔍 Ключ шифрования: установлен"
Error 20: Frontend недоступен (502 Bad Gateway)
Описание: Домен hb3-accelerator.com возвращает ошибку 502 Bad Gateway.
Детали:
- Frontend-nginx контейнер постоянно перезапускается
- Ошибка nginx:
invalid number of arguments in "server_name" directive in /etc/nginx/nginx.conf:37 - Frontend контейнер нездоров (unhealthy)
- Данные frontend-nginx volumes не импортированы
Влияние: Критическое - приложение недоступно через веб-интерфейс.
Статус: ✅ РЕШЕНО - frontend-nginx контейнер запущен с правильными переменными окружения.
Решение:
- Обнаружена проблема: переменные окружения
DOMAINиBACKEND_CONTAINERне были установлены в контейнере - Контейнер перезапущен с переменными:
DOMAIN=hb3-accelerator.comиBACKEND_CONTAINER=dapp-backend - Nginx конфигурация успешно обработана, контейнер запущен без ошибок
- Frontend доступен через порт 9000:
http://185.221.214.140:9000
ТЕКУЩИЙ СТАТУС: Все основные сервисы работают:
- ✅ Database: OK
- ✅ AI: OK (1 модель доступна)
- ✅ Vector Search: OK
- ✅ Шифрование: OK
- ✅ Frontend: OK (доступен через порт 9000)
- ⚠️ WebSocket: Частично работает (подключение есть, но nginx не проксирует
/ws)
Error 21: WebSocket не проксируется через nginx
Описание: Frontend подключается к WebSocket, но nginx не проксирует соединения на /ws к backend.
Детали:
- WebSocket подключение устанавливается:
[WebSocket] Подключение установлено - API запросы работают корректно: все
/api/*запросы успешны - Проблема: nginx конфигурация не содержит секцию для
/wsendpoint - Результат: frontend не получает real-time обновления после подключения кошелька
Логи frontend:
[WebSocket] Подключаемся к: wss://hb3-accelerator.com/ws
[WebSocket] Подключение установлено
🌐 [AXIOS] Отправляем запрос: /api/auth/verify
🌐 [AXIOS] Получен ответ: status 200
Auth check response: {authenticated: false, ...}
Влияние: Среднее - приложение работает, но отсутствуют real-time обновления аутентификации.
Статус: 🔄 В ПРОЦЕССЕ - требуется добавление поддержки WebSocket в nginx конфигурацию.
Необходимое решение: Добавить в nginx конфигурацию секцию:
location /ws {
proxy_pass http://dapp-backend:8000/ws;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
📊 ДИАГНОСТИКА VDS СЕРВЕРА 185.221.214.140
🖥️ СИСТЕМА:
- ОС: Ubuntu 24.04.2 LTS (Noble Numbat)
- Ядро: Linux 6.8.0-63-generic
- Архитектура: x86_64
- Память: 7.8GB (используется 1.6GB, доступно 6.1GB)
- Диск: 59GB (используется 35GB, доступно 22GB - 63%)
- IP: 185.221.214.140/24
🔧 УСТАНОВЛЕННЫЕ ПРОГРАММЫ:
- Docker: 28.5.0 ✅
- Docker Compose: v2.39.4 ✅
- Nginx: 1.24.0 (Ubuntu) ✅
- Node.js: Не установлен (используется в контейнерах)
- SSH: Активен ✅
🐳 DOCKER КОНТЕЙНЕРЫ (6 из 6 работают):
- dapp-frontend-nginx: Up 4 minutes (порт 9000) ✅
- dapp-frontend: Up 26 minutes ✅
- dapp-backend: Up 37 minutes (порт 8000) ✅
- dapp-postgres: Up About an hour (порт 5432) ✅
- dapp-vector-search: Up 2 hours (unhealthy) ⚠️
- dapp-ollama: Up 2 hours (healthy) ✅
🌐 СЕТЬ И ПОРТЫ:
- Открытые порты:
- 80, 443 (системный nginx)
- 8000 (backend API)
- 9000 (frontend nginx)
- 5432 (PostgreSQL)
- Docker сети: dapp_default, bridge, host, none
- Docker volumes: 10 volumes (данные приложения)
🔒 SSL И БЕЗОПАСНОСТЬ:
- SSL сертификат: hb3-accelerator.com ✅
- Nginx конфигурации: 2 активных сайта
- SSH атаки: Обнаружены попытки взлома с IP 185.91.127.114 ⚠️
📈 СТАТУС ПРИЛОЖЕНИЯ:
- Frontend: ✅ Доступен (https://hb3-accelerator.com)
- Backend API: ✅ Работает (порт 8000)
- Database: ✅ 37 таблиц, все данные восстановлены
- AI сервис: ✅ 1 модель доступна
- WebSocket: ⚠️ Подключение есть, но nginx не проксирует
/ws
🚨 ПРОБЛЕМЫ:
- Vector Search: unhealthy (не критично)
- WebSocket: Нужна настройка проксирования в nginx
- SSH атаки: Рекомендуется усилить защиту
✅ ВЫВОД:
VDS сервер настроен корректно, все основные сервисы работают. Приложение Digital Legal Entity полностью функционально и доступно через веб-интерфейс. Остается только настроить WebSocket проксирование для полной функциональности.
Дата создания: 2025-10-03
Версия: 1.2
Статус: Ошибки зафиксированы, диагностика VDS завершена