145 lines
5.6 KiB
YAML
145 lines
5.6 KiB
YAML
name: Deploy Mnemo Cards
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
push:
|
|
branches:
|
|
- master
|
|
|
|
jobs:
|
|
deploy-backend:
|
|
name: Deploy Backend
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v3
|
|
|
|
- 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: Sync Source Code
|
|
run: |
|
|
# Sync common packages
|
|
rsync -avz --delete --exclude '.*' --exclude 'build' --exclude 'doc' \
|
|
mnemo_cards_common \
|
|
mnemo_cards_common_backend \
|
|
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:~/
|
|
|
|
# Sync backend project
|
|
rsync -avz --delete --exclude '.*' --exclude 'build' --exclude 'server.exe' \
|
|
mnemo_cards_backend \
|
|
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:~/
|
|
|
|
- name: Build and Deploy Backend
|
|
run: |
|
|
ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
|
|
set -e -v
|
|
|
|
cd ~/mnemo_cards_backend
|
|
|
|
# Get dependencies and compile
|
|
echo "📦 Getting dependencies..."
|
|
dart pub get
|
|
|
|
echo "🔨 Compiling server..."
|
|
dart compile exe --verbose lib/main.dart -o server_build.exe
|
|
|
|
# Stop service
|
|
echo "🛑 Stopping service..."
|
|
sudo systemctl stop mnemo_cards_server || true
|
|
|
|
# Update service file
|
|
echo "⚙️ Updating service configuration..."
|
|
sudo chmod 777 mnemo_cards_server.service
|
|
sudo cp mnemo_cards_server.service /etc/systemd/system/
|
|
|
|
# Update executable
|
|
echo "🔄 Replacing executable..."
|
|
sudo cp server_build.exe server.exe
|
|
rm server_build.exe
|
|
|
|
# Check certificates and configure mode
|
|
if [ -d "/etc/letsencrypt/live/api.mnemo-cards.online" ]; then
|
|
echo "✅ Let's Encrypt certificates found. Configuring dual mode..."
|
|
sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe --dual --certs /etc/letsencrypt/live/api.mnemo-cards.online -a 0.0.0.0 -p 8081|' /etc/systemd/system/mnemo_cards_server.service
|
|
else
|
|
echo "⚠️ No certificates found. Configuring HTTP mode..."
|
|
sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe -a 0.0.0.0 -p 8081|' /etc/systemd/system/mnemo_cards_server.service
|
|
fi
|
|
|
|
# Reload and restart
|
|
echo "🚀 Restarting service..."
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl start mnemo_cards_server
|
|
|
|
# Check status
|
|
sleep 2
|
|
systemctl status mnemo_cards_server --no-pager
|
|
|
|
# Гарантируем, что nginx запущен (важно для работы code.mnemo-cards.online)
|
|
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
|
|
fi
|
|
else
|
|
echo "❌ Ошибка в конфигурации nginx!"
|
|
sudo nginx -t || true
|
|
fi
|
|
fi
|
|
ENDSSH
|
|
|
|
deploy-web:
|
|
name: Deploy Web App
|
|
runs-on: ubuntu-latest
|
|
needs: deploy-backend
|
|
if: always() # Run even if backend fails (optional, but usually good to separate)
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Setup Flutter
|
|
uses: subosito/flutter-action@v2
|
|
with:
|
|
flutter-version: '3.35.5' # Adjust version as needed
|
|
channel: 'stable'
|
|
|
|
- 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: Build Web App
|
|
run: |
|
|
cd mnemo_cards_web_v2
|
|
flutter pub get
|
|
flutter build web --release --dart-define=API_BASE_URL=https://api.mnemo-cards.online --dart2js-optimization=O4
|
|
|
|
- name: Deploy Web App
|
|
run: |
|
|
# Sync build artifacts
|
|
rsync -avz --delete build/web/ ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/var/www/mnemo_cards/
|
|
|
|
- name: Fix Permissions
|
|
run: |
|
|
ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "chown -R www-data:www-data /var/www/mnemo_cards && chmod -R 755 /var/www/mnemo_cards"
|