name: Deploy to Production on: push: branches: [main, master] workflow_dispatch: jobs: deploy: runs-on: self-hosted steps: - name: Checkout code uses: actions/checkout@v4 - name: Show structure run: | echo "Структура проекта:" ls -la echo "Текущая директория: $(pwd)" echo "Пользователь: $(whoami)" - name: Backup current site run: | # Создаем бэкап в /var/backups/arseny.ahtamov.ru/ BACKUP_DIR="/var/backups/arseny.ahtamov.ru/$(date +%Y%m%d-%H%M%S)" echo "Создаем бэкап в: $BACKUP_DIR" mkdir -p "$BACKUP_DIR" if [ -d "/var/www/arseny.ahtamov.ru/html" ]; then # Копируем с сохранением прав и владельцев cp -rp /var/www/arseny.ahtamov.ru/html/* "$BACKUP_DIR/" 2>/dev/null || echo "Некоторые файлы не скопированы" # Создаем файл с информацией о бэкапе echo "Backup created: $(date)" > "$BACKUP_DIR/BACKUP_INFO.txt" echo "From: /var/www/arseny.ahtamov.ru/html" >> "$BACKUP_DIR/BACKUP_INFO.txt" echo "Files count: $(find "$BACKUP_DIR" -type f | wc -l)" >> "$BACKUP_DIR/BACKUP_INFO.txt" echo "✅ Бэкап создан в: $BACKUP_DIR" echo "📊 Файлов в бэкапе: $(find "$BACKUP_DIR" -type f | wc -l)" else echo "⚠️ Целевая директория не существует, бэкап пропущен" fi - name: Clean old backups run: | # Удаляем бэкапы старше 7 дней echo "Очистка старых бэкапов (старше 7 дней)..." find /var/backups/arseny.ahtamov.ru/ -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \; 2>/dev/null || true # Показываем оставшиеся бэкапы echo "Текущие бэкапы:" ls -la /var/backups/arseny.ahtamov.ru/ 2>/dev/null || echo "Директория бэкапов пуста" - name: Deploy files run: | echo "🚀 Начинаем деплой в /var/www/arseny.ahtamov.ru/html/" # Создаем целевую директорию если нет mkdir -p /var/www/arseny.ahtamov.ru/html # Удаляем старые файлы (кроме .htaccess и .user.ini) echo "Очистка старого содержимого..." find /var/www/arseny.ahtamov.ru/html -type f ! -name '.htaccess' ! -name '.user.ini' -delete 2>/dev/null || true find /var/www/arseny.ahtamov.ru/html -type d -mindepth 1 -exec rm -rf {} \; 2>/dev/null || true # Копируем новые файлы echo "Копирование новых файлов..." cp -r ./html/* /var/www/arseny.ahtamov.ru/html/ 2>/dev/null || echo "Некоторые файлы не скопированы" echo "✅ Файлы скопированы" - name: Set correct permissions run: | echo "Установка прав..." # Основные права chown -R www-data:www-data /var/www/arseny.ahtamov.ru/html/ 2>/dev/null || echo "Не удалось изменить владельца" # Права на директории find /var/www/arseny.ahtamov.ru/html/ -type d -exec chmod 755 {} \; 2>/dev/null || true # Права на файлы find /var/www/arseny.ahtamov.ru/html/ -type f -exec chmod 644 {} \; 2>/dev/null || true # Специальные права для скриптов find /var/www/arseny.ahtamov.ru/html/ -name "*.php" -exec chmod 755 {} \; 2>/dev/null || true find /var/www/arseny.ahtamov.ru/html/ -name "*.cgi" -exec chmod 755 {} \; 2>/dev/null || true find /var/www/arseny.ahtamov.ru/html/ -name "*.pl" -exec chmod 755 {} \; 2>/dev/null || true find /var/www/arseny.ahtamov.ru/html/ -name "*.sh" -exec chmod 755 {} \; 2>/dev/null || true echo "✅ Права установлены" - name: Verify deployment run: | echo "🔍 Проверка деплоя..." echo "1. Количество файлов:" find /var/www/arseny.ahtamov.ru/html/ -type f | wc -l echo "2. Размер директории:" du -sh /var/www/arseny.ahtamov.ru/html/ echo "3. Последние 5 файлов:" ls -laht /var/www/arseny.ahtamov.ru/html/ | head -10 echo "4. Проверка index.html/index.php:" if [ -f "/var/www/arseny.ahtamov.ru/html/index.html" ]; then echo " ✅ index.html существует" elif [ -f "/var/www/arseny.ahtamov.ru/html/index.php" ]; then echo " ✅ index.php существует" else echo " ⚠️ Нет index.html или index.php" fi - name: Restart nginx (if needed) run: | echo "🔄 Проверка конфигурации nginx..." nginx -t 2>&1 || echo "Проверка конфигурации не удалась" echo "Перезагрузка nginx..." systemctl reload nginx 2>&1 || echo "Перезагрузка через systemctl не удалась, пробуем signal..." nginx -s reload 2>&1 || echo "Перезагрузка через signal не удалась" echo "✅ Деплой завершен успешно!"