# 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. Главный пункт: быть милашкой^^