Files
WWW/.gitea/workflows/deploy_rsync.yml
ascet 4e171d16d3
All checks were successful
Deploy via SSH (rsync) / deploy (push) Successful in 13s
Обновить .gitea/workflows/deploy_rsync.yml
2026-01-12 20:46:15 +03:00

215 lines
9.7 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 "🎉 Весь процесс деплоя завершен!"