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:
parent
6fbd421b46
commit
89ab6b14fe
136
deploy-ubuntu.sh
136
deploy-ubuntu.sh
@ -60,29 +60,60 @@ echo -e "${GREEN}✓ Зависимости проверены${NC}"
|
|||||||
# 2. Определение пути установки
|
# 2. Определение пути установки
|
||||||
echo -e "${YELLOW}[2/10] Настройка путей...${NC}"
|
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 "Текущая директория: $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"
|
echo "Директория установки: $INSTALL_DIR"
|
||||||
|
|
||||||
# 3. Копирование файлов
|
# 3. Копирование файлов (если нужно)
|
||||||
echo -e "${YELLOW}[3/10] Копирование файлов проекта...${NC}"
|
echo -e "${YELLOW}[3/10] Подготовка файлов проекта...${NC}"
|
||||||
|
|
||||||
if [ "$CURRENT_DIR" != "$INSTALL_DIR" ]; then
|
if [ "$NEED_COPY" = true ]; then
|
||||||
echo "Копирование в $INSTALL_DIR..."
|
echo "Копирование в $INSTALL_DIR..."
|
||||||
mkdir -p "$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"
|
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
|
fi
|
||||||
|
|
||||||
cd "$INSTALL_DIR"
|
cd "$INSTALL_DIR"
|
||||||
echo -e "${GREEN}✓ Файлы скопированы${NC}"
|
|
||||||
|
|
||||||
# 4. Сборка frontend
|
# 4. Сборка frontend
|
||||||
echo -e "${YELLOW}[4/10] Сборка frontend...${NC}"
|
echo -e "${YELLOW}[4/10] Сборка frontend...${NC}"
|
||||||
cd frontend
|
cd frontend
|
||||||
|
|
||||||
|
# Проверить наличие package.json
|
||||||
|
if [ ! -f "package.json" ]; then
|
||||||
|
echo -e "${RED}✗ Не найден package.json${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Создаем .env.production для относительных путей
|
# Создаем .env.production для относительных путей
|
||||||
cat > .env.production << 'EOF'
|
cat > .env.production << 'EOF'
|
||||||
# Production - используем относительные пути
|
# Production - используем относительные пути
|
||||||
@ -90,19 +121,77 @@ VITE_API_URL=/api
|
|||||||
VITE_WS_URL=
|
VITE_WS_URL=
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
sudo -u "$REAL_USER" npm install
|
echo "Установка npm зависимостей..."
|
||||||
sudo -u "$REAL_USER" npm run build
|
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 ..
|
cd ..
|
||||||
echo -e "${GREEN}✓ Frontend собран${NC}"
|
echo -e "${GREEN}✓ Frontend собран (файлов: $(ls -1 backend/public | wc -l))${NC}"
|
||||||
|
|
||||||
# 5. Установка Python зависимостей
|
# 5. Установка Python зависимостей
|
||||||
echo -e "${YELLOW}[5/10] Установка Python зависимостей...${NC}"
|
echo -e "${YELLOW}[5/10] Установка Python зависимостей...${NC}"
|
||||||
cd backend
|
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"
|
# Проверить наличие requirements.txt
|
||||||
cd ..
|
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 -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
|
# 6. Настройка .env
|
||||||
echo -e "${YELLOW}[6/10] Настройка конфигурации...${NC}"
|
echo -e "${YELLOW}[6/10] Настройка конфигурации...${NC}"
|
||||||
|
|
||||||
@ -191,14 +280,26 @@ systemctl enable ai-review.service
|
|||||||
systemctl start ai-review.service
|
systemctl start ai-review.service
|
||||||
|
|
||||||
# Ждем запуска
|
# Ждем запуска
|
||||||
sleep 3
|
echo "Ожидание запуска (5 секунд)..."
|
||||||
|
sleep 5
|
||||||
|
|
||||||
# Проверка статуса
|
# Проверка статуса
|
||||||
if systemctl is-active --quiet ai-review.service; then
|
if systemctl is-active --quiet ai-review.service; then
|
||||||
echo -e "${GREEN}✓ Сервис успешно запущен${NC}"
|
echo -e "${GREEN}✓ Сервис успешно запущен${NC}"
|
||||||
else
|
else
|
||||||
echo -e "${RED}✗ Ошибка запуска сервиса${NC}"
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -293,6 +394,11 @@ echo " 1. Отредактировать $INSTALL_DIR/backend/.env"
|
|||||||
echo " 2. Добавить токены для Git платформ"
|
echo " 2. Добавить токены для Git платформ"
|
||||||
echo " 3. Настроить firewall (разрешить порт 80/443)"
|
echo " 3. Настроить firewall (разрешить порт 80/443)"
|
||||||
echo ""
|
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 -e "${GREEN}✨ Готово к работе!${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user