Enhance deployment script with dynamic installation directory and improved error handling

- Updated `deploy-ubuntu.sh` to allow users to choose the installation directory dynamically.
- Added checks for required files (`package.json`, `requirements.txt`, and `migrate.py`) with appropriate error messages.
- Improved feedback during the installation process, including detailed logging for service status and troubleshooting steps.
- Enhanced user experience with clearer prompts and success/error messages throughout the deployment process.
This commit is contained in:
Primakov Alexandr Alexandrovich 2025-10-13 00:32:08 +03:00
parent 6fbd421b46
commit 89ab6b14fe

View File

@ -60,29 +60,60 @@ echo -e "${GREEN}✓ Зависимости проверены${NC}"
# 2. Определение пути установки
echo -e "${YELLOW}[2/10] Настройка путей...${NC}"
INSTALL_DIR="/opt/ai-review"
CURRENT_DIR=$(pwd)
# Определить, откуда запущен скрипт
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CURRENT_DIR="$SCRIPT_DIR"
# Спросить пользователя, куда устанавливать
echo "Текущая директория: $CURRENT_DIR"
echo ""
echo "Выберите директорию установки:"
echo " 1) Использовать текущую директорию ($CURRENT_DIR)"
echo " 2) Установить в /opt/ai-review"
echo ""
read -p "Выбор [1/2] (по умолчанию 1): " install_choice
install_choice=${install_choice:-1}
if [ "$install_choice" = "2" ]; then
INSTALL_DIR="/opt/ai-review"
NEED_COPY=true
else
INSTALL_DIR="$CURRENT_DIR"
NEED_COPY=false
fi
echo "Директория установки: $INSTALL_DIR"
# 3. Копирование файлов
echo -e "${YELLOW}[3/10] Копирование файлов проекта...${NC}"
# 3. Копирование файлов (если нужно)
echo -e "${YELLOW}[3/10] Подготовка файлов проекта...${NC}"
if [ "$CURRENT_DIR" != "$INSTALL_DIR" ]; then
if [ "$NEED_COPY" = true ]; then
echo "Копирование в $INSTALL_DIR..."
mkdir -p "$INSTALL_DIR"
cp -r "$CURRENT_DIR"/* "$INSTALL_DIR"/
cp -r "$CURRENT_DIR"/* "$INSTALL_DIR"/ || {
echo -e "${RED}✗ Ошибка копирования файлов${NC}"
exit 1
}
chown -R "$REAL_USER":"$REAL_USER" "$INSTALL_DIR"
echo -e "${GREEN}✓ Файлы скопированы${NC}"
else
echo "Используем текущую директорию"
chown -R "$REAL_USER":"$REAL_USER" "$INSTALL_DIR"
echo -e "${GREEN}✓ Права установлены${NC}"
fi
cd "$INSTALL_DIR"
echo -e "${GREEN}✓ Файлы скопированы${NC}"
# 4. Сборка frontend
echo -e "${YELLOW}[4/10] Сборка frontend...${NC}"
cd frontend
# Проверить наличие package.json
if [ ! -f "package.json" ]; then
echo -e "${RED}Не найден package.json${NC}"
exit 1
fi
# Создаем .env.production для относительных путей
cat > .env.production << 'EOF'
# Production - используем относительные пути
@ -90,19 +121,77 @@ VITE_API_URL=/api
VITE_WS_URL=
EOF
sudo -u "$REAL_USER" npm install
sudo -u "$REAL_USER" npm run build
echo "Установка npm зависимостей..."
sudo -u "$REAL_USER" npm install || {
echo -e "${RED}✗ Ошибка установки npm зависимостей${NC}"
exit 1
}
echo "Сборка frontend..."
sudo -u "$REAL_USER" npm run build || {
echo -e "${RED}✗ Ошибка сборки frontend${NC}"
exit 1
}
# Проверить, что build создан
if [ ! -d "../backend/public" ]; then
echo -e "${RED}✗ Frontend не собрался (отсутствует backend/public)${NC}"
exit 1
fi
cd ..
echo -e "${GREEN}✓ Frontend собран${NC}"
echo -e "${GREEN}✓ Frontend собран (файлов: $(ls -1 backend/public | wc -l))${NC}"
# 5. Установка Python зависимостей
echo -e "${YELLOW}[5/10] Установка Python зависимостей...${NC}"
cd backend
sudo -u "$REAL_USER" python3 -m venv venv
sudo -u "$REAL_USER" bash -c "source venv/bin/activate && pip install --upgrade pip && pip install -r requirements.txt"
cd ..
# Проверить наличие requirements.txt
if [ ! -f "requirements.txt" ]; then
echo -e "${RED}Не найден requirements.txt${NC}"
exit 1
fi
echo "Создание Python virtual environment..."
sudo -u "$REAL_USER" python3 -m venv venv || {
echo -e "${RED}✗ Ошибка создания venv${NC}"
exit 1
}
# Проверить, что venv создан
if [ ! -d "venv" ]; then
echo -e "${RED}✗ venv не создан${NC}"
exit 1
fi
echo "Установка Python пакетов..."
sudo -u "$REAL_USER" bash -c "source venv/bin/activate && pip install --upgrade pip && pip install -r requirements.txt" || {
echo -e "${RED}✗ Ошибка установки Python зависимостей${NC}"
exit 1
}
echo -e "${GREEN}✓ Python зависимости установлены${NC}"
# Применить миграции БД
echo "Применение миграций БД..."
if [ -f "migrate.py" ]; then
sudo -u "$REAL_USER" bash -c "source venv/bin/activate && python migrate.py" || {
echo -e "${YELLOW}⚠️ Предупреждение: миграции не применились${NC}"
}
# Проверить, что БД создана
if [ -f "review.db" ]; then
echo -e "${GREEN}✓ База данных создана${NC}"
else
echo -e "${YELLOW}⚠️ База данных будет создана при первом запуске${NC}"
fi
else
echo -e "${YELLOW}⚠️ Скрипт миграции не найден, БД будет создана автоматически${NC}"
fi
cd ..
echo -e "${GREEN}✓ Backend настроен${NC}"
# 6. Настройка .env
echo -e "${YELLOW}[6/10] Настройка конфигурации...${NC}"
@ -191,14 +280,26 @@ systemctl enable ai-review.service
systemctl start ai-review.service
# Ждем запуска
sleep 3
echo "Ожидание запуска (5 секунд)..."
sleep 5
# Проверка статуса
if systemctl is-active --quiet ai-review.service; then
echo -e "${GREEN}✓ Сервис успешно запущен${NC}"
else
echo -e "${RED}✗ Ошибка запуска сервиса${NC}"
echo "Проверьте логи: journalctl -u ai-review.service -n 50"
echo ""
echo -e "${YELLOW}Последние 30 строк логов:${NC}"
journalctl -u ai-review.service -n 30 --no-pager
echo ""
echo -e "${YELLOW}Для детальной диагностики запустите:${NC}"
echo " journalctl -u ai-review.service -n 100"
echo " cd $INSTALL_DIR/backend && source venv/bin/activate && python -m uvicorn app.main:app"
echo ""
echo -e "${YELLOW}Проверьте что:${NC}"
echo " 1. venv создан: ls -la $INSTALL_DIR/backend/venv"
echo " 2. Frontend собран: ls -la $INSTALL_DIR/backend/public"
echo " 3. .env настроен: cat $INSTALL_DIR/backend/.env"
exit 1
fi
@ -293,6 +394,11 @@ echo " 1. Отредактировать $INSTALL_DIR/backend/.env"
echo " 2. Добавить токены для Git платформ"
echo " 3. Настроить firewall (разрешить порт 80/443)"
echo ""
echo -e "${YELLOW}📦 Проверка установки:${NC}"
echo " Backend venv: $([ -d $INSTALL_DIR/backend/venv ] && echo '✓' || echo '✗')"
echo " Backend DB: $([ -f $INSTALL_DIR/backend/review.db ] && echo '✓' || echo '⚠️ будет создана')"
echo " Frontend build: $([ -d $INSTALL_DIR/backend/public ] && echo '✓' || echo '✗')"
echo ""
echo -e "${GREEN}✨ Готово к работе!${NC}"
echo ""