2025-11-19 18:13:33 +00:00
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 }}:~/
2025-11-22 21:14:18 +00:00
- name : Build and Deploy Backend
2025-11-19 18:13:33 +00:00
run : |
2025-11-22 21:14:18 +00:00
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
2025-11-19 18:13:33 +00:00
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 :
2025-11-19 20:21:15 +00:00
flutter-version : '3.35.5' # Adjust version as needed
2025-11-19 18:13:33 +00:00
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
2025-11-20 18:41:09 +00:00
flutter build web --release --dart-define=API_BASE_URL=https://api.mnemo-cards.online --dart2js-optimization=O4
2025-11-19 18:13:33 +00:00
- 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"