diff --git a/.gitea/workflows/deploy_ssh.yml b/.gitea/workflows/deploy_ssh.yml new file mode 100644 index 0000000..42357b9 --- /dev/null +++ b/.gitea/workflows/deploy_ssh.yml @@ -0,0 +1,117 @@ +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 '✅ Деплой завершен успешно!' + " \ No newline at end of file