deploy
This commit is contained in:
parent
1bfdd73389
commit
7f7edb4775
1 changed files with 23 additions and 191 deletions
|
|
@ -47,67 +47,18 @@ jobs:
|
|||
mnemo_cards_backend \
|
||||
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:~/
|
||||
|
||||
- name: Obtain Certificates
|
||||
- name: Ensure SSL Certificates
|
||||
run: |
|
||||
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=30 -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
|
||||
set -e
|
||||
echo "🔐 Checking Let's Encrypt certificates..."
|
||||
echo "🔐 Ensuring SSL certificates are available..."
|
||||
|
||||
# Проверяем наличие multi-domain сертификата
|
||||
if [ -d "/etc/letsencrypt/live/mnemo-cards.online" ] && [ -f "/etc/letsencrypt/live/mnemo-cards.online/fullchain.pem" ]; then
|
||||
echo "✅ Let's Encrypt multi-domain сертификаты уже существуют"
|
||||
# Проверяем что nginx работает
|
||||
if ! sudo systemctl is-active --quiet nginx; then
|
||||
echo "🚨 nginx не работает! Запускаем..."
|
||||
sudo systemctl start nginx
|
||||
sleep 2
|
||||
if ! sudo systemctl is-active --quiet nginx; then
|
||||
echo "❌ Критическая ошибка: не удалось запустить nginx!"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
echo "✅ SSL certificates are present and valid"
|
||||
else
|
||||
echo "⚠️ Сертификаты не найдены. Пытаемся получить через webroot (nginx продолжает работать)..."
|
||||
|
||||
# Убеждаемся, что nginx запущен
|
||||
if ! sudo systemctl is-active --quiet nginx; then
|
||||
echo "🚀 Запускаем nginx для webroot режима..."
|
||||
sudo systemctl start nginx
|
||||
sleep 2
|
||||
if ! sudo systemctl is-active --quiet nginx; then
|
||||
echo "❌ Критическая ошибка: не удалось запустить nginx для получения сертификатов!"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Создаем директорию для webroot challenge
|
||||
sudo mkdir -p /var/www/html/.well-known/acme-challenge
|
||||
sudo chown -R www-data:www-data /var/www/html
|
||||
|
||||
# Убеждаемся, что nginx может обслуживать ACME challenge
|
||||
# Проверяем, есть ли конфигурация для /.well-known
|
||||
if ! grep -q "\.well-known" /etc/nginx/sites-enabled/* 2>/dev/null; then
|
||||
echo "📝 Добавляем поддержку ACME challenge в nginx..."
|
||||
# Создаем временную конфигурацию для ACME challenge
|
||||
sudo printf 'server {\n listen 80;\n server_name _;\n location /.well-known/acme-challenge/ {\n root /var/www/html;\n try_files $uri =404;\n }\n location / {\n return 404;\n }\n}\n' > /etc/nginx/sites-available/acme-challenge
|
||||
sudo ln -sf /etc/nginx/sites-available/acme-challenge /etc/nginx/sites-enabled/acme-challenge
|
||||
sudo nginx -t && sudo systemctl reload nginx
|
||||
fi
|
||||
|
||||
# Получаем multi-domain сертификат через webroot
|
||||
echo "🔐 Получаем Let's Encrypt multi-domain сертификат через webroot..."
|
||||
if sudo certbot certonly --webroot \
|
||||
-w /var/www/html \
|
||||
-d mnemo-cards.online \
|
||||
-d api.mnemo-cards.online \
|
||||
-d code.mnemo-cards.online \
|
||||
-d vscode.mnemo-cards.online \
|
||||
--cert-name mnemo-cards.online \
|
||||
--non-interactive --agree-tos --email admin@mnemo-cards.online; then
|
||||
echo "✅ Let's Encrypt multi-domain сертификат успешно получен через webroot!"
|
||||
else
|
||||
echo "⚠️ Не удалось получить сертификат через webroot. Продолжаем без HTTPS..."
|
||||
fi
|
||||
echo "⚠️ SSL certificates missing - they should be renewed automatically by cron"
|
||||
echo "Manual certificate renewal can be done with:"
|
||||
echo "sudo certbot renew"
|
||||
fi
|
||||
ENDSSH
|
||||
|
||||
|
|
@ -213,89 +164,14 @@ jobs:
|
|||
./check-nginx.sh
|
||||
ENDSSH
|
||||
|
||||
- name: Ensure Nginx Running
|
||||
run: |
|
||||
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=30 -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
|
||||
set -e
|
||||
echo "🔍 Проверяем статус nginx..."
|
||||
if sudo systemctl is-active --quiet nginx; then
|
||||
echo "✅ nginx уже запущен"
|
||||
# Перезагружаем конфигурацию на всякий случай
|
||||
if sudo nginx -t 2>/dev/null; then
|
||||
sudo systemctl reload nginx
|
||||
echo "✅ Конфигурация nginx перезагружена"
|
||||
fi
|
||||
else
|
||||
echo "⚠️ nginx не запущен, запускаем..."
|
||||
if sudo nginx -t 2>/dev/null; then
|
||||
sudo systemctl start nginx
|
||||
sleep 2
|
||||
if sudo systemctl is-active --quiet nginx; then
|
||||
echo "✅ nginx успешно запущен"
|
||||
else
|
||||
echo "❌ Ошибка: не удалось запустить nginx!"
|
||||
sudo systemctl status nginx --no-pager || true
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "❌ Ошибка в конфигурации nginx!"
|
||||
sudo nginx -t || true
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
ENDSSH
|
||||
|
||||
ensure-nginx-running:
|
||||
name: Ensure Nginx Running After Backend
|
||||
runs-on: ubuntu-latest
|
||||
needs: deploy-backend
|
||||
if: always() && needs.deploy-backend.result == 'success'
|
||||
steps:
|
||||
- name: Setup SSH
|
||||
run: |
|
||||
mkdir -p ~/.ssh
|
||||
echo "${{ secrets.SSH_KEY }}" > ~/.ssh/id_rsa
|
||||
chmod 600 ~/.ssh/id_rsa
|
||||
ssh-keyscan -H ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts
|
||||
|
||||
- name: Check Nginx Status
|
||||
run: |
|
||||
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=30 -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
|
||||
set -e
|
||||
echo "🔍 Проверяем статус nginx после деплоя backend..."
|
||||
if sudo systemctl is-active --quiet nginx; then
|
||||
echo "✅ nginx запущен"
|
||||
# Тестируем доступность сайтов
|
||||
if curl -I --max-time 10 https://code.mnemo-cards.online/ 2>/dev/null | grep -q "200\|301\|302"; then
|
||||
echo "✅ code.mnemo-cards.online доступен"
|
||||
else
|
||||
echo "⚠️ code.mnemo-cards.online недоступен"
|
||||
fi
|
||||
if curl -I --max-time 10 https://vscode.mnemo-cards.online/ 2>/dev/null | grep -q "200\|301\|302"; then
|
||||
echo "✅ vscode.mnemo-cards.online доступен"
|
||||
else
|
||||
echo "⚠️ vscode.mnemo-cards.online недоступен"
|
||||
fi
|
||||
else
|
||||
echo "❌ nginx не запущен! Запускаем..."
|
||||
sudo systemctl start nginx
|
||||
sleep 2
|
||||
if sudo systemctl is-active --quiet nginx; then
|
||||
echo "✅ nginx запущен"
|
||||
else
|
||||
echo "❌ Не удалось запустить nginx!"
|
||||
sudo systemctl status nginx --no-pager || true
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
ENDSSH
|
||||
|
||||
deploy-web:
|
||||
name: Deploy Web App
|
||||
runs-on: ubuntu-latest
|
||||
container: ghcr.io/cirruslabs/flutter:3.35.5
|
||||
needs: ensure-nginx-running
|
||||
if: always() && needs.ensure-nginx-running.result == 'success'
|
||||
needs: deploy-backend
|
||||
if: always() && needs.deploy-backend.result == 'success'
|
||||
steps:
|
||||
- name: Install System Dependencies
|
||||
run: |
|
||||
|
|
@ -328,29 +204,6 @@ jobs:
|
|||
git config --global http.maxRequestBuffer 100M
|
||||
git config --global core.compression 0
|
||||
|
||||
- name: Check Nginx Before Web Deploy
|
||||
run: |
|
||||
echo "🔍 Проверяем статус nginx перед деплоем web..."
|
||||
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=30 -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
|
||||
set -e
|
||||
if sudo systemctl is-active --quiet nginx; then
|
||||
echo "✅ nginx работает перед web деплоем"
|
||||
# Тестируем доступность
|
||||
if curl -I --max-time 5 https://mnemo-cards.online/ 2>/dev/null | grep -q "200\|301\|302"; then
|
||||
echo "✅ mnemo-cards.online доступен"
|
||||
else
|
||||
echo "⚠️ mnemo-cards.online недоступен"
|
||||
fi
|
||||
if curl -I --max-time 5 https://code.mnemo-cards.online/ 2>/dev/null | grep -q "200\|301\|302"; then
|
||||
echo "✅ code.mnemo-cards.online доступен"
|
||||
else
|
||||
echo "⚠️ code.mnemo-cards.online недоступен"
|
||||
fi
|
||||
else
|
||||
echo "❌ nginx не работает перед web деплоем!"
|
||||
exit 1
|
||||
fi
|
||||
ENDSSH
|
||||
|
||||
- name: Build Web App
|
||||
working-directory: mnemo_cards_web_v2
|
||||
|
|
@ -373,53 +226,32 @@ jobs:
|
|||
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/var/www/mnemo_cards/ || (echo "❌ Rsync failed" && exit 1)
|
||||
echo "✅ Веб-приложение скопировано"
|
||||
|
||||
- name: Fix Permissions and Verify
|
||||
- name: Fix Permissions and Reload Nginx
|
||||
run: |
|
||||
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=30 -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
|
||||
set -e
|
||||
echo "🔧 Исправляем права доступа..."
|
||||
echo "🔧 Setting correct permissions for web files..."
|
||||
chown -R www-data:www-data /var/www/mnemo_cards
|
||||
chmod -R 755 /var/www/mnemo_cards
|
||||
echo "✅ Права исправлены"
|
||||
echo "✅ Permissions fixed"
|
||||
|
||||
echo "🔍 Проверяем nginx после деплоя web..."
|
||||
if sudo systemctl is-active --quiet nginx; then
|
||||
echo "✅ nginx работает"
|
||||
# Перезагружаем nginx для применения новых файлов
|
||||
echo "🔄 Перезагружаем nginx..."
|
||||
echo "🔄 Reloading nginx to serve new web app..."
|
||||
if sudo nginx -t 2>/dev/null; then
|
||||
sudo systemctl reload nginx
|
||||
echo "✅ nginx перезагружен"
|
||||
echo "✅ nginx reloaded successfully"
|
||||
sleep 2
|
||||
|
||||
# Тестируем доступность
|
||||
if curl -I --max-time 10 https://mnemo-cards.online/ 2>/dev/null | grep -q "200\|301\|302"; then
|
||||
echo "✅ mnemo-cards.online доступен"
|
||||
# Quick verification
|
||||
if curl -I --max-time 5 https://mnemo-cards.online/ 2>/dev/null | grep -q "200\|301\|302"; then
|
||||
echo "✅ mnemo-cards.online is serving correctly"
|
||||
else
|
||||
echo "⚠️ mnemo-cards.online недоступен"
|
||||
fi
|
||||
if curl -I --max-time 10 https://code.mnemo-cards.online/ 2>/dev/null | grep -q "200\|301\|302"; then
|
||||
echo "✅ code.mnemo-cards.online доступен"
|
||||
else
|
||||
echo "⚠️ code.mnemo-cards.online недоступен"
|
||||
echo "⚠️ mnemo-cards.online verification failed"
|
||||
fi
|
||||
else
|
||||
echo "❌ Ошибка в конфигурации nginx!"
|
||||
echo "❌ nginx configuration test failed!"
|
||||
sudo nginx -t || true
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "❌ nginx не работает! Запускаем..."
|
||||
sudo systemctl start nginx
|
||||
sleep 2
|
||||
if sudo systemctl is-active --quiet nginx; then
|
||||
echo "✅ nginx запущен"
|
||||
else
|
||||
echo "❌ Не удалось запустить nginx!"
|
||||
sudo systemctl status nginx --no-pager || true
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
ENDSSH
|
||||
|
||||
final-verification:
|
||||
|
|
|
|||
Loading…
Reference in a new issue