deploy.yml 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. name: Build and Deploy
  2. on:
  3. push:
  4. branches:
  5. - master
  6. jobs:
  7. build-and-deploy:
  8. runs-on: ubuntu-latest
  9. steps:
  10. - name: Checkout code
  11. uses: actions/checkout@v4
  12. - name: Set up Python
  13. uses: actions/setup-python@v5
  14. with:
  15. python-version: '3.10'
  16. - name: Set up Node.js
  17. uses: actions/setup-node@v4
  18. with:
  19. node-version: '20'
  20. - name: Install dependencies and Build
  21. run: |
  22. npm ci
  23. # Генерируем локализации перед билдом
  24. python scripts/manage_locales.py split
  25. npm run build
  26. - name: Deploy to Server
  27. uses: appleboy/scp-action@master
  28. with:
  29. host: ${{ secrets.REMOTE_HOST }}
  30. username: ${{ secrets.REMOTE_USER }}
  31. key: ${{ secrets.SSH_PRIVATE_KEY }}
  32. source: "dist/,backend/,nginx.conf,radionica-backend.service"
  33. target: "/tmp/radionica3d_deploy"
  34. strip_components: 0
  35. - name: Execute remote commands
  36. uses: appleboy/ssh-action@master
  37. with:
  38. host: ${{ secrets.REMOTE_HOST }}
  39. username: ${{ secrets.REMOTE_USER }}
  40. key: ${{ secrets.SSH_PRIVATE_KEY }}
  41. script: |
  42. export REMOTE_DIR="/var/www/radionica3d"
  43. export CHOWN_USER="www-data"
  44. # Подготовка папок
  45. sudo mkdir -p $REMOTE_DIR/html $REMOTE_DIR/backend
  46. # Обновление файлов
  47. sudo cp -r /tmp/radionica3d_deploy/dist/* $REMOTE_DIR/html/
  48. sudo cp -r /tmp/radionica3d_deploy/backend/* $REMOTE_DIR/backend/
  49. # Настройка бэкенда
  50. cd $REMOTE_DIR/backend
  51. [ -d venv ] || python3 -m venv venv
  52. source venv/bin/activate
  53. # Умная установка библиотек
  54. (cmp -s /tmp/radionica3d_deploy/backend/requirements.txt requirements.txt || (cp /tmp/radionica3d_deploy/backend/requirements.txt requirements.txt && pip install -r requirements.txt && pip install gunicorn uvicorn))
  55. # Конфиги
  56. sudo cp /tmp/radionica3d_deploy/nginx.conf /etc/nginx/sites-available/radionica3d
  57. sudo ln -sf /etc/nginx/sites-available/radionica3d /etc/nginx/sites-enabled/
  58. sudo nginx -t && sudo systemctl restart nginx
  59. # Служба
  60. sudo cp /tmp/radionica3d_deploy/radionica-backend.service /etc/systemd/system/
  61. sudo systemctl daemon-reload
  62. sudo systemctl restart radionica-backend
  63. # Права
  64. sudo chown -R $CHOWN_USER:$CHOWN_USER $REMOTE_DIR
  65. # Очистка
  66. sudo rm -rf /tmp/radionica3d_deploy