Минимальный конфиг Docker файла и git actions
Устанавливаем 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!"