#!/bin/bash # Скрипт автоматического обновления сайта set -e # Останавливаемся при любой ошибке PROJECT_DIR="/var/www/radionica3d" echo "==== DEPLOY STARTING: $(date) ====" cd $PROJECT_DIR # 1. Забираем код echo "git pull..." # Force clean generated files and lockfile to avoid conflicts git checkout package-lock.json src/locales/translations.admin.json src/locales/translations.user.json git pull origin master # 2. Обновляем зависимости echo "installing dependencies..." npm install --legacy-peer-deps # 3. Синхронизируем переводы echo "generating translations..." npm run i18n:generate # 4. Собираем фронтенд echo "building frontend..." TIMESTAMP=$(date +%Y%m%d_%H%M%S) NEW_DIST_DIR="dist_$TIMESTAMP" # Строим сразу в новую папку через переменную окружения VITE_OUT_DIR=$NEW_DIST_DIR npm run build # Обработка перехода от папки к симлинку (на случай если 'dist' еще папка) if [ -d "dist" ] && [ ! -L "dist" ]; then echo "Found legacy dist directory, backing it up..." mv dist dist_legacy_backup fi # Атомарно переключаем симлинк 'dist' на новую папку ln -sfn $NEW_DIST_DIR dist_tmp mv -T dist_tmp dist # Удаляем старые сборки (оставляем 5 последних) ls -dt dist_* | grep -E '^dist_[0-9]{8}_[0-9]{6}$' | tail -n +6 | xargs -r rm -rf || true # 5. Обновляем бэкенд echo "updating backend..." ./backend/venv/bin/pip install -r backend/requirements.txt echo "running database migrations..." mkdir -p backups mysqldump --no-tablespaces -h ${DB_HOST:-localhost} -u ${DB_USER:-radionica} -p${DB_PASS:-NY9B9VLifDC9ehZ} ${DB_NAME:-radionica3d} > backups/db_pre_migration_$(date +%Y%m%d_%H%M%S).sql ./backend/venv/bin/python3 backend/run_migrations.py # 6. Перезапуск echo "restarting services..." sudo chown -R www-data:www-data $PROJECT_DIR sudo systemctl restart radionica-backend cp /var/www/radionica3d/nginx.conf /etc/nginx/sites-available/radionica3d sudo systemctl reload nginx echo "==== DEPLOY FINISHED: $(date) ===="