stuff
This commit is contained in:
parent
81ca2be934
commit
013c829c92
4 changed files with 314 additions and 94 deletions
|
|
@ -15,6 +15,11 @@ jobs:
|
|||
name: Deploy Backend
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
|
|
@ -42,13 +47,173 @@ jobs:
|
|||
mnemo_cards_backend \
|
||||
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:~/
|
||||
|
||||
# Sync build script
|
||||
rsync -avz tools/deploy/backend/server_build.sh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:~/mnemo_cards_backend/
|
||||
ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "chmod +x ~/mnemo_cards_backend/server_build.sh"
|
||||
|
||||
- name: Trigger Remote Build
|
||||
- name: Obtain Certificates
|
||||
run: |
|
||||
ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "~/mnemo_cards_backend/server_build.sh"
|
||||
ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
|
||||
set -e
|
||||
echo "🔐 Checking Let's Encrypt certificates..."
|
||||
|
||||
# Проверяем наличие 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 сертификаты уже существуют"
|
||||
else
|
||||
echo "⚠️ Сертификаты не найдены. Пытаемся получить через webroot (nginx продолжает работать)..."
|
||||
|
||||
# Убеждаемся, что nginx запущен
|
||||
if ! sudo systemctl is-active --quiet nginx; then
|
||||
echo "🚀 Запускаем nginx для webroot режима..."
|
||||
sudo systemctl start nginx
|
||||
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 tee /etc/nginx/sites-available/acme-challenge > /dev/null << 'NGINX_EOF'
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
|
||||
location /.well-known/acme-challenge/ {
|
||||
root /var/www/html;
|
||||
try_files $uri =404;
|
||||
}
|
||||
|
||||
location / {
|
||||
return 404;
|
||||
}
|
||||
}
|
||||
NGINX_EOF
|
||||
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
|
||||
ENDSSH
|
||||
|
||||
- name: Get Dependencies
|
||||
run: |
|
||||
ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
|
||||
set -e
|
||||
cd ~/mnemo_cards_backend
|
||||
echo "📦 Getting dependencies..."
|
||||
dart pub get
|
||||
ENDSSH
|
||||
|
||||
- name: Compile Server
|
||||
run: |
|
||||
ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
|
||||
set -e
|
||||
cd ~/mnemo_cards_backend
|
||||
echo "🔨 Compiling server..."
|
||||
dart compile exe --verbose lib/main.dart -o server_build.exe
|
||||
ENDSSH
|
||||
|
||||
- name: Stop Service
|
||||
run: |
|
||||
ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
|
||||
set -e
|
||||
echo "🛑 Stopping service..."
|
||||
sudo systemctl stop mnemo_cards_server || true
|
||||
ENDSSH
|
||||
|
||||
- name: Update Service Configuration
|
||||
run: |
|
||||
ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
|
||||
set -e
|
||||
cd ~/mnemo_cards_backend
|
||||
echo "⚙️ Updating service configuration..."
|
||||
sudo chmod 777 mnemo_cards_server.service
|
||||
sudo cp mnemo_cards_server.service /etc/systemd/system/
|
||||
ENDSSH
|
||||
|
||||
- name: Update Executable
|
||||
run: |
|
||||
ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
|
||||
set -e
|
||||
cd ~/mnemo_cards_backend
|
||||
echo "🔄 Replacing executable..."
|
||||
sudo cp server_build.exe server.exe
|
||||
rm server_build.exe
|
||||
ENDSSH
|
||||
|
||||
- name: Configure Certificates
|
||||
run: |
|
||||
ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
|
||||
set -e
|
||||
# Check certificates and configure mode
|
||||
# Используем multi-domain сертификат mnemo-cards.online (если есть)
|
||||
if [ -d "/etc/letsencrypt/live/mnemo-cards.online" ] && [ -f "/etc/letsencrypt/live/mnemo-cards.online/fullchain.pem" ]; then
|
||||
echo "✅ Let's Encrypt multi-domain сертификат найден. Настраиваем HTTPS режим..."
|
||||
sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe --certs /etc/letsencrypt/live/mnemo-cards.online -a 0.0.0.0 -p 8081|' /etc/systemd/system/mnemo_cards_server.service
|
||||
elif [ -d "/etc/letsencrypt/live/api.mnemo-cards.online" ]; then
|
||||
echo "✅ Let's Encrypt сертификат для API найден. Настраиваем 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
|
||||
ENDSSH
|
||||
|
||||
- name: Restart Service
|
||||
run: |
|
||||
ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'ENDSSH'
|
||||
set -e
|
||||
echo "🚀 Restarting service..."
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl start mnemo_cards_server
|
||||
sleep 2
|
||||
systemctl status mnemo_cards_server --no-pager
|
||||
ENDSSH
|
||||
|
||||
- name: Ensure Nginx Running
|
||||
run: |
|
||||
ssh ${{ 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
|
||||
fi
|
||||
else
|
||||
echo "❌ Ошибка в конфигурации nginx!"
|
||||
sudo nginx -t || true
|
||||
fi
|
||||
fi
|
||||
ENDSSH
|
||||
|
||||
deploy-web:
|
||||
name: Deploy Web App
|
||||
|
|
@ -71,7 +236,7 @@ jobs:
|
|||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
apt-get update && apt-get install -y rsync openssh-client jq git
|
||||
apt-get update && apt-get install -y rsync openssh-client jq git nodejs npm
|
||||
|
||||
- name: Setup SSH
|
||||
run: |
|
||||
|
|
|
|||
|
|
@ -34,13 +34,78 @@ jobs:
|
|||
mnemo_cards_backend \
|
||||
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:~/
|
||||
|
||||
# Sync build script
|
||||
rsync -avz tools/deploy/backend/server_build.sh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:~/mnemo_cards_backend/
|
||||
ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "chmod +x ~/mnemo_cards_backend/server_build.sh"
|
||||
|
||||
- name: Trigger Remote Build
|
||||
- name: Build and Deploy Backend
|
||||
run: |
|
||||
ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "~/mnemo_cards_backend/server_build.sh"
|
||||
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
|
||||
|
|
|
|||
|
|
@ -32,13 +32,78 @@ rsync -avz --delete --exclude '.*' --exclude 'build' --exclude 'server.exe' \
|
|||
mnemo_cards_backend \
|
||||
"${SERVER_USER}@${SERVER_IP}:~/"
|
||||
|
||||
# Sync build script
|
||||
rsync -avz tools/deploy/backend/server_build.sh "${SERVER_USER}@${SERVER_IP}:~/mnemo_cards_backend/"
|
||||
ssh "${SERVER_USER}@${SERVER_IP}" "chmod +x ~/mnemo_cards_backend/server_build.sh"
|
||||
|
||||
echo -e "${BLUE}[INFO]${NC} Triggering remote build..."
|
||||
|
||||
# Execute remote build script
|
||||
ssh -t "${SERVER_USER}@${SERVER_IP}" "~/mnemo_cards_backend/server_build.sh"
|
||||
# Execute build directly via SSH
|
||||
ssh -t "${SERVER_USER}@${SERVER_IP}" << '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
|
||||
|
||||
echo -e "${GREEN}[SUCCESS]${NC} Backend deployment triggered successfully!"
|
||||
|
|
|
|||
|
|
@ -1,75 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Script to build backend on the server
|
||||
# This script assumes source code is already present (synced via rsync)
|
||||
# Usage: ./server_build.sh
|
||||
|
||||
set -e -v
|
||||
|
||||
# Go to backend directory
|
||||
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
|
||||
Loading…
Reference in a new issue