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