server_update.sh 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #!/bin/bash
  2. # Скрипт автоматического обновления сайта
  3. set -e # Останавливаемся при любой ошибке
  4. PROJECT_DIR="/var/www/radionica3d"
  5. echo "==== DEPLOY STARTING: $(date) ===="
  6. cd $PROJECT_DIR
  7. # 1. Забираем код
  8. echo "git pull..."
  9. git checkout package-lock.json # Force clean lockfile to avoid conflicts
  10. git pull origin master
  11. # 2. Обновляем зависимости
  12. echo "installing dependencies..."
  13. npm install --legacy-peer-deps
  14. # 3. Синхронизируем переводы
  15. echo "generating translations..."
  16. npm run i18n:generate
  17. # 4. Собираем фронтенд
  18. echo "building frontend..."
  19. # Если dist это симлинк, npm run build (vite) может его удалить и создать папку, что нам и нужно.
  20. # Если это папка, он её очистит.
  21. npm run build
  22. # Сохраняем сборку в директорию с таймштампом и переключаем симлинк
  23. TIMESTAMP=$(date +%Y%m%d_%H%M%S)
  24. NEW_DIST_DIR="dist_$TIMESTAMP"
  25. echo "Moving build to $NEW_DIST_DIR and switching symlink..."
  26. mv dist $NEW_DIST_DIR
  27. # Обработка перехода от папки к симлинку
  28. if [ -d "dist" ] && [ ! -L "dist" ]; then
  29. echo "Found legacy dist directory, backing it up..."
  30. mv dist dist_legacy_backup
  31. fi
  32. # Атомарно переключаем симлинк 'dist' на новую папку
  33. ln -sfn $NEW_DIST_DIR dist_tmp
  34. mv -T dist_tmp dist
  35. # Удаляем старые сборки (оставляем 5 последних)
  36. ls -dt dist_* | grep -E '^dist_[0-9]{8}_[0-9]{6}$' | tail -n +6 | xargs -r rm -rf || true
  37. # 5. Обновляем бэкенд
  38. echo "updating backend..."
  39. ./backend/venv/bin/pip install -r backend/requirements.txt
  40. echo "running database migrations..."
  41. mkdir -p backups
  42. 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
  43. ./backend/venv/bin/python3 backend/run_migrations.py
  44. # 6. Перезапуск
  45. echo "restarting services..."
  46. sudo chown -R www-data:www-data $PROJECT_DIR
  47. sudo systemctl restart radionica-backend
  48. cp /var/www/radionica3d/nginx.conf /etc/nginx/sites-available/radionica3d
  49. sudo systemctl reload nginx
  50. echo "==== DEPLOY FINISHED: $(date) ===="