diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index bde0e53..388bad8 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -49,7 +49,7 @@ jobs: - name: Obtain Certificates run: | - ssh -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 echo "🔐 Checking Let's Encrypt certificates..." @@ -113,7 +113,7 @@ jobs: - name: Get Dependencies run: | - ssh -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 cd ~/mnemo_cards_backend echo "📦 Getting dependencies..." @@ -122,7 +122,7 @@ jobs: - name: Compile Server run: | - ssh -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 cd ~/mnemo_cards_backend echo "🔨 Compiling server..." @@ -131,7 +131,7 @@ jobs: - name: Stop Service run: | - ssh -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 echo "🛑 Stopping backend service..." sudo systemctl stop mnemo_cards_server || true @@ -155,7 +155,7 @@ jobs: - name: Update Service Configuration run: | - ssh -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 cd ~/mnemo_cards_backend echo "⚙️ Updating service configuration..." @@ -165,7 +165,7 @@ jobs: - name: Update Executable run: | - ssh -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 cd ~/mnemo_cards_backend echo "🔄 Replacing executable..." @@ -175,7 +175,7 @@ jobs: - name: Configure Certificates run: | - ssh -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 # Check certificates and configure mode # Используем multi-domain сертификат mnemo-cards.online (если есть) @@ -193,7 +193,7 @@ jobs: - name: Restart Service run: | - ssh -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 echo "🚀 Restarting service..." sudo systemctl daemon-reload @@ -204,7 +204,7 @@ jobs: - name: Ensure Nginx Running run: | - ssh -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 echo "🔍 Проверяем статус nginx..." if sudo systemctl is-active --quiet nginx; then @@ -249,7 +249,7 @@ jobs: - name: Check Nginx Status run: | - ssh -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 echo "🔍 Проверяем статус nginx после деплоя backend..." if sudo systemctl is-active --quiet nginx; then @@ -320,7 +320,7 @@ jobs: - name: Check Nginx Before Web Deploy run: | echo "🔍 Проверяем статус nginx перед деплоем web..." - ssh -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 if sudo systemctl is-active --quiet nginx; then echo "✅ nginx работает перед web деплоем" @@ -344,23 +344,27 @@ jobs: - name: Build Web App working-directory: mnemo_cards_web_v2 run: | + echo "🔍 Проверяем Flutter..." which flutter || echo "Flutter not found in PATH" flutter --version || echo "Flutter command failed" - flutter pub get - flutter build web --release \ + echo "📦 Получаем зависимости..." + timeout 300 flutter pub get || (echo "❌ Flutter pub get failed" && exit 1) + echo "🔨 Собираем веб-приложение..." + timeout 600 flutter build web --release \ --dart-define=API_BASE_URL=https://api.mnemo-cards.online \ - --dart2js-optimization=O4 + --dart2js-optimization=O4 || (echo "❌ Flutter build failed" && exit 1) + echo "✅ Сборка завершена" - name: Deploy Web App run: | echo "📦 Копируем веб-приложение..." - rsync -avz --delete mnemo_cards_web_v2/build/web/ \ - ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/var/www/mnemo_cards/ + timeout 120 rsync -avz --delete mnemo_cards_web_v2/build/web/ \ + ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/var/www/mnemo_cards/ || (echo "❌ Rsync failed" && exit 1) echo "✅ Веб-приложение скопировано" - name: Fix Permissions and Verify run: | - ssh -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 echo "🔧 Исправляем права доступа..." chown -R www-data:www-data /var/www/mnemo_cards @@ -419,7 +423,7 @@ jobs: sleep 10 echo "🔍 Финальная проверка доступности всех сайтов..." - ssh -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 echo "📊 Статус всех сервисов:"