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 соединение..." # Создаем директорию для SSH mkdir -p ~/.ssh chmod 700 ~/.ssh # Копируем приватный ключ act_runner cp /var/lib/act_runner/.ssh/id_ed25519 ~/.ssh/ chmod 600 ~/.ssh/id_ed25519 # Настраиваем known_hosts ssh-keyscan -H localhost >> ~/.ssh/known_hosts ssh-keyscan -H 127.0.0.1 >> ~/.ssh/known_hosts # Тестируем подключение ssh -i ~/.ssh/id_ed25519 deployer@localhost "echo '✅ SSH соединение установлено'" - name: Backup current site run: | echo "💾 Создаем бэкап..." ssh -i ~/.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 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 \"✅ Бэкап создан в: \$BACKUP_DIR\" echo \"📊 Файлов в бэкапе: \$(find \"\$BACKUP_DIR\" -type f | wc -l)\" else echo \"⚠️ Целевая директория не существует\" fi " - name: Clean old backups run: | echo "🧹 Очищаем старые бэкапы..." ssh -i ~/.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 || echo 'Директория бэкапов пуста' " - name: Deploy files run: | echo "🚀 Начинаем деплой..." # Создаем временный каталог для файлов mkdir -p /tmp/deploy_artifacts cp -r ./html/* /tmp/deploy_artifacts/ 2>/dev/null || echo "Нет файлов для копирования" # Копируем файлы через SCP scp -i ~/.ssh/id_ed25519 -r /tmp/deploy_artifacts/* deployer@localhost:/var/www/arseny.ahtamov.ru/html/ 2>/dev/null || echo "Некоторые файлы не скопированы" # Альтернативный вариант через rsync # rsync -avz -e "ssh -i ~/.ssh/id_ed25519" ./html/ deployer@localhost:/var/www/arseny.ahtamov.ru/html/ echo "✅ Файлы скопированы" - name: Set permissions and restart nginx run: | echo "🔧 Устанавливаем права и перезапускаем nginx..." ssh -i ~/.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 # Перезапускаем nginx через sudo echo '🔄 Перезагружаем nginx...' sudo nginx -t 2>&1 && echo '✅ Конфигурация nginx проверена' || echo '⚠️ Ошибка проверки конфигурации' sudo systemctl reload nginx 2>&1 && echo '✅ Nginx перезагружен' || echo '⚠️ Не удалось перезагрузить nginx' " - name: Verify deployment run: | echo "🔍 Проверяем деплой..." ssh -i ~/.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 '✅ Деплой завершен успешно!' "