name: Deploy to Server on: push: branches: - main - master jobs: check: name: Check Project runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.11' cache: 'pip' - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: Check syntax errors run: | python -m py_compile main.py python -m py_compile config.py python -m py_compile database.py python -m py_compile marzban.py python -m py_compile server.py python -m py_compile keyboards.py python -m py_compile states.py # Опционально: запуск линтера # - name: Run linter # run: | # pip install flake8 # flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics deploy: name: Deploy to Server runs-on: ubuntu-latest needs: check # Деплой только после успешной проверки steps: - name: Checkout repository uses: actions/checkout@v4 - name: Deploy via SSH uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USERNAME }} key: ${{ secrets.SSH_PRIVATE_KEY }} port: ${{ secrets.SSH_PORT }} script: | cd ${{ secrets.DEPLOY_PATH }} git pull origin main # Перезапуск через Docker Compose (если используется) # docker compose down # docker compose up -d --build # Или перезапуск systemd сервиса # sudo systemctl restart marzban-bot # Или перезапуск через Docker # docker stop marzban-bot || true # docker build -t marzban-bot ./docker # docker run -d --rm --name marzban-bot --env-file .env marzban-bot # Альтернативный вариант: копирование файлов через rsync # - name: Deploy files via rsync # uses: burnett01/rsync-deployments@6.0.0 # with: # switches: -avzr --delete --exclude='.git' --exclude='.env' --exclude='bot.db' # path: ./ # remote_path: ${{ secrets.DEPLOY_PATH }} # remote_host: ${{ secrets.SSH_HOST }} # remote_user: ${{ secrets.SSH_USERNAME }} # remote_key: ${{ secrets.SSH_PRIVATE_KEY }} # remote_port: ${{ secrets.SSH_PORT }}