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 \
|
mnemo_cards_backend \
|
||||||
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:~/
|
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:~/
|
||||||
|
|
||||||
- name: Obtain Certificates
|
- name: Ensure SSL Certificates
|
||||||
run: |
|
run: |
|
||||||
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=30 -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
|
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=30 -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
|
||||||
set -e
|
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
|
if [ -d "/etc/letsencrypt/live/mnemo-cards.online" ] && [ -f "/etc/letsencrypt/live/mnemo-cards.online/fullchain.pem" ]; then
|
||||||
echo "✅ Let's Encrypt multi-domain сертификаты уже существуют"
|
echo "✅ SSL certificates are present and valid"
|
||||||
# Проверяем что 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
|
|
||||||
else
|
else
|
||||||
echo "⚠️ Сертификаты не найдены. Пытаемся получить через webroot (nginx продолжает работать)..."
|
echo "⚠️ SSL certificates missing - they should be renewed automatically by cron"
|
||||||
|
echo "Manual certificate renewal can be done with:"
|
||||||
# Убеждаемся, что nginx запущен
|
echo "sudo certbot renew"
|
||||||
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
|
|
||||||
fi
|
fi
|
||||||
ENDSSH
|
ENDSSH
|
||||||
|
|
||||||
|
|
@ -213,89 +164,14 @@ jobs:
|
||||||
./check-nginx.sh
|
./check-nginx.sh
|
||||||
ENDSSH
|
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:
|
deploy-web:
|
||||||
name: Deploy Web App
|
name: Deploy Web App
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container: ghcr.io/cirruslabs/flutter:3.35.5
|
container: ghcr.io/cirruslabs/flutter:3.35.5
|
||||||
needs: ensure-nginx-running
|
needs: deploy-backend
|
||||||
if: always() && needs.ensure-nginx-running.result == 'success'
|
if: always() && needs.deploy-backend.result == 'success'
|
||||||
steps:
|
steps:
|
||||||
- name: Install System Dependencies
|
- name: Install System Dependencies
|
||||||
run: |
|
run: |
|
||||||
|
|
@ -328,29 +204,6 @@ jobs:
|
||||||
git config --global http.maxRequestBuffer 100M
|
git config --global http.maxRequestBuffer 100M
|
||||||
git config --global core.compression 0
|
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
|
- name: Build Web App
|
||||||
working-directory: mnemo_cards_web_v2
|
working-directory: mnemo_cards_web_v2
|
||||||
|
|
@ -373,52 +226,31 @@ jobs:
|
||||||
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/var/www/mnemo_cards/ || (echo "❌ Rsync failed" && exit 1)
|
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/var/www/mnemo_cards/ || (echo "❌ Rsync failed" && exit 1)
|
||||||
echo "✅ Веб-приложение скопировано"
|
echo "✅ Веб-приложение скопировано"
|
||||||
|
|
||||||
- name: Fix Permissions and Verify
|
- name: Fix Permissions and Reload Nginx
|
||||||
run: |
|
run: |
|
||||||
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=30 -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
|
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=30 -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
|
||||||
set -e
|
set -e
|
||||||
echo "🔧 Исправляем права доступа..."
|
echo "🔧 Setting correct permissions for web files..."
|
||||||
chown -R www-data:www-data /var/www/mnemo_cards
|
chown -R www-data:www-data /var/www/mnemo_cards
|
||||||
chmod -R 755 /var/www/mnemo_cards
|
chmod -R 755 /var/www/mnemo_cards
|
||||||
echo "✅ Права исправлены"
|
echo "✅ Permissions fixed"
|
||||||
|
|
||||||
echo "🔍 Проверяем nginx после деплоя web..."
|
echo "🔄 Reloading nginx to serve new web app..."
|
||||||
if sudo systemctl is-active --quiet nginx; then
|
if sudo nginx -t 2>/dev/null; then
|
||||||
echo "✅ nginx работает"
|
sudo systemctl reload nginx
|
||||||
# Перезагружаем nginx для применения новых файлов
|
echo "✅ nginx reloaded successfully"
|
||||||
echo "🔄 Перезагружаем nginx..."
|
sleep 2
|
||||||
if sudo nginx -t 2>/dev/null; then
|
|
||||||
sudo systemctl reload nginx
|
|
||||||
echo "✅ nginx перезагружен"
|
|
||||||
sleep 2
|
|
||||||
|
|
||||||
# Тестируем доступность
|
# Quick verification
|
||||||
if curl -I --max-time 10 https://mnemo-cards.online/ 2>/dev/null | grep -q "200\|301\|302"; then
|
if curl -I --max-time 5 https://mnemo-cards.online/ 2>/dev/null | grep -q "200\|301\|302"; then
|
||||||
echo "✅ mnemo-cards.online доступен"
|
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 недоступен"
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
echo "❌ Ошибка в конфигурации nginx!"
|
echo "⚠️ mnemo-cards.online verification failed"
|
||||||
sudo nginx -t || true
|
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "❌ nginx не работает! Запускаем..."
|
echo "❌ nginx configuration test failed!"
|
||||||
sudo systemctl start nginx
|
sudo nginx -t || true
|
||||||
sleep 2
|
exit 1
|
||||||
if sudo systemctl is-active --quiet nginx; then
|
|
||||||
echo "✅ nginx запущен"
|
|
||||||
else
|
|
||||||
echo "❌ Не удалось запустить nginx!"
|
|
||||||
sudo systemctl status nginx --no-pager || true
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
ENDSSH
|
ENDSSH
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue