Добавить scripts/deploy_rsync.yml
All checks were successful
Deploy via SSH / deploy (push) Successful in 10s
All checks were successful
Deploy via SSH / deploy (push) Successful in 10s
This commit is contained in:
215
scripts/deploy_rsync.yml
Normal file
215
scripts/deploy_rsync.yml
Normal file
@@ -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 "🎉 Весь процесс деплоя завершен!"
|
||||||
Reference in New Issue
Block a user