---
# System prepended metadata

title: Docker deployment или как познать нирвану

---

# Docker deployment или как познать нирвану

1. Если нет аккаунта на Docker Hub - создать его, так же создать там репо с проектом.
2. В репозитории github зайти в settings->Secrets and variables->actions и создать несколько ключей:
DOCKERHUB_TOKEN - Токен из Docker Hub'а, его можно получить залогинившись в хабе, перейти в profile->security и сгенерировать новый access_token
DOCKERHUB_USERNAME - Docker ID, он же логин пользователя
WEBHOOK_URL - Ссылка на endpoint для деплоя: http://*адрес*:*порт*/hooks/redeploy
3. В github, перейти во вкладку actions и выбрать новый конфиг для docker image deploy. Откроется файл .yaml, в него перекинуть скрипт:
```

name: Docker deploy

on:
  push:
    branches: [ "main" ] #Ветка на гите, в данном случае дефолтная
  pull_request:
    branches: [ "main" ] #Тоже самое

jobs:

  build:

    runs-on: ubuntu-latest

    steps:
    - name: Checkout
      uses: actions/checkout@v1

    - name: Login to Docker Hub
      uses: docker/login-action@v2
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_TOKEN }}

    - name: Start containers
      uses: docker/build-push-action@v4
      with:
        context: .
        file: ./Dockerfile
        push: true
        tags: ${{ secrets.DOCKERHUB_USERNAME }}/middleware:latest #после слеша нужно вставить название своего image из Docker Hub, тег можно оставить latest
  redeploy:

    name: Webhook redeploy
    runs-on: ubuntu-latest
    needs: [build]

    steps:
      - name: Deploy docker container webhook
        uses: joelwmale/webhook-action@master
        env:
          WEBHOOK_URL: ${{ secrets.WEBHOOK_URL }}
          
```

4. На сервер (если уже всё готово и установлено) прокинуть проект из image:

*Создать папку app*
docker login -u *логин докера* -p *Пароль докера*
cd app 
docker build -t *Docker ID*/*Название docker-репо* . 
docker push *Docker ID*/*Название docker-репо*.

5. Запустить проект:
`docker run -d -p *порт*/*порт* --name=*название контейнера* *Docker ID*/*Название docker-репо*:*тег*`
6. Если не установлен webhook, то установить его на серваке: apt install webhook
7. На сервере, в папку от корня usr/local/bin прокинуть файл redeploy.sh и изменить в нём информацию о image, порты и название контейнера на соответсвующие
8. В основную папку сервера (root) прокинуть файл hooks.json и выдать права доступа: `chmod -R 755 ../usr/local/bin/redeploy.sh`
9. На сервере запустить хук: `webhook -hooks hooks.json -verbose`
10. Закинуть коммит в гит и радоваться
11. Главный пункт: быть милашкой^^
