Минимальный конфиг Docker файла и git actions

Deploy проекта на сервере

splinter

Устанавливаем Docker - Docker install manual

В репозитории проекта необходимо создать файл Dockerfile

Примерное содержимое файла Dockerfile

# Создать образ на основе базового слоя python (там будет ОС и интерпретатор Python).
# 3.10 — используемая версия Python. slim — образ имеет только необходимые компоненты для запуска
FROM python:3.10-slim

# Cоздание директории внутри контейнера
RUN mkdir /project_name

# Копирование файла зависимостей в образ
COPY requirements.txt /project_name

# Выполнить установку зависимостей внутри контейнера.
RUN pip3 install -r /project_name/requirements.txt --no-cache-dir

# Скопировать содержимое директории с проектом c локального компьютера в образ
COPY ./ /project_name

# Сделать директорию /project_name рабочей директорией. 
WORKDIR /project_name

# Выполнить запуск app при старте контейнера.
CMD ["python3", "./main.py"]

Приверное соделжимое  .github/workflows/main.yaml

name: gtp_bot

on: [push]

jobs:
  tests:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: 3.11

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip 
        pip install flake8 pep8-naming flake8-broken-line flake8-return flake8-isort
        pip install -r ./requirements.txt 
  
  build_and_push_to_docker_hub:
        name: Push Docker image to Docker Hub
        runs-on: ubuntu-latest
        needs: tests
        steps:
          - uses: actions/checkout@v2 
          - name: Set up Docker Buildx
            run: docker build . -t ssuhotskiy/gpt_bot:latest
          - name: Login to Docker 
            uses: docker/login-action@v1 
            with:
              username: ${{ secrets.DOCKER_USERNAME }} 
              password: ${{ secrets.DOCKER_PASSWORD }}
          - name: Push to Docker Hub
            run: docker push ssuhotskiy/gpt_bot:latest

  deploy:
      runs-on: ubuntu-latest
      needs: build_and_push_to_docker_hub
      if: github.ref == 'refs/heads/master'
      steps:
      - name: executing remote ssh commands to deploy
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USER }}
          key: ${{ secrets.SSH_KEY }}
          command_timeout: 10m
          script: |
            docker stop gpt_bot || true
            docker rm gpt_bot || true
            docker image rm ssuhotskiy/gpt_bot:latest
            docker pull ssuhotskiy/gpt_bot:latest
            docker run -d --name gpt_bot \
            -e TOKEN=${{ secrets.TOKEN }} \
            -e OPENAI_KEY=${{ secrets.OPENAI_KEY }} \
            -e admin_ids=${{ secrets.admin_ids }} \
            -e AUTH_TOKEN=${{ secrets.AUTH_TOKEN }} \
            -e KANDINSKY_API=${{ secrets.KANDINSKY_API }} \
            -e KANDINSKY_SECRET_KEY=${{ secrets.KANDINSKY_SECRET_KEY }} \
            ssuhotskiy/gpt_bot:latest

            
  send_message:
    runs-on: ubuntu-latest
    needs: deploy
    steps:
    - name: send message
      uses: appleboy/telegram-action@master
      with:
        to: ${{ secrets.admin_ids }}
        token: ${{ secrets.TOKEN }}
        message: "Deploy ${{ github.workflow }} successful!\n/start to run bot!"