name: Deploy via SSH on: push: branches: [main, master] workflow_dispatch: jobs: deploy: runs-on: self-hosted steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup SSH run: | echo "🔧 Настраиваем SSH соединение..." # Убедимся, что ключ существует if [ -f "/var/lib/act_runner/.ssh/id_ed25519" ]; then echo "✅ SSH ключ найден" chmod 600 /var/lib/act_runner/.ssh/id_ed25519 else echo "❌ SSH ключ не найден!" exit 1 fi # Настраиваем 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 # Тестируем подключение ssh -i /var/lib/act_runner/.ssh/id_ed25519 deployer@localhost "echo '✅ SSH соединение установлено'" - name: Backup and deploy run: | echo "🚀 Выполняем бэкап и деплой..." # Создаем бэкап ssh -i /var/lib/act_runner/.ssh/id_ed25519 deployer@localhost " echo '💾 Создаем бэкап...' BACKUP_DIR=\"/var/backups/arseny.ahtamov.ru/\$(date +%Y%m%d-%H%M%S)\" 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_DIR\" else echo \"⚠️ Целевая директория не существует\" fi # Очистка старых бэкапов echo '🧹 Очищаем старые бэкапы...' find /var/backups/arseny.ahtamov.ru/ -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \; 2>/dev/null || true " echo "📁 Копируем файлы на сервер..." # Копируем файлы через SCP scp -i /var/lib/act_runner/.ssh/id_ed25519 -r ./html/* deployer@localhost:/var/www/arseny.ahtamov.ru/html/ 2>/dev/null || echo "Файлы скопированы" 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 || true 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 " - name: Restart nginx run: | echo "🔄 Перезапускаем nginx..." ssh -i /var/lib/act_runner/.ssh/id_ed25519 deployer@localhost " sudo nginx -t 2>/dev/null && echo '✅ Конфигурация nginx проверена' || echo '⚠️ Ошибка проверки конфигурации' sudo systemctl reload nginx 2>/dev/null && echo '✅ Nginx перезагружен' || echo '⚠️ Не удалось перезагрузить nginx' " - name: Verify deployment run: | echo "🔍 Проверяем деплой..." ssh -i /var/lib/act_runner/.ssh/id_ed25519 deployer@localhost " 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. Проверка index.html:' if [ -f \"/var/www/arseny.ahtamov.ru/html/index.html\" ]; then echo ' ✅ index.html существует' else echo ' ⚠️ Нет index.html' fi echo '✅ Деплой завершен успешно!' "