From 59482ba1418670de5866789121cb82311c3e3bc5 Mon Sep 17 00:00:00 2001 From: ascet Date: Mon, 12 Jan 2026 20:45:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20scripts/deploy=5Frsync.yml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/deploy_rsync.yml | 215 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 scripts/deploy_rsync.yml diff --git a/scripts/deploy_rsync.yml b/scripts/deploy_rsync.yml new file mode 100644 index 0000000..756c4e1 --- /dev/null +++ b/scripts/deploy_rsync.yml @@ -0,0 +1,215 @@ +name: Deploy via SSH (rsync) + +on: + push: + branches: [main, master] + workflow_dispatch: + +jobs: + deploy: + runs-on: self-hosted + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup SSH for rsync + run: | + echo "🔧 Настраиваем SSH для rsync..." + + # Проверяем наличие SSH ключа + if [ ! -f "/var/lib/act_runner/.ssh/id_ed25519" ]; then + echo "❌ SSH ключ не найден!" + echo "Создаем новый SSH ключ..." + sudo -u act_runner ssh-keygen -t ed25519 -f /var/lib/act_runner/.ssh/id_ed25519 -N "" + sudo -u act_runner cat /var/lib/act_runner/.ssh/id_ed25519.pub | sudo -u deployer tee -a /home/deployer/.ssh/authorized_keys + fi + + # Устанавливаем правильные права + chmod 600 /var/lib/act_runner/.ssh/id_ed25519 2>/dev/null || true + + # Настраиваем known_hosts + ssh-keyscan -H localhost >> /var/lib/act_runner/.ssh/known_hosts 2>/dev/null || true + ssh-keyscan -H 127.0.0.1 >> /var/lib/act_runner/.ssh/known_hosts 2>/dev/null || true + + # Проверяем rsync + which rsync >/dev/null 2>&1 || { + echo "Устанавливаем rsync..." + apt-get update && apt-get install -y rsync + } + + # Тестируем соединение + ssh -o BatchMode=yes -o ConnectTimeout=5 -i /var/lib/act_runner/.ssh/id_ed25519 deployer@localhost "echo '✅ SSH соединение установлено'" || { + echo "⚠️ SSH соединение требует настройки" + exit 1 + } + + - name: Backup current site + run: | + echo "💾 Создаем бэкап текущего сайта..." + + ssh -i /var/lib/act_runner/.ssh/id_ed25519 deployer@localhost " + 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 + # Используем rsync для бэкапа (сохраняем все атрибуты) + rsync -a /var/www/arseny.ahtamov.ru/html/ \"\${BACKUP_DIR}/\" + + # Создаем файл информации о бэкапе + echo \"Backup created: \$(date)\" > \"\${BACKUP_DIR}/BACKUP_INFO.txt\" + echo \"Source: /var/www/arseny.ahtamov.ru/html\" >> \"\${BACKUP_DIR}/BACKUP_INFO.txt\" + echo \"Files: \$(find \"\${BACKUP_DIR}\" -type f | wc -l)\" >> \"\${BACKUP_DIR}/BACKUP_INFO.txt\" + + echo \"✅ Бэкап создан: \${BACKUP_DIR}\" + du -sh \"\${BACKUP_DIR}\" + else + echo \"⚠️ Целевая директория не существует, пропускаем бэкап\" + fi + " + + - name: Clean old backups + run: | + echo "🧹 Очищаем старые бэкапы (старше 7 дней)..." + + ssh -i /var/lib/act_runner/.ssh/id_ed25519 deployer@localhost " + # Удаляем бэкапы старше 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 | head -20 || echo \"Директория бэкапов пуста\" + " + + - name: Deploy with rsync + run: | + echo "🚀 Начинаем деплой с помощью rsync..." + + # Проверяем, есть ли файлы для деплоя + if [ ! -d "./html" ] || [ -z "\$(ls -A ./html 2>/dev/null)" ]; then + echo "⚠️ Директория html пуста или не существует" + exit 1 + fi + + # Используем rsync для деплоя + rsync -avz --delete \ + -e "ssh -i /var/lib/act_runner/.ssh/id_ed25519 -o StrictHostKeyChecking=no" \ + --exclude=".*" \ + --exclude="*.tmp" \ + --exclude="*.bak" \ + --exclude="*.backup" \ + ./html/ \ + deployer@localhost:/var/www/arseny.ahtamov.ru/html/ + + echo "✅ Rsync выполнен успешно" + + # Проверяем результат + ssh -i /var/lib/act_runner/.ssh/id_ed25519 deployer@localhost " + echo \"Проверка загруженных файлов:\" + ls -la /var/www/arseny.ahtamov.ru/html/ | head -10 + echo \"Всего файлов: \$(find /var/www/arseny.ahtamov.ru/html/ -type f | wc -l)\" + " + + - name: Set correct permissions + run: | + echo "🔧 Устанавливаем права на файлы..." + + ssh -i /var/lib/act_runner/.ssh/id_ed25519 deployer@localhost " + # Устанавливаем владельца + chown -R deployer: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 \"*.sh\" -exec chmod 755 {} \; 2>/dev/null || true + find /var/www/arseny.ahtamov.ru/html/ -name \"*.pl\" -exec chmod 755 {} \; 2>/dev/null || true + + echo \"✅ Права установлены\" + " + + - name: Check nginx configuration + run: | + echo "🔍 Проверяем конфигурацию nginx..." + + ssh -i /var/lib/act_runner/.ssh/id_ed25519 deployer@localhost " + echo \"Проверка конфигурации nginx...\" + if sudo nginx -t 2>/dev/null; then + echo \"✅ Конфигурация nginx в порядке\" + else + echo \"⚠️ Ошибка в конфигурации nginx\" + # Показываем ошибку + sudo nginx -t 2>&1 | head -20 + fi + " + + - name: Restart nginx + run: | + echo "🔄 Перезагружаем nginx..." + + ssh -i /var/lib/act_runner/.ssh/id_ed25519 deployer@localhost " + echo \"Перезагрузка nginx...\" + if sudo systemctl reload nginx 2>/dev/null; then + echo \"✅ Nginx успешно перезагружен\" + else + echo \"⚠️ Не удалось перезагрузить nginx через systemctl, пробуем signal...\" + sudo nginx -s reload 2>/dev/null && echo \"✅ Nginx перезагружен через signal\" || echo \"❌ Не удалось перезагрузить nginx\" + fi + + # Проверяем статус + echo \"Статус nginx:\" + sudo systemctl status nginx --no-pager 2>/dev/null | head -10 || true + " + + - name: Verify deployment + run: | + echo "📊 Проверка завершенного деплоя..." + + ssh -i /var/lib/act_runner/.ssh/id_ed25519 deployer@localhost " + echo \"=== ИТОГИ ДЕПЛОЯ ===\" + echo \"1. Директория: /var/www/arseny.ahtamov.ru/html/\" + echo \"2. Общий размер:\" + du -sh /var/www/arseny.ahtamov.ru/html/ + echo \"3. Количество файлов:\" + find /var/www/arseny.ahtamov.ru/html/ -type f | wc -l + echo \"4. Количество директорий:\" + find /var/www/arseny.ahtamov.ru/html/ -type d | wc -l + echo \"5. Проверка основных файлов:\" + + # Проверяем наличие основных файлов + for file in index.html index.php; do + if [ -f \"/var/www/arseny.ahtamov.ru/html/\${file}\" ]; then + echo \" ✅ \${file} - найден\" + else + echo \" ⚠️ \${file} - отсутствует\" + fi + done + + echo \"6. Последние 10 измененных файлов:\" + find /var/www/arseny.ahtamov.ru/html/ -type f -printf '%T+ %p\n' 2>/dev/null | sort -r | head -10 | cut -d' ' -f2- + + echo \"✅ Деплой успешно завершен!\" + " + + - name: Test website accessibility + run: | + echo "🌐 Тестируем доступность сайта..." + + # Даем время nginx перезагрузиться + sleep 2 + + # Проверяем доступность локально + if curl -f -s -o /dev/null -w "%{http_code}" http://localhost/ 2>/dev/null | grep -q "200\|301\|302"; then + echo "✅ Сайт доступен локально" + else + echo "⚠️ Сайт может быть недоступен локально" + fi + + echo "🎉 Весь процесс деплоя завершен!" \ No newline at end of file