Автоматизация серверной инфраструктуры. Автоматическая установка Docker и Compose на виртуальную машину через Ansible. Подключение сертификатов Let's Encrypt.
Скрытый контент
Чтобы не пропускать новые эпизоды подпишитесь на наш канал @deworkerpro в Telegram
Комментарии (153)
Arunas
спасибо, очень поможет, очень хорошый урок.
Руслан
Отличный эпизод, как всегда. Огромная просьба рассмотреть возможность добавить в материалы настройку Github Actions для CI/CD.
PS: интересует также, имеются ли в Ваших курсах материалы по опыту правильной организации multi-tenant архитектуры на любом из фреймовоков? Либо в планах на будущее)
Спасибо еще раз за супер курс!
Ruslan
Тёзка, там заявлен Дженкинс.
Видел на Ютубе CI/CD для Битбакета и для ГитЛаба тоже наверняка найдется.
Руслан
Руслан, спасибо, конечно, видел то что Jenkins заявлен. Просто Github Actions видется более перспективней в плане популярности в ближайшие время, хотелось на него перескочить в плане self-hosted CI/CD, не ставить на сервак java (Jenkins) или ruby (Gitlab CI).
Ruslan
А что с приватными репами, только за деньги, как и на самом Github ?
А вообщем, я о том, что нужно придерживаться плана. Я тоже могу написать, что сейчас большой downtime и давайте поднимем кластер для CI/CD без downtime.
Какие-то такие дополнения можно сделать в самом конце когда станет известно как делать: "Разработка аукциона на Slim и ReactJS" :)
Paul
Мощно!
Алекс Про
Снимайте, пожалуйста, видео на чёрной теме IDE!!!
Дмитрий Елисеев
Приведите пример видео с YouTube с красивой тёмной темой.
Но с сертификатами у меня получился жуткий костыль. Из коробки докер с letsencrypt не заработал, хотя в документации пишут, что должен. Или, может, дело в версии убунты? У меня 16.04
Дмитрий Елисеев
Просто можно как с gateway закрыть сертификатами и htpasswd снаружи в Nginx:
А в этом случае прокидываемый конфиг в контейнер как будет выглядеть? Самый базовый с ssl сниппетами и auth_basic_user_file /path/to/.htpasswd; в главном локейшене для nginx на домен registry.domain.com, к примеру, верно?
Дмитрий Елисеев
Да, примитивный с секцией server как приведённый в документации к registry, только переделанный для Let's Encrypt.
Роман
Спасибо!
BMWist
Было бы не плохо, если бы в одном уроке настройку registry сервера показали на этой же виртуалке, чтобы охватить все технологии, которые используется, мне было бы очень полезно ))
Роман
Дмитрий, я правильно понимаю что ваш кейс с оркестрацией сервера подразумевает абсолютно голый сервер? Если на удаленной машине, на которой я хочу поднять образы из реестра, уже стоит nginx и слушает 80 и 443 порты, то в этом случае не получится проброска этих портов для gateway в docker-compose-production и, как следствие образы не поднимутся. Завелось вместе с ssl только тогда, когда я сделал проброс незанятого порта, к примеру 5001 на 443 ("5001":"443", в докер композ прод), но для этого приходится добавлять порт на продакшене в строке браузера, для того чтобы происходило перенаправление в обработку докера на 443 порт. Хотел узнать, может есть какой-то лайфхак, чтобы разрулить эту ситуацию на уровне конфигов nginx, хотя пробовал разные варианты. Просто не хочется добавлять все время порт в строке браузера
Дмитрий Елисеев
Да, на сервере можно поднять только один Nginx на одном порту. Поэтому если уже стоит внешний Nginx, то можно в него добавить хост с proxy_pass localhost:5001
Александр Кулик
Курс супер. Но зачем так заморачиваться с сертификатами, если можно использовать Treafik. Он все это умеет из коробки.
Руслан
Александр, интересуют подробности других преимуществ Traefik vs nginx / haproxy etc. (кроме сертификатов) и опыт оптимальной установки/настройки?
Александр Кулик
Я только осваиваю. Но он много чего умеет. Про haroxy не слышал.
Руслан
Насколько понимаю, чтобы разобраться как обойтись средствами уже задействованного nginx, чем вводить дополнительный слой либо отдавать предпочтение одному из многих специализированных прокси-серверов/балансировщиков, уже заточенных под микросервисы и k8s (traefik, haproxy, envoy, kong и пр.). Последние конечно удобны разными плюшками из коробки, но на них можно будет легко мигрировать при необходимости и от нужд в этих плюшках конкретного проекта.
Дмитрий Елисеев
UPD 1: В Cron-задаче очистки Docker нужно добавить флаг "a":
docker system prune -af --filter "until=$((30*24))h"
Ruslan
А в эту чистку используемые контейнеры попадают, ведь проект может быть и год без изменений? Или это очищает только элементы из которых собирается наш контейнер?
Дмитрий Елисеев
$ docker system prune -a
This will remove:
- all stopped containers
- all networks not used by at least one container
- all images without at least one container associated to them
- all build cache
Sergei
ничего_не_понял_но_очень_интересно.jpg
BMWist
Буду переходить на vscale.io
Сарибжанов Ильдар
На мой взгляд идея ущербности установки с мануалов перед установкой скриптом - надумана.
Мы же сейчас говорим про разработчиков, которые разворачивание окружения производят раз в несколько месяцев, а то и реже. Что скрипт отдельный писать, что мануалы использовать итог один - всё равно придётся актуализировать скрипт под нужды. К тому же сам алгоритм инсталяции может поменяться, например, добавятся зависимости или платформа поменяется. Например, докер переедет go на rust и потребуется отдельно доставлять раст. А по итогу, чтобы починить свой шел придётся лезть в мануалы.
Я не говорю, что представленный материал не нужен, но я бы «продавал» его с позиции управления сложностью: производим декомпозицию алгоритма разворачивания сервера и уход от низкоуровневых абстракций (общение с терминалом) к высокому уровню - ансибл.
Спасибо за материал =)
Дмитрий Елисеев
Да, всегда приходится лазить в мануалы и любая автоматизация является оверхедом когда виртуалок и программистов в проекте не больше одной/одного. Тогда можно заходить и ставить софт и править конфиги вручную без скриптов, выполнить что-нибудь в БД без миграций и на локальном компьютере ставить тоже вручную.
Но как только виртуалок становится две, так сразу при ручном подходе получаем вероятность рассинхронизации версий и конфигов, когда на одной что-то поменяли или обновили, а на второй забыли или ещё не успели.
Или когда мы пускаем на сервер другого сисадмина с фриланса, который не понятно что там по своим шпаргалкам ставит и настраивает. Сразу получаем проблемы с тем, что он мог что-то забыть на одной из них. И что он через неделю уйдёт, а нам не очень полную шпаргалку оставит. Или что-то сломает, а мы не узнаем что именно.
Так что как только виртуалок и программистов становится много, то автоматизация во всём очень помогает. И пусть все сисадмины тоже коммитят в tasks.yml.
Руслан
Подскажите, доступа к root нет, использую в качестве remote_user пользователя,
Пишет ошибку: Failed to lock apt for exclusive operation
Подскажите, как настроить без root доступа?
Дмитрий Елисеев
Задачи с apt запускайте только от root (через become без become_user).
Arunas
после успешного make site, в кроне хостинга (в /etc/cron.d/certbot) введётся команда "...certbot -q renew".
Но как реально автоматом происходит certbot renew, если gateway (nginx) работает в докере,
а сертификат продлен снаружи? как в этой ситуации, происходит автоматическое продление сертификата?
Дмитрий Елисеев
Как упомянули после деплоя, в cli.ini вместо хука service nginx restart нужно вписать перезапуск gateway вроде такого:
в чем разница между этими вариантами?
Ведь, в первом варианте, когда в provisioning/roles/certbot/files/cli.ini записываем
renew-hook = /bin/sh -c 'cd /home/deploy/site && docker-compose restart gateway' , то при make site этот cli.ini пападает в /etc/letsencrypt/cli.ini (VM Debian у хостинга).
Arunas
у demo-auction.skucai.com деплоил (18-01-2020) проект, по первому варианту, и подожду 32 дней, посмотрю, продлится сертификат или нет.
Arunas
А как проверит cron: правильно введена команда?
Теперь, после успешного деплое, в VM Debian /etc/cron.d/certbot есть такая:
0 /12 * root test -x /usr/bin/certbot -a ! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew . А с crontab -e видно: 0 1 * docker system prune -af --filter "until=$((3024))h"
Дмитрий Елисеев
Разница в том, что роль certbot будет общая для всех production и staging серверов. Им может быть нужен разный хук и одинаковый cli.ini может всем не подойти. Поэтому можно всем скопировать общий cli.ini без хука, а потом уже в ролях site и staging добавить им по своей строке. Зависит от ситуации.
Arunas
спасибо.
Ruslan
Я что-то совсем запутался. Registry требует установки перед ним вэбсервера или нет?
Get https://registry.mydomain.com/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Ruslan
На это можно не отвечать. Я уже разобрался.
В итоге у меня собралась рабочая среда из:
WSL 2, CentOS и docker repository в одном контейнере без вэба впереди.
А можно ли в конфигах nginx применять пересенные, чтоб не перебивать названия сайтов "deworker.pro" на свои?
В 19и местах пришлось менять руками, так и запутаться можно.
Дмитрий Елисеев
Два варианта. Либо запускать его со своими сертификатами TLS_CERTIFICATE и htpasswd без внешнего Nginx, либо реестр запускать без сертификатов, настроив их в дополнительном Nginx.
Ruslan
Спасибо.
Мне понравился вариант, когда реро само за себя, если нужно на той же машине использовать вэб, то не нужно учитывать , что 80 и 443 уже используется.
Иван
Это тоже для новичков или курилка спецов по devops'у?
Вы не понимаете, что такое объяснение.
Объяснение, это не рассказ.
Дмитрий Елисеев
Здесь практика по разработке проекта.
Рассказывать что такое консоль, apt и cron здесь нет смысла.
По команде ansible-playbook -i hosts.yml site.yml у меня на удаленной машине (Ubuntu 18.04) произошла ошибка на шаге Add Certbot repository. Видимо он не смог потом сделать apt-get update. Возможно попробовать другой repo: ?
Я не понял, для того чтобы заработали поддомены надо ли предпринимать дополнительно что то или достаточно тех настроек nginx которые в контейнерах указаны?
Дмитрий Елисеев
Ещё нужно прописать A-записи с IP-адресом сервера в настройках DNS этих доменов и поддоменов.
Но это уже производится в панели управления регистратора, а не в проекте.
Дмитрий
На примере vscale, ip повторяет адрес основного домена? а порт нужно указать?
Дмитрий Елисеев
В панели управления регистратора или хостинга проставляем домену и поддомену одинаковую A-запись с одним IP-адресом нашей виртуалки. Или A-запись проставляем тоько домену, а с поддомена ссылаемся на домен через CNAME-запись.
Дмитрий
ошибка в таске Add Cert Repository, что тут можно предпринять?
upd: увидел ответ выше
Тимур
Дмитрий, привет
После выпуска сертификата apache не останавливается (Debian 10) - в связи не получается сделать deploy так как nginx не запускается
Иногда при запуске playbook для выпуска сертификата certbot дает ошибку, и после пользователь deploy не создается (в связи с чем не authorize не docker-login не работают). Если create-user раньше вытащить, ничего страшного?
И еще: как сделать интерпритатор питона по умолчанию на 3 версию - в логах ловлю сообщения на прекращение поддержки старых версий
Дмитрий Елисеев
После выпуска сертификата apache не останавливается
Это со свежим кодом из репозитория с конструкцией wait_for?
Если create-user раньше вытащить, ничего страшного?
Ничего страшного. Можно ставить в любой последовательности.
Для игнорирования ошибок можно добавить ignore_errors: true к задаче получения сертификатов.
как сделать интерпритатор питона по умолчанию на 3 версию
Столкнулся с проблемой. Если создать пароль nginx.htpasswd с параметром -B то nginx возвращает ошибку 500. Если этот параметр не применять, то всё хорошо. Образ был просто nginx.
Дмитрий Елисеев
Да, Nginx не поддерживает этот алгоритм.
Дмитрий Елисеев
UPD: Улучшили фрагмент с 26-й минуты про запуск Apache-сервера на использование конструкции wait_for.
Александр
Ошибка в make docker-login на шаге [Log into private registry]
fatal: [server]: FAILED! => {"changed": true, "cmd": "docker login -u ** -p *** registry.tiru.ru", "delta": "0:00:00.306697", "end": "2020-03-09 14:13:12.031002", "msg": "non-zero return code", "rc": 1, "start": "2020-03-09 14:13:11.724305", "stderr": "WARNING! Using --password via the CLI is insecure. Use --password-stdin.\nError response from daemon: Get registry.tiru.ru/v2/: dial tcp: lookup registry.tiru.ru on 188.93.16.19:53: no such host", "stderr_lines": ["WARNING! Using --password via the CLI is insecure. Use --password-stdin.", "Error response from daemon: Get registry.tiru.ru/v2/: dial tcp: lookup registry.tiru.ru on 188.93.16.19:53: no such host"], "stdout": "", "stdout_lines": []}
Дмитрий Елисеев
Поддомен не находит. Настройте его DNS-записи на хостинге или в панели регистратора.
Александр
Добрый день, а что именно написать в DNS , какой именно айпишник? Чтото гдето не найду момент по видео, какие записи вставлять. Да и в личном кабинете докерхаб про это не сказано.
Дмитрий Елисеев
В панели хостинга в настройках доменов создать A-запись с названием поддомена и вписать туда IP-адрес вашей виртуальной машины.
Александр
что не хватает ему не пойму, может надо в своем докер репозитории какие нить теги создать ? А то он пустой.
Юрий
Добрый вечер!!!
после Check if server is running все обрубается и вылетает ошибка
fatal: [server]: FAILED! => {"changed": true, "cmd": "docker run -d --name apache -v /var/www/html:/usr/local/apache2/htdocs/ -p 80:80 httpd:2.4", "delta": "0:00:00.128552", "end": "2020-03-09 19:28:01.553707", "msg": "non-zero return code", "rc": 125, "start": "2020-03-09 19:28:01.425155", "stderr": "docker: Error response from daemon: Conflict. The container name \"/apache\" is already in use by container \"4ac2b371a956a4025e9415757d3b1578b2906ae308a63a45b5fa6a014edd3b9e\". You have to remove (or rename) that container to be able to reuse that name.\nSee 'docker run --help'.", "stderr_lines": ["docker: Error response from daemon: Conflict. The container name \"/apache\" is already in use by container \"4ac2b371a956a4025e9415757d3b1578b2906ae308a63a45b5fa6a014edd3b9e\". You have to remove (or rename) that container to be able to reuse that name.", "See 'docker run --help'."], "stdout": "", "stdout_lines": []}
Юрий
После повторного выполнения make site
task path: /home/pamparam/PhpstormProjects/auction/provisioning/roles/site/tasks/generate_certificates.yml:15
skipping: [server] => {"changed": false, "skip_reason": "Conditional result was False"}
проверил по этим адресам есть /etc/letsencrypt/live/auction.pamdev.ru/cert.pem
но к доменам и поддоменам они не привязаны и make push не проходит так как стучится по https
Дмитрий Елисеев
Так как файлы уже есть, то при последующих запусках всегда будет skipping
К доменам и поддоменам они теперь должны привязываться в Nginx.
Юрий
да но в директории /etc/nginx/snippets/ файлов
ssl.conf
certbot.conf
нет
и nginx дальше не дает выполнить команды
Дмитрий Елисеев
А почему их там нет?
Юрий
пока сам не понимаю..
выполняю команду
make site
ожидаю что должны появится но их нет
Юрий
вообще нет nginx
Дмитрий Елисеев
Ansible толлько устанавливает Docker с Certbot и генерирует сертификаты.
А сам проект с Nginx и PHP деплоится через make deploy после make build и make push.
Дмитрий Елисеев
Если в первый раз вылетела ошибка, то добавьте к командам запуска и остановки apache значения ignore_errors: yes и перезапустите снова.
Александр
Вобщем запнулся на этом уроке. Вторые выходные сижу на нем. выше писал про Error response from daemon: Get registry.tiru.ru/v2/: dial tcp: lookup registry.tiru.ru on 188.93.16.19:53: no such host"]
Создал поддомен registry.tiru.ru какие NS записи создавать, надоли сервак под этот домен, и если надо как его настроить.
Откуда на вашем регистре поддомене nginx.
Ни какой инфы в видосах не нашел, как смотреть дальнейшие видео нипонятно, тк на практике не выходит ничего.
Спулил с гита ветку последней версии и откатывал на версию этого урока. Менял домен deworker.pro автозаменой на свой , не выходит. Дмитрий объясните по подробнее про домен registry.tiru.ru , тк хочется проверить вашу теорию на практике , своими ручками. А не просто поверить этой "теории"
Дмитрий Елисеев
Сам поддомен нужно создать в панели управления вашего хостинга, где вы регистрировали домен.
Там должно быть примерно так, но с вашими адресами:
Хост | Тип | Значение
---------------------------------------------
tiru.ru | A | 31.184.254.199
registry.tiru.ru | A | 31.184.254.199
Так поддомены создаются и привязываются к виртуальным машинам по их IP-адресам. И только после этого начинают открываться в браузере.
Александр
так и есть у меня сейчас
только ошибка не с айпишником 188.93.16.19 как раньше, а с моим 31.184.254.199
.......", "msg": "non-zero return code", "rc": 1, "start": "2020-03-14 12:35:45.822078", "stderr": "WARNING! Using --password via the CLI is insecure. Use --password-stdin.\nError response from daemon: Get registry.tiru.ru/v2/: dial tcp 31.184.254.199:443: connect: connection refused", "stderr_lines": ["WARNING! Using --password via the CLI is insecure. Use --password-stdin.", "Error response from daemon: Get registry.tiru.ru/v2/: dial tcp 31.184.254.199:443: connect: connection refused"], "stdout": "", "stdout_lines": []}
сертификат тоже чтоли нужен на этот домен сделать, походу.
Дмитрий Елисеев
Да, сделать сертификат и для него.
Александр
сделал не помогло , ...login attempt to registry.tiru.ru/v2/ failed with status: 404 Not Found"....
ни какой формы авторизации нету по этому адресу как у Вас. Чтото я вобще не догоняю.
registry.tiru.ru", "delta": "0:00:00.529081", "end": "2020-03-16 18:12:43.121638", "msg": "non-zero return code", "rc": 1, "start": "2020-03-16 18:12:42.592557", "stderr": "WARNING! Using --password via the CLI is insecure. Use --password-stdin.\nError response from daemon: login attempt to registry.tiru.ru/v2/ failed with status: 404 Not Found", "stderr_lines": ["WARNING! Using --password via the CLI is insecure. Use --password-stdin.", "Error response from daemon: login attempt to registry.tiru.ru/v2/ failed with status: 404 Not Found"], "stdout": "", "stdout_lines": []}
Дмитрий Елисеев
Виртуалку и поддомен для реестра вы сделали.
Теперь осталось установить туда сам реестр по примерам из комментариев выше.
Arunas
после make deploy demo-auction.arsku.com/работает, а api.demo-auction.arsku.com кидает ошибку: 502 Bad Gateway.
команда docker logs --since 30s -f auction_api_1 даёт ответ:
2020/03/18 15:17:46 [error] 6#6: *66 connect() failed (113: Host is unreachable) while connecting to upstream, client: 172.18.0.7, server: , request: "GET / HTTP/1.0", upstream: "fastcgi://172.18.0.3:9000", host: "api.demo-auction.arsku.com"
как решить эту проблему?
правда, после ansible make site остался контейнер httpd:2.4 apache, я его остановил...
Дмитрий, приветствую.
А не могли бы вы объяснить, за что отвечает переменная REGISTRY при команде make docker-login
Видел в комментариях, что люди тоже столкнулись с проблемой на этой команде, но точного ответа и понимания так и не последовало после ваших советов/ответов.
Я правильно понимаю, что вы не используете докер хаб, а создали свой регистр для хранения образов? Или я ошибаюсь?
Если это так, то не ясно, как создавать свой регистр из данных видео.
На хабре есть конечно статьи, но хотелось бы тут узнать все нюансы которые вы затрагиваете.
По крайней мере у меня есть аккаунт на DockerHub и я успешно сделал туда пуш в виде docker push myaccount/php:1 (например), но если я пытаюсь использовать команду "docker login -u {{ username }} -p {{ password }} {{ registry }}", как в видео, меня шлют лесом и говорят что нет такого регистра.
Вот хотелось бы понять, почему у вас работает и что это за registry.deworker.pro
Заранее спасибо за ответ
UPD - нашел в комментах инфу что требуется поднять свой регистр. Как то не приятно, что требуется копаться в комментах, в поисках информации которая не дается в курсе. Это прям минус.
Олег
Если кто столкнулся с таким моментов, что у него нет собственного докер регистра, можно поступить так:
Регистрируетесь на докер хаб
Меняете docker_login.yml на такое
При использование команды make build и make push используется для переменной REGISRTY ваш айдишник на докер хабе.
Пулится пушится логинится успешно.
Минус всего этого - ваши образы на докер хабе публичные
Дмитрий Елисеев
Я правильно понимаю, что вы не используете докер хаб, а создали свой регистр для хранения образов?
Да, именно так. И в параметре REGISTRY мы его адрес указываем.
Если это так, то не ясно, как создавать свой регистр из данных видео.
Про это запишу скоро отдельное видео.
elmut
Спустя 10 дней получился настроить wsl 2->Ubuntu-18.04 = Ansible +Docker Registry и wsl 2->Debian это у нас production-сервера
и wsl 2->Ubuntu-20 = dev
Александр
В шторме, Не могу понять по комитам на гите, какой соответствует окончанию этого урока? Даты коммитов перемешаны му собой не разберешь. Хорошо бы подписывали , на какой комит переключаться под конец урока, чтоб ручками все проверить самому ))
Дмитрий Елисеев
К этому уроку вся группа коммитов про provisioning до "Added site certbot renew hook".
Ярослав
При попытке запушить билды на AWS мне выпадает сообщение "no basic auth credentials". До этого успешно создал реестр и команда make docker-login успешно сработала. Что теперь делать?
Ярослав
P.S. Разобрался уже. Я просто вводил одну команду, а в makefile она уже другая.
Ярослав
И все равно. Я застрял на этом уроке. Не понимаю, почему у меня не работает. Делаю пошагово за автором. Дохожу до создания своего отдельного приватного репозитория. Перехожу на урок 33, создаю репозиторий. Логинюсь в него. Пушу туда образы. Все проходит нормально. Ввожу команду деплоя и вижу следующее:
regal@regal-Inspiron-5521:~/projects/auction$ HOST=deploy@ec2-34-253-166-211.eu-west-1.compute.amazonaws.com PORT=22 REGISTRY=registry.newmagic.space IMAGE_TAG=master-1 BUILD_NUMBER=1 make deploy
ssh deploy@ec2-34-253-166-211.eu-west-1.compute.amazonaws.com -p 22 'rm -rf site_1'
ssh deploy@ec2-34-253-166-211.eu-west-1.compute.amazonaws.com -p 22 'mkdir site_1'
scp -P 22 docker-compose-production.yml deploy@ec2-34-253-166-211.eu-west-1.compute.amazonaws.com:site_1/docker-compose-production.yml
docker-compose-production.yml 100% 683 6.2KB/s 00:00
ssh deploy@ec2-34-253-166-211.eu-west-1.compute.amazonaws.com -p 22 'cd site_1 && echo "COMPOSE_PROJECT_NAME=auction" >> .env'
ssh deploy@ec2-34-253-166-211.eu-west-1.compute.amazonaws.com -p 22 'cd site_1 && echo "REGISTRY=registry.newmagic.space" >> .env'
ssh deploy@ec2-34-253-166-211.eu-west-1.compute.amazonaws.com -p 22 'cd site_1 && echo "IMAGE_TAG=master-1" >> .env'
ssh deploy@ec2-34-253-166-211.eu-west-1.compute.amazonaws.com -p 22 'cd site_1 && docker-compose -f docker-compose-production.yml pull'
Pulling frontend ... error
Pulling api-php-fpm ... error
Pulling api ... error
Pulling gateway ... error
ERROR: for gateway Get registry.newmagic.space/v2/auction-gateway/manifests/master-1: no basic auth credentials
ERROR: for api-php-fpm Get registry.newmagic.space/v2/auction-api-php-fpm/manifests/master-1: no basic auth credentials
ERROR: for api Get registry.newmagic.space/v2/auction-api/manifests/master-1: no basic auth credentials
ERROR: for frontend Get registry.newmagic.space/v2/auction-frontend/manifests/master-1: no basic auth credentials
Get registry.newmagic.space/v2/auction-gateway/manifests/master-1: no basic auth credentials
Get registry.newmagic.space/v2/auction-api-php-fpm/manifests/master-1: no basic auth credentials
Get registry.newmagic.space/v2/auction-api/manifests/master-1: no basic auth credentials
Get registry.newmagic.space/v2/auction-frontend/manifests/master-1: no basic auth credentials
make: *** [Makefile:55: deploy] Ошибка 1
Я худо-бедно умею программировать, но таким разворачиванием еще не занимался, я в этом новичок. Помогите разобраться пожалуйста.
Дмитрий Елисеев
Логинюсь в него. Пушу туда образы.
Теперь залогиньтесь с сервера для пулла:
cd provisioning
make docker-login
Ярослав
Да, получилось. Но тут же пошла другая ошибка:
Creating network "auction_default" with the default driver
Creating auction_api-php-fpm_1 ... done
Creating auction_frontend_1 ... done
Creating auction_api_1 ... done
Creating auction_gateway_1 ...
Creating auction_gateway_1 ... error
ERROR: for auction_gateway_1 Cannot start service gateway: driver failed programming external connectivity on endpoint auction_gateway_1 (3ca58f973879dc9b13c525aba77c02b9e90edae106d3350e426c1b8027b8a4c9): Bind for 0.0.0.0:443 failed: port is already allocated
ERROR: for gateway Cannot start service gateway: driver failed programming external connectivity on endpoint auction_gateway_1 (3ca58f973879dc9b13c525aba77c02b9e90edae106d3350e426c1b8027b8a4c9): Bind for 0.0.0.0:443 failed: port is already allocated
Encountered errors while bringing up the project.
make: *** [Makefile:56: deploy] Ошибка 1
Сервера реестра и основного проекта находятся на разных виртуалках под разными IP-адресами. Попробую сделать что-то с этим, но спасибо за ответ, который меня продвинул дальше.
Игорь
Подскажите, у вас получилось разобраться в чем тут проблема? Завис на этом же месте.
Подскажите пожалуйста после запуска docker-compose и обращении к странице выдает ошибку
Лишний раз такие конструкции можно не прописывать если такие update_cache: yes есть у других шагов.
slo_nik
Добрый вечер.
Дмитрий, подскажите пожалуйста.
Получится использовать Ваш пример для частного репозитория на docker hub?
Будет ли частный репозиторий доступен кому-то кроме меня?
Как я понял, необходимо установить на локальный компьютер ansible и certbot?
Дмитрий Елисеев
Для приватного доступа к DockerHub достаточно выполнить тот же docker login, но не в свой реестр, а в registry-1.docker.io
slo_nik
Я как раз имел ввиду свой реестр.
Если я его обозначил как "private", то кроме меня его никто не увидит?
Дмитрий Елисеев
Никто без пароля к нему не подключится.
slo_nik
Благодарю.)
Дядя Женя
Добрый день. Продолжаю наскоками смотреть и пробовать у себя. После ряда ошибок с почтой и получением сертификатов при деплое на сервер вроде и прошел на пару шагов вперед, но все ещё появляются ошибки видимо связанные с почтой и получением сертификата. Текст такой:
Не подскажите что это может быть и как с ним бороться?
Дмитрий Елисеев
Судя по сообщению:
"stderr_lines": ["/bin/sh: 1: certbot: not found"]
у вас по какой-то причине не установился certbot.
Дядя Женя
Поясните, пжл, ведь письмо с сертификатом должно быть на почте? Почту получаю, а сертификат не вижу. (раньше никогда с сертификатами дела не имел). И в чем ещё может быть причина?
Роман
я ранее имел дело с certbot и letsencrypt - сертификат на почту не приходит, но https норм работал как надо. видимо, так и должно быть
Роман
На сервере Ubuntu 20.04 сертификат не ставится. Почему - не знаю, переустановил сервер на Вebian 10, как у Дмитрия. Однако возникли проблемы с Add GPG key для докера.
А в каком именно месте у вас выдавало ошибку сертификата и что писало? Я попробовал ваш метод с подменой ссылки и к сожалению ничего не получилось, та же ошибка, что и была
Роман
Насколько я помню, была ошибка при выполнении самого первого таска из роли об установке сертификата.
Какой у вас vps-server? Debian 10?
Много где еще ошибки могут быть. Например, если вы скачаете коммит, о котором говорил Дмитрий в комментариях под уроком - там в файле hosts.yml не прописан пароль юзера. Я понимаю конечно, что возможно до этого Дмитрий сделал соединение ssh по ключу. Но это просто в качестве примера, а есть еще другие моменты, из-за которых у вас ошибки.
Я специально для этих уроков взял Debian 10 чистый, 512 мб оперативки, как у Дмитрия. В ruvds стоит 130р. в месяц, норм.
Дядя Женя
Да, взял как в уроке. Кстати, сразу не обратил внимание, но таск с присоединением ключа вроде проходит и без замены
TASK [docker : Add GPG key]
ok: [server]
Если в нем поменять на левый адрес, то сразу вылетает ошибка. Значит у меня на этом этапе все нормлаьно. Запинается на таске генерации нового сертификата. При этом таск с проверкой существования сертификата вроде тоже нормально проходит:
TASK [site : Check if certificate already exists]
ok: [server] => (item=demo.my.company)
ok: [server] => (item=api.demo.my.company)
И по ssh-key тоже вроде заходит:
TASK [docker : Verify fingerprint]
ok: [server]
Роман
Дядя Женя, Вы пишете "Запинается на таске генерации нового сертификата", то есть на таске "name: Generate new certificate".
То есть на этом таске:
В смысле на свой? На тот емаил, который настроен на моем сервере? Да и я его привел в отчете, который привел как пример. Сервер demo.my.company, а почта user@my.company. Она же указана в certbot.yml и site/defaults/main.yml. Конечно почта и сервер выдуманные, но смысл, думаю понятен.
Или нужно было где-то ещё поменять? Или даже на другую почту?
Роман
Не знаю, я указал реальный емаил. Возможно, как-то проверяется существование реального емаила перед генерацией сертификата?
Дядя Женя
Ну так у меня реальный. Я почту на сервере поднял, принимаю с неё письма, отправляю с неё на свою обычную гмайловскую почту и ещё на пару почтовиков. Только в примере, что выложил тут выше в отчете, заменил на выдуманную. Зачем реальную светить? ))) Чтоб спамеры спамили? )))))
Только вот в папке с почтой у обоих юзеров (пока настроил почту для двух юзеров) пусто, в смысле сертификата нет. А по идее должен прийти
Роман
Рецепт успешного прохождения этого урока. Через публичный репозиторий на docker hub.
купить домен. в управлении зоной днс сделать 2 А-записи: 1-запись: @ для ip_сервера_vps; 2-я запись: api для ip_сервера_vps
Или перейти на коммит, зайдя в папку проекта через git checkout 65036b2
Имя коммита "Added provisioning roles" 65036b2
Пойти в ruvds.com и взять там VPS с голой Debian10, минимум 1 ГБ оперативки! Я брал 512мб, как Дмитрий в видео, но не завелось ("running out of memory" - что-то такое было. (чтобы было дешевле, перейдите в "Готовые тарифы" и возьмите за 240р.)
hosts.yml.dist переименовать в hosts.yml
hosts.yml
ip прописать от вашего vps
ansible_ssh_pass добавить в hosts.yml и прописать пароль к root от вашего vps (у Дмитрия вообще нет этого параметра в файле hosts.yml! Я так понимаю, он заранее закинул ssh-публичный ключ на сервер, а приватный ключ прописал в конфигах ansible глобально? Дмитрий, если читаете этот пункт, просьба прояснить этот момент).
найти и заменить домен и api.домен на свой (ctrl+shift+f в phpStorm) В этих файлах:
provisioning/roles/site/defaults/main.yml
gateway/docker/production/nginx/conf.d/api.conf
gateway/docker/production/nginx/conf.d/frontend.conf
gateway/docker/production/nginx/conf.d/default.conf
Установка нужных прав
sudo chown -R имя_юзера_на_хостовой_машине:www-data ~/projects/auction
sudo chmod -R 755 ~/projects/auction
provisioning/roles/site/defaults/main.yml
параметр certbot_email: вписать свой email
перепроверить provisioning/roles/authorize.yml - путь до ssh на хостовой машине
создать ansible.cfg в папке provisioning с такими настройками:([defaults] host_key_checking = false).
roles/docker/tasks/main.yml "Install dependencies" добавить еще 2 пункта - gnupg и - lsb-release. Вот так должно быть:
создать 4 публичных репозитория в докер хабе: auction-api-php-fpm, auction-api, auction-frontend, auction-gateway. (скорее всего этот шаг можно пропустить, запушиться итак должно, но я сделал заранее, если не делать - не проверял)
cd provisioning
make site
make authorize
cd ..
REGISTRY=ваш_логин_в_докер_хаб IMAGE_TAG=master-1 make build
docker login (логин и пароль в докер хаб спросит, вбить). Не через make как у Дмитрия! Это команда докера нативная.
REGISTRY=ваш_логин_в_докер_хаб IMAGE_TAG=master-1 make push
не могу отредактировать свое большое сообщение, пишу здесь. немного отформатирую эти пункты:
hosts.yml ip прописать от вашего vps
ansible_ssh_pass добавить в hosts.yml и прописать пароль к root от вашего vps
у Дмитрия вообще нет этого параметра в файле hosts.yml! Я так понимаю, он заранее закинул ssh-публичный ключ на сервер, а приватный ключ прописал в конфигах ansible глобально? Дмитрий, если читаете этот пункт, просьба прояснить этот момент).
Дядя Женя
Жаль, что ваш ответ не был оформлен как ответ мне. Я на почте его не увидел, а само видео пока не просматривал заново и коменты не листал. Случайно сюда зашел. Чуток попозже попробую все что вы сказали (нужно внимательно вчитываться). В любом случае - спасибо.
Но до этого я уже успел сделать первых 5 пунктов. Вроде все так и есть, только сервер на vscale.io как Дмитрия. И 512 оперативки. Но при этом на память не ругается. Остальное буду смотреть
Роман
Последние 2 пункта списка это 1 пункт! (встроенный редактор так отформатировал). make deploy последним. это все в 1 строчку. надо так:
HOST=deploy@ip_от_вашего_vps PORT=22 REGISTRY=ваш_логин_в_докер_хаб IMAGE_TAG=master-1 BUILD_NUMBER=1 make deploy
Дядя Женя
После вставок в roles/docker/tasks/main.yml, roles/docker/tasks/main.yml, hosts.yml (тут ansible_ssh_pass) у меня запнулся уже на первом шаге с ошибкой: fatal: [server]: FAILED! => {"msg": "to use the 'ssh' connection type with passwords, you must install the sshpass program"} с указанием на файл provisioning/site.yml
Все остальное у меня было настроено так же.
Хотя ещё оставался вопрос о правах на запись. Не совсем понял где их прописывать. Я то из под винды работаю. Но по логике разрешение нужно прописывать для юзера на сервере, куда заливаю сайт. Тогда стоит вопрос, куда из файлов каталога provisioning вписать эти разрешения.
Роман
Какая у вас хостовая машина? Если ubuntu то видимо надо: apt-get install sshpass.
Дядя Женя
Хостовая, тоесть домашняя? Винда + wsl2+ubuntu. Установил sshpass и заливка запнулась на том же шаге, что и раньше, на TASK [site : Generate new certificate]
Если предположить, что ошибка в этой строке отчета: provisioning/roles/site/tasks/generate_certificates.yml:19, то опять приходим к тому, что что-то не так с почтой, потому что в этой секции написано:
- name: Generate new certificate
Да, почта работающая. Даже свою личную почту прописывал. Ни в спаме нигде нет.
Роман
А - записи верные для certbot_hosts?
Дядя Женя
Лучше задам глупые вопросы. certbot_hosts это где, в каком файле или это я файл пропустил?
А - записи прописываются ж у хостера, где сервер? Там все нормально, иначе не мог бы зайти, пропинговать, не получал бы почту. Ну или я не знаю как проверить.
Роман
certbot_hosts - это переменная ansible в файле provisioning/roles/site/defaults/main.yml
А - записи прописываются ж у хостера, где сервер?
- нет. А-записи прописываются у регистратора домена (хостер иногда сам может быть регистратором, а может и не быть). Комментарий Дмитрия на этой странице об А-записях: 2020-03-14 15:05. Ну да, если домены пинговались, значит все верно сделано было. Хотя, надо внимательнее посмотреть при пинге, там ай пи совпадает с ай пи вашего сервера или нет? Про почту не скажу ничего, никогда не настраивал
Дядя Женя
certbot_hosts Ну так про неё уже шла речь. Там все верно. Вы ж из этого файла цитату приводили.
А - записи прописываются сперва у регистратора, затем у хостера, чтоб привязать конкретные сервер к конкретному имени. И как я уже говорил, если бы было что-то не так, то нельзя было бы пинговать, нельзя было бы на него зайти по имени. А так я даже в браузере прописываю айпи и захожу на сервер. И айпи соответствует.
Дядя Женя
Есть ли возможность запуска команды make site со страницы сайта?
Роман
что значит со страницы сайта? на сервере имеется в виду?
Дядя Женя
Да хоть на сервере, хоть у себя в продакшене или девелопменте, с последующим переносом на сервер. Но в первую очередь у себя на компе, где продакшен и девелопмент.
Роман
На сервере не имеет смысла! make site оно же запускает ansible (а ansible предназначен для управления с хостовой машины вашими серверами).
Хостовая машина == ваш домашний комп в этом контексте
Дядя Женя
Кстати, нашел сегодня для понимания смысла по аналогии. В друпале есть такая штука - мультисайт. Фактически тоже, что и Дмитрий демонстрирует. Но в дурпале раньше не было автоматизации этого процесса. Все руками приходилось прописывать. Но вот несколько лет назад оказывается они сами сделали под себя приложение для управления сайтами на основе ansible+php
https://drupaldelphia.org/session/aegir-ansible-cloud-apis-how-we-use-drupal-automate-our-entire-platform-service
Получилась вэбморда для управления хоть у себя на хосте для разработки, продашкена и провизионинга, хоть для удаленного разворачивания аналогичной системы на сервере.
Дядя Женя
Да хоть на сервере, хоть у себя в продакшене или девелопменте, с последующим переносом на сервер. Но в первую очередь у себя на компе, где продакшен и девелопмент.
Дядя Женя
Слегка уточню свой интерес про запуск команд make site со страницы сайта. Есть два варианта:
Допустим хочу создать вэбинтерфейс для управления докер и всем этим удовольствием. Лень мне залазить в PHPStorm, руками править нужные файлы. Ведь по сути все сводится к добавлению адресов в нужное место пары файлов и потом запуск их с помощью Makefile. Если не нужно править код на странице сайта, добавлять какой-то функционал, исправлять баги, а только задеплоить на какой-то сервер(ы).
Допустим хочу на сервере, где крутиться сайт иметь возможность копировать его (или какую-то часть) на другие сервера. Ведь ансибл для этого и создан, чтоб разворачивать приложения на разных серверах.
На данный момент я понимаю, что в простейшем случае нужен код что-то типа такого (api/public/index.php):
Так я могу запустить какую-то команду и отобразить её вывод на странице сайта. Но если прописать:
if (isset($_POST['ping'])){ system("ansible -m ping google.com", $result);}
То выведет 127int(127)
Я так понимаю, что это из-за того, что находимся в "другом образе", не на самом хосте, где разрабатываем сайт, а в контейнере.
Пробовал в каталоге provisioning в файле Makefile Добавлять команду типа:
ping:
ansible -m ping all
Она работает. Но замена на
if (isset($_POST['ping'])){ system("make ping", $result);}
Тоже ничего не дала 127int(127).
Дядя Женя
Благодаря ошибке стал понимать, что в моем случае скорее всего нужно доустановить ансибл в один из контейнеров, чтоб получился приблизительный путь /app/public/index.
То есть по идее в docker-compose нужно добавить секцию что-то типа такого:
FROM php:7.4-cli-alpine
RUN apt install ansible
WORKDIR /app
и потом вызывать командой:
if (isset($_POST['ping'])){ system("make ping google.com", $result);}
Но пока не получилось
Дядя Женя
По крайней мере установка ансибл с помощью команды:
docker-compose run --rm api-php-cli apk add ansible
Хоть и установила ансибл, но ничего не дала в плане выполнения команд от его имени
Так же и с добавлением
RUN apk add ansible в api/docker/development/php-cli/Dockerfile
спасибо, очень поможет, очень хорошый урок.
Отличный эпизод, как всегда. Огромная просьба рассмотреть возможность добавить в материалы настройку Github Actions для CI/CD.
PS: интересует также, имеются ли в Ваших курсах материалы по опыту правильной организации multi-tenant архитектуры на любом из фреймовоков? Либо в планах на будущее)
Спасибо еще раз за супер курс!
Тёзка, там заявлен Дженкинс. Видел на Ютубе CI/CD для Битбакета и для ГитЛаба тоже наверняка найдется.
Руслан, спасибо, конечно, видел то что Jenkins заявлен. Просто Github Actions видется более перспективней в плане популярности в ближайшие время, хотелось на него перескочить в плане self-hosted CI/CD, не ставить на сервак java (Jenkins) или ruby (Gitlab CI).
А что с приватными репами, только за деньги, как и на самом Github ?
А вообщем, я о том, что нужно придерживаться плана. Я тоже могу написать, что сейчас большой downtime и давайте поднимем кластер для CI/CD без downtime.
Какие-то такие дополнения можно сделать в самом конце когда станет известно как делать: "Разработка аукциона на Slim и ReactJS" :)
Мощно!
Снимайте, пожалуйста, видео на чёрной теме IDE!!!
Приведите пример видео с YouTube с красивой тёмной темой.
https://www.youtube.com/watch?v=8RdJ3G-OZoc ))) Тёмная тема не выжигает глаза
Эта нечёткая (пыльная)
Тема: ayu, темная подтема: mirage
Это для Visual Studio. Есть форк для PhpStorm?
Visual Studio Code, если быть точным, но и это частность - тема не принадлежит одной какой-то сущности.
Для Sublime Text 3 - есть точно, для PhpStorm - не знаю, должна быть.
Тема мощная и крутая, очень досадно будет, если не портирована.
https://plugins.jetbrains.com/plugin/8006-material-theme-ui
https://plugins.jetbrains.com/plugin/12100-dark-purple-theme
https://plugins.jetbrains.com/plugin/12692-darcula-darker-theme (даркер не пыльная)
https://plugins.jetbrains.com/plugin/12163-monocai-color-theme
https://plugins.jetbrains.com/plugin/13106-xcode-dark-theme
Все отлично. Но, хотелось бы краем глаза глянуть как вы настраивали реестр для докера. Сама установка вроде бы элементарна.
docker run --entrypoint ./auth/htpasswd registry:2 -Bbn registry passwd > ./auth/htpasswd
docker-compose.yml
version: "3.7" services:
Но с сертификатами у меня получился жуткий костыль. Из коробки докер с letsencrypt не заработал, хотя в документации пишут, что должен. Или, может, дело в версии убунты? У меня 16.04
Просто можно как с gateway закрыть сертификатами и htpasswd снаружи в Nginx:
А в этом случае прокидываемый конфиг в контейнер как будет выглядеть? Самый базовый с ssl сниппетами и auth_basic_user_file /path/to/.htpasswd; в главном локейшене для nginx на домен registry.domain.com, к примеру, верно?
Да, примитивный с секцией server как приведённый в документации к registry, только переделанный для Let's Encrypt.
Спасибо!
Было бы не плохо, если бы в одном уроке настройку registry сервера показали на этой же виртуалке, чтобы охватить все технологии, которые используется, мне было бы очень полезно ))
Дмитрий, я правильно понимаю что ваш кейс с оркестрацией сервера подразумевает абсолютно голый сервер? Если на удаленной машине, на которой я хочу поднять образы из реестра, уже стоит nginx и слушает 80 и 443 порты, то в этом случае не получится проброска этих портов для gateway в docker-compose-production и, как следствие образы не поднимутся. Завелось вместе с ssl только тогда, когда я сделал проброс незанятого порта, к примеру 5001 на 443 ("5001":"443", в докер композ прод), но для этого приходится добавлять порт на продакшене в строке браузера, для того чтобы происходило перенаправление в обработку докера на 443 порт. Хотел узнать, может есть какой-то лайфхак, чтобы разрулить эту ситуацию на уровне конфигов nginx, хотя пробовал разные варианты. Просто не хочется добавлять все время порт в строке браузера
Да, на сервере можно поднять только один Nginx на одном порту. Поэтому если уже стоит внешний Nginx, то можно в него добавить хост с proxy_pass localhost:5001
Курс супер. Но зачем так заморачиваться с сертификатами, если можно использовать Treafik. Он все это умеет из коробки.
Александр, интересуют подробности других преимуществ Traefik vs nginx / haproxy etc. (кроме сертификатов) и опыт оптимальной установки/настройки?
Я только осваиваю. Но он много чего умеет. Про haroxy не слышал.
Насколько понимаю, чтобы разобраться как обойтись средствами уже задействованного nginx, чем вводить дополнительный слой либо отдавать предпочтение одному из многих специализированных прокси-серверов/балансировщиков, уже заточенных под микросервисы и k8s (traefik, haproxy, envoy, kong и пр.). Последние конечно удобны разными плюшками из коробки, но на них можно будет легко мигрировать при необходимости и от нужд в этих плюшках конкретного проекта.
UPD 1: В Cron-задаче очистки Docker нужно добавить флаг "a":
А в эту чистку используемые контейнеры попадают, ведь проект может быть и год без изменений? Или это очищает только элементы из которых собирается наш контейнер?
ничего_не_понял_но_очень_интересно.jpg
Буду переходить на vscale.io
На мой взгляд идея ущербности установки с мануалов перед установкой скриптом - надумана.
Мы же сейчас говорим про разработчиков, которые разворачивание окружения производят раз в несколько месяцев, а то и реже. Что скрипт отдельный писать, что мануалы использовать итог один - всё равно придётся актуализировать скрипт под нужды. К тому же сам алгоритм инсталяции может поменяться, например, добавятся зависимости или платформа поменяется. Например, докер переедет go на rust и потребуется отдельно доставлять раст. А по итогу, чтобы починить свой шел придётся лезть в мануалы.
Я не говорю, что представленный материал не нужен, но я бы «продавал» его с позиции управления сложностью: производим декомпозицию алгоритма разворачивания сервера и уход от низкоуровневых абстракций (общение с терминалом) к высокому уровню - ансибл.
Спасибо за материал =)
Да, всегда приходится лазить в мануалы и любая автоматизация является оверхедом когда виртуалок и программистов в проекте не больше одной/одного. Тогда можно заходить и ставить софт и править конфиги вручную без скриптов, выполнить что-нибудь в БД без миграций и на локальном компьютере ставить тоже вручную.
Но как только виртуалок становится две, так сразу при ручном подходе получаем вероятность рассинхронизации версий и конфигов, когда на одной что-то поменяли или обновили, а на второй забыли или ещё не успели.
Или когда мы пускаем на сервер другого сисадмина с фриланса, который не понятно что там по своим шпаргалкам ставит и настраивает. Сразу получаем проблемы с тем, что он мог что-то забыть на одной из них. И что он через неделю уйдёт, а нам не очень полную шпаргалку оставит. Или что-то сломает, а мы не узнаем что именно.
Так что как только виртуалок и программистов становится много, то автоматизация во всём очень помогает. И пусть все сисадмины тоже коммитят в tasks.yml.
Подскажите, доступа к root нет, использую в качестве remote_user пользователя,
remote_user: deploy become: yes become_user: deploy
Пишет ошибку: Failed to lock apt for exclusive operation
Подскажите, как настроить без root доступа?
Задачи с apt запускайте только от root (через become без become_user).
после успешного make site, в кроне хостинга (в /etc/cron.d/certbot) введётся команда "...certbot -q renew". Но как реально автоматом происходит certbot renew, если gateway (nginx) работает в докере, а сертификат продлен снаружи? как в этой ситуации, происходит автоматическое продление сертификата?
Как упомянули после деплоя, в cli.ini вместо хука
service nginx restart
нужно вписать перезапуск gateway вроде такого:Например, в
site/tasks
добавить задачу добавления строки:в чем разница между этими вариантами? Ведь, в первом варианте, когда в provisioning/roles/certbot/files/cli.ini записываем renew-hook = /bin/sh -c 'cd /home/deploy/site && docker-compose restart gateway' , то при make site этот cli.ini пападает в /etc/letsencrypt/cli.ini (VM Debian у хостинга).
у demo-auction.skucai.com деплоил (18-01-2020) проект, по первому варианту, и подожду 32 дней, посмотрю, продлится сертификат или нет.
А как проверит cron: правильно введена команда? Теперь, после успешного деплое, в VM Debian /etc/cron.d/certbot есть такая: 0 /12 * root test -x /usr/bin/certbot -a ! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew . А с crontab -e видно: 0 1 * docker system prune -af --filter "until=$((3024))h"
Разница в том, что роль certbot будет общая для всех production и staging серверов. Им может быть нужен разный хук и одинаковый cli.ini может всем не подойти. Поэтому можно всем скопировать общий cli.ini без хука, а потом уже в ролях site и staging добавить им по своей строке. Зависит от ситуации.
спасибо.
Я что-то совсем запутался. Registry требует установки перед ним вэбсервера или нет?
Из этого конфига я подумал, что Registry может сам работать без вэба, но
И видно, что он лезет по https в папку V2 :
На это можно не отвечать. Я уже разобрался. В итоге у меня собралась рабочая среда из: WSL 2, CentOS и docker repository в одном контейнере без вэба впереди. А можно ли в конфигах nginx применять пересенные, чтоб не перебивать названия сайтов "deworker.pro" на свои? В 19и местах пришлось менять руками, так и запутаться можно.
Два варианта. Либо запускать его со своими сертификатами
TLS_CERTIFICATE
и htpasswd без внешнего Nginx, либо реестр запускать без сертификатов, настроив их в дополнительном Nginx.Спасибо.
Мне понравился вариант, когда реро само за себя, если нужно на той же машине использовать вэб, то не нужно учитывать , что 80 и 443 уже используется.
Это тоже для новичков или курилка спецов по devops'у?
Вы не понимаете, что такое объяснение.
Объяснение, это не рассказ.
Здесь практика по разработке проекта.
Рассказывать что такое консоль, apt и cron здесь нет смысла.
Понял, спасибо.
https://i.imgur.com/GrKChZd.png
По команде
ansible-playbook -i hosts.yml site.yml
у меня на удаленной машине (Ubuntu 18.04) произошла ошибка на шаге Add Certbot repository. Видимо он не смог потом сделатьapt-get update
. Возможно попробовать другой repo: ?вот такой вариант прошел, кстати
Да, мы уже обсуждали под эпизодом про Xdebug.
Я не понял, для того чтобы заработали поддомены надо ли предпринимать дополнительно что то или достаточно тех настроек nginx которые в контейнерах указаны?
Ещё нужно прописать A-записи с IP-адресом сервера в настройках DNS этих доменов и поддоменов.
Но это уже производится в панели управления регистратора, а не в проекте.
На примере vscale, ip повторяет адрес основного домена? а порт нужно указать?
В панели управления регистратора или хостинга проставляем домену и поддомену одинаковую A-запись с одним IP-адресом нашей виртуалки. Или A-запись проставляем тоько домену, а с поддомена ссылаемся на домен через CNAME-запись.
ошибка в таске Add Cert Repository, что тут можно предпринять?
upd: увидел ответ выше
Дмитрий, привет После выпуска сертификата apache не останавливается (Debian 10) - в связи не получается сделать deploy так как nginx не запускается Иногда при запуске playbook для выпуска сертификата certbot дает ошибку, и после пользователь deploy не создается (в связи с чем не authorize не docker-login не работают). Если create-user раньше вытащить, ничего страшного? И еще: как сделать интерпритатор питона по умолчанию на 3 версию - в логах ловлю сообщения на прекращение поддержки старых версий
Это со свежим кодом из репозитория с конструкцией wait_for?
Ничего страшного. Можно ставить в любой последовательности. Для игнорирования ошибок можно добавить ignore_errors: true к задаче получения сертификатов.
Они постепенно переходят и описывают это так.
Столкнулся с проблемой. Если создать пароль nginx.htpasswd с параметром -B то nginx возвращает ошибку 500. Если этот параметр не применять, то всё хорошо. Образ был просто nginx.
Да, Nginx не поддерживает этот алгоритм.
UPD: Улучшили фрагмент с 26-й минуты про запуск Apache-сервера на использование конструкции wait_for.
Ошибка в make docker-login на шаге [Log into private registry]
fatal: [server]: FAILED! => {"changed": true, "cmd": "docker login -u ** -p *** registry.tiru.ru", "delta": "0:00:00.306697", "end": "2020-03-09 14:13:12.031002", "msg": "non-zero return code", "rc": 1, "start": "2020-03-09 14:13:11.724305", "stderr": "WARNING! Using --password via the CLI is insecure. Use --password-stdin.\nError response from daemon: Get registry.tiru.ru/v2/: dial tcp: lookup registry.tiru.ru on 188.93.16.19:53: no such host", "stderr_lines": ["WARNING! Using --password via the CLI is insecure. Use --password-stdin.", "Error response from daemon: Get registry.tiru.ru/v2/: dial tcp: lookup registry.tiru.ru on 188.93.16.19:53: no such host"], "stdout": "", "stdout_lines": []}
Поддомен не находит. Настройте его DNS-записи на хостинге или в панели регистратора.
Добрый день, а что именно написать в DNS , какой именно айпишник? Чтото гдето не найду момент по видео, какие записи вставлять. Да и в личном кабинете докерхаб про это не сказано.
В панели хостинга в настройках доменов создать A-запись с названием поддомена и вписать туда IP-адрес вашей виртуальной машины.
что не хватает ему не пойму, может надо в своем докер репозитории какие нить теги создать ? А то он пустой.
Добрый вечер!!! после Check if server is running все обрубается и вылетает ошибка
После повторного выполнения make site task path: /home/pamparam/PhpstormProjects/auction/provisioning/roles/site/tasks/generate_certificates.yml:15 skipping: [server] => {"changed": false, "skip_reason": "Conditional result was False"}
и здоровенная портянка
проверил по этим адресам есть /etc/letsencrypt/live/auction.pamdev.ru/cert.pem но к доменам и поддоменам они не привязаны и make push не проходит так как стучится по https
Так как файлы уже есть, то при последующих запусках всегда будет skipping
К доменам и поддоменам они теперь должны привязываться в Nginx.
да но в директории /etc/nginx/snippets/ файлов ssl.conf certbot.conf нет и nginx дальше не дает выполнить команды
А почему их там нет?
пока сам не понимаю.. выполняю команду make site
ожидаю что должны появится но их нет
вообще нет nginx
Ansible толлько устанавливает Docker с Certbot и генерирует сертификаты.
А сам проект с Nginx и PHP деплоится через
make deploy
послеmake build
иmake push
.Если в первый раз вылетела ошибка, то добавьте к командам запуска и остановки apache значения
ignore_errors: yes
и перезапустите снова.Вобщем запнулся на этом уроке. Вторые выходные сижу на нем. выше писал про Error response from daemon: Get registry.tiru.ru/v2/: dial tcp: lookup registry.tiru.ru on 188.93.16.19:53: no such host"]
Создал поддомен registry.tiru.ru какие NS записи создавать, надоли сервак под этот домен, и если надо как его настроить. Откуда на вашем регистре поддомене nginx. Ни какой инфы в видосах не нашел, как смотреть дальнейшие видео нипонятно, тк на практике не выходит ничего. Спулил с гита ветку последней версии и откатывал на версию этого урока. Менял домен deworker.pro автозаменой на свой , не выходит. Дмитрий объясните по подробнее про домен registry.tiru.ru , тк хочется проверить вашу теорию на практике , своими ручками. А не просто поверить этой "теории"
Сам поддомен нужно создать в панели управления вашего хостинга, где вы регистрировали домен.
Там должно быть примерно так, но с вашими адресами:
Так поддомены создаются и привязываются к виртуальным машинам по их IP-адресам. И только после этого начинают открываться в браузере.
так и есть у меня сейчас
только ошибка не с айпишником 188.93.16.19 как раньше, а с моим 31.184.254.199
сертификат тоже чтоли нужен на этот домен сделать, походу.
Да, сделать сертификат и для него.
сделал не помогло , ...login attempt to registry.tiru.ru/v2/ failed with status: 404 Not Found".... ни какой формы авторизации нету по этому адресу как у Вас. Чтото я вобще не догоняю.
registry.tiru.ru", "delta": "0:00:00.529081", "end": "2020-03-16 18:12:43.121638", "msg": "non-zero return code", "rc": 1, "start": "2020-03-16 18:12:42.592557", "stderr": "WARNING! Using --password via the CLI is insecure. Use --password-stdin.\nError response from daemon: login attempt to registry.tiru.ru/v2/ failed with status: 404 Not Found", "stderr_lines": ["WARNING! Using --password via the CLI is insecure. Use --password-stdin.", "Error response from daemon: login attempt to registry.tiru.ru/v2/ failed with status: 404 Not Found"], "stdout": "", "stdout_lines": []}
Виртуалку и поддомен для реестра вы сделали.
Теперь осталось установить туда сам реестр по примерам из комментариев выше.
после make deploy demo-auction.arsku.com/работает, а api.demo-auction.arsku.com кидает ошибку: 502 Bad Gateway.
команда docker logs --since 30s -f auction_api_1 даёт ответ:
как решить эту проблему?
правда, после ansible make site остался контейнер httpd:2.4 apache, я его остановил...
вид http://www.arvidija.lt/turinys.php?autoidpsl=16&puslapio_PVD=programming
Не запустился api-php-fpm.
Да, передеплоил с другого компьютера и всё ок.
Дмитрий, приветствую. А не могли бы вы объяснить, за что отвечает переменная REGISTRY при команде make docker-login Видел в комментариях, что люди тоже столкнулись с проблемой на этой команде, но точного ответа и понимания так и не последовало после ваших советов/ответов.
Я правильно понимаю, что вы не используете докер хаб, а создали свой регистр для хранения образов? Или я ошибаюсь?
Если это так, то не ясно, как создавать свой регистр из данных видео. На хабре есть конечно статьи, но хотелось бы тут узнать все нюансы которые вы затрагиваете.
По крайней мере у меня есть аккаунт на DockerHub и я успешно сделал туда пуш в виде docker push myaccount/php:1 (например), но если я пытаюсь использовать команду "docker login -u {{ username }} -p {{ password }} {{ registry }}", как в видео, меня шлют лесом и говорят что нет такого регистра. Вот хотелось бы понять, почему у вас работает и что это за registry.deworker.pro
Заранее спасибо за ответ
UPD - нашел в комментах инфу что требуется поднять свой регистр. Как то не приятно, что требуется копаться в комментах, в поисках информации которая не дается в курсе. Это прям минус.
Если кто столкнулся с таким моментов, что у него нет собственного докер регистра, можно поступить так:
Регистрируетесь на докер хаб
Меняете docker_login.yml на такое
При использование команды make build и make push используется для переменной REGISRTY ваш айдишник на докер хабе.
Пулится пушится логинится успешно.
Минус всего этого - ваши образы на докер хабе публичные
Да, именно так. И в параметре REGISTRY мы его адрес указываем.
Про это запишу скоро отдельное видео.
Спустя 10 дней получился настроить wsl 2->Ubuntu-18.04 = Ansible +Docker Registry и wsl 2->Debian это у нас production-сервера и wsl 2->Ubuntu-20 = dev
В шторме, Не могу понять по комитам на гите, какой соответствует окончанию этого урока? Даты коммитов перемешаны му собой не разберешь. Хорошо бы подписывали , на какой комит переключаться под конец урока, чтоб ручками все проверить самому ))
К этому уроку вся группа коммитов про provisioning до "Added site certbot renew hook".
При попытке запушить билды на AWS мне выпадает сообщение "no basic auth credentials". До этого успешно создал реестр и команда make docker-login успешно сработала. Что теперь делать?
P.S. Разобрался уже. Я просто вводил одну команду, а в makefile она уже другая.
И все равно. Я застрял на этом уроке. Не понимаю, почему у меня не работает. Делаю пошагово за автором. Дохожу до создания своего отдельного приватного репозитория. Перехожу на урок 33, создаю репозиторий. Логинюсь в него. Пушу туда образы. Все проходит нормально. Ввожу команду деплоя и вижу следующее:
Я худо-бедно умею программировать, но таким разворачиванием еще не занимался, я в этом новичок. Помогите разобраться пожалуйста.
Теперь залогиньтесь с сервера для пулла:
Да, получилось. Но тут же пошла другая ошибка:
Сервера реестра и основного проекта находятся на разных виртуалках под разными IP-адресами. Попробую сделать что-то с этим, но спасибо за ответ, который меня продвинул дальше.
Подскажите, у вас получилось разобраться в чем тут проблема? Завис на этом же месте.
Подскажите выполняю команды:
если выполнить команду под root то все проходит что не так.
и после выполнения
не удаляет apahe приходится удалять ручками, что нужно настроить для автоматического удаления
Значит либо пользователь deploy, либо файлу docker-compose не проставлена группа docker.
Надо проверить.
да, что то сегодня всё рухнуло, пользователь deploy не может запустить docker-compose
хотя root норм запускает
система ubuntu
если не удасться это полечить, то придется под рутом всё делать ((
я вручную сделал: добавил deploy в группу sudo, задал ему пароль, зашел по ssh с паролем и вызвал sudo chmod a+rx /usr/local/bin/docker-compose
в результате docker-compose у пользователя deploy заработал
Дима, как через ansible сделать тоже самое для пользователя deploy?
P.S. вроде в ansible достаточно добавить a+rx в mode: 'u+x,g+x,a+rx' при установке docker-compose
а чтобы это сработало, надо переустановить docker-compose предварительно, например, удалив его зайти под root rm /usr/local/bin/docker-compose
либо создавать отдельный ансибл таск на изменение прав доступа к /usr/local/bin/docker-compose
Отдельный не нужен. Группа должна быть указана в существующем:
[20633] Cannot open self /usr/local/bin/docker-compose or archive /usr/local/bin/docker-compose.pkg
тоже возникла такая ошибка
если захожу под рутом, то всё хорошо
Всем привет, я только подключился
может кто знает как это бороть?
поделитесь своей темой, очень красивая, не видел раньше таких. сами делали?
Да, cделал сам специально для скринкастов. Выложил на GitHub.
а почему при установке докера и сертификатов в конфигурации ансибла у тебя в начале обновляются пакеты, а в коммитах на гитхабе этого нету
Лишний раз такие конструкции можно не прописывать если такие
update_cache: yes
есть у других шагов.Добрый вечер. Дмитрий, подскажите пожалуйста. Получится использовать Ваш пример для частного репозитория на docker hub? Будет ли частный репозиторий доступен кому-то кроме меня? Как я понял, необходимо установить на локальный компьютер ansible и certbot?
Для приватного доступа к DockerHub достаточно выполнить тот же
docker login
, но не в свой реестр, а вregistry-1.docker.io
Я как раз имел ввиду свой реестр. Если я его обозначил как "private", то кроме меня его никто не увидит?
Никто без пароля к нему не подключится.
Благодарю.)
Добрый день. Продолжаю наскоками смотреть и пробовать у себя. После ряда ошибок с почтой и получением сертификатов при деплое на сервер вроде и прошел на пару шагов вперед, но все ещё появляются ошибки видимо связанные с почтой и получением сертификата. Текст такой:
Не подскажите что это может быть и как с ним бороться?
Судя по сообщению:
у вас по какой-то причине не установился certbot.
Поясните, пжл, ведь письмо с сертификатом должно быть на почте? Почту получаю, а сертификат не вижу. (раньше никогда с сертификатами дела не имел). И в чем ещё может быть причина?
я ранее имел дело с certbot и letsencrypt - сертификат на почту не приходит, но https норм работал как надо. видимо, так и должно быть
На сервере Ubuntu 20.04 сертификат не ставится. Почему - не знаю, переустановил сервер на Вebian 10, как у Дмитрия. Однако возникли проблемы с Add GPG key для докера.
Если у вас сервер Debian 10, замените блок ниже
на:
Это не ошибка, сервер у меня Debian 10, а в url "ubuntu"
Если у вас Ubuntu 20.04 - Add GPG key работает.
Почему так - непонятно.
Решение нашел здесь. https://github.com/dwdraju/ansible-install-docker/blob/master/tasks/ubuntu.yml
А в каком именно месте у вас выдавало ошибку сертификата и что писало? Я попробовал ваш метод с подменой ссылки и к сожалению ничего не получилось, та же ошибка, что и была
Насколько я помню, была ошибка при выполнении самого первого таска из роли об установке сертификата.
Какой у вас vps-server? Debian 10?
Много где еще ошибки могут быть. Например, если вы скачаете коммит, о котором говорил Дмитрий в комментариях под уроком - там в файле hosts.yml не прописан пароль юзера. Я понимаю конечно, что возможно до этого Дмитрий сделал соединение ssh по ключу. Но это просто в качестве примера, а есть еще другие моменты, из-за которых у вас ошибки.
Я специально для этих уроков взял Debian 10 чистый, 512 мб оперативки, как у Дмитрия. В ruvds стоит 130р. в месяц, норм.
Да, взял как в уроке. Кстати, сразу не обратил внимание, но таск с присоединением ключа вроде проходит и без замены TASK [docker : Add GPG key] ok: [server] Если в нем поменять на левый адрес, то сразу вылетает ошибка. Значит у меня на этом этапе все нормлаьно. Запинается на таске генерации нового сертификата. При этом таск с проверкой существования сертификата вроде тоже нормально проходит: TASK [site : Check if certificate already exists] ok: [server] => (item=demo.my.company) ok: [server] => (item=api.demo.my.company)
И по ssh-key тоже вроде заходит: TASK [docker : Verify fingerprint] ok: [server]
Дядя Женя, Вы пишете "Запинается на таске генерации нового сертификата", то есть на таске "name: Generate new certificate". То есть на этом таске:
А вы сменили емаил на свой?
В смысле на свой? На тот емаил, который настроен на моем сервере? Да и я его привел в отчете, который привел как пример. Сервер demo.my.company, а почта user@my.company. Она же указана в certbot.yml и site/defaults/main.yml. Конечно почта и сервер выдуманные, но смысл, думаю понятен. Или нужно было где-то ещё поменять? Или даже на другую почту?
Не знаю, я указал реальный емаил. Возможно, как-то проверяется существование реального емаила перед генерацией сертификата?
Ну так у меня реальный. Я почту на сервере поднял, принимаю с неё письма, отправляю с неё на свою обычную гмайловскую почту и ещё на пару почтовиков. Только в примере, что выложил тут выше в отчете, заменил на выдуманную. Зачем реальную светить? ))) Чтоб спамеры спамили? ))))) Только вот в папке с почтой у обоих юзеров (пока настроил почту для двух юзеров) пусто, в смысле сертификата нет. А по идее должен прийти
Рецепт успешного прохождения этого урока. Через публичный репозиторий на docker hub.
roles/docker/tasks/main.yml - name: Add GPG key - полностью заменить таск на:
Это не ошибка, сервер Debian 10, а в url "ubuntu". Если у вас Ubuntu 20.04 - Add GPG key работает. Почему так - непонятно. Решение нашел здесь. https://github.com/dwdraju/ansible-install-docker/blob/master/tasks/ubuntu.yml. НО я использовал не все как в ссылке, а частично, как написал выше.
Не могу уже отредактировать, напишу сюда, чуть подформатирую свой пункт "Установка нужных прав".
Установка нужных прав на проект.
не могу отредактировать свое большое сообщение, пишу здесь. немного отформатирую эти пункты:
hosts.yml ip прописать от вашего vps
ansible_ssh_pass добавить в hosts.yml и прописать пароль к root от вашего vps
у Дмитрия вообще нет этого параметра в файле hosts.yml! Я так понимаю, он заранее закинул ssh-публичный ключ на сервер, а приватный ключ прописал в конфигах ansible глобально? Дмитрий, если читаете этот пункт, просьба прояснить этот момент).
Жаль, что ваш ответ не был оформлен как ответ мне. Я на почте его не увидел, а само видео пока не просматривал заново и коменты не листал. Случайно сюда зашел. Чуток попозже попробую все что вы сказали (нужно внимательно вчитываться). В любом случае - спасибо. Но до этого я уже успел сделать первых 5 пунктов. Вроде все так и есть, только сервер на vscale.io как Дмитрия. И 512 оперативки. Но при этом на память не ругается. Остальное буду смотреть
Последние 2 пункта списка это 1 пункт! (встроенный редактор так отформатировал). make deploy последним. это все в 1 строчку. надо так:
HOST=deploy@ip_от_вашего_vps PORT=22 REGISTRY=ваш_логин_в_докер_хаб IMAGE_TAG=master-1 BUILD_NUMBER=1 make deploy
После вставок в roles/docker/tasks/main.yml, roles/docker/tasks/main.yml, hosts.yml (тут ansible_ssh_pass) у меня запнулся уже на первом шаге с ошибкой: fatal: [server]: FAILED! => {"msg": "to use the 'ssh' connection type with passwords, you must install the sshpass program"} с указанием на файл provisioning/site.yml
Все остальное у меня было настроено так же. Хотя ещё оставался вопрос о правах на запись. Не совсем понял где их прописывать. Я то из под винды работаю. Но по логике разрешение нужно прописывать для юзера на сервере, куда заливаю сайт. Тогда стоит вопрос, куда из файлов каталога provisioning вписать эти разрешения.
Какая у вас хостовая машина? Если ubuntu то видимо надо: apt-get install sshpass.
Хостовая, тоесть домашняя? Винда + wsl2+ubuntu. Установил sshpass и заливка запнулась на том же шаге, что и раньше, на TASK [site : Generate new certificate] Если предположить, что ошибка в этой строке отчета: provisioning/roles/site/tasks/generate_certificates.yml:19, то опять приходим к тому, что что-то не так с почтой, потому что в этой секции написано: - name: Generate new certificate
site/defaults/main.yml
тут все верно?
Да, почта работающая. Даже свою личную почту прописывал. Ни в спаме нигде нет.
А - записи верные для certbot_hosts?
Лучше задам глупые вопросы. certbot_hosts это где, в каком файле или это я файл пропустил? А - записи прописываются ж у хостера, где сервер? Там все нормально, иначе не мог бы зайти, пропинговать, не получал бы почту. Ну или я не знаю как проверить.
certbot_hosts - это переменная ansible в файле provisioning/roles/site/defaults/main.yml
А - записи прописываются ж у хостера, где сервер? - нет. А-записи прописываются у регистратора домена (хостер иногда сам может быть регистратором, а может и не быть). Комментарий Дмитрия на этой странице об А-записях: 2020-03-14 15:05. Ну да, если домены пинговались, значит все верно сделано было. Хотя, надо внимательнее посмотреть при пинге, там ай пи совпадает с ай пи вашего сервера или нет? Про почту не скажу ничего, никогда не настраивал
certbot_hosts Ну так про неё уже шла речь. Там все верно. Вы ж из этого файла цитату приводили. А - записи прописываются сперва у регистратора, затем у хостера, чтоб привязать конкретные сервер к конкретному имени. И как я уже говорил, если бы было что-то не так, то нельзя было бы пинговать, нельзя было бы на него зайти по имени. А так я даже в браузере прописываю айпи и захожу на сервер. И айпи соответствует.
Есть ли возможность запуска команды make site со страницы сайта?
что значит со страницы сайта? на сервере имеется в виду?
Да хоть на сервере, хоть у себя в продакшене или девелопменте, с последующим переносом на сервер. Но в первую очередь у себя на компе, где продакшен и девелопмент.
На сервере не имеет смысла! make site оно же запускает ansible (а ansible предназначен для управления с хостовой машины вашими серверами).
Хостовая машина == ваш домашний комп в этом контексте
Кстати, нашел сегодня для понимания смысла по аналогии. В друпале есть такая штука - мультисайт. Фактически тоже, что и Дмитрий демонстрирует. Но в дурпале раньше не было автоматизации этого процесса. Все руками приходилось прописывать. Но вот несколько лет назад оказывается они сами сделали под себя приложение для управления сайтами на основе ansible+php https://drupaldelphia.org/session/aegir-ansible-cloud-apis-how-we-use-drupal-automate-our-entire-platform-service Получилась вэбморда для управления хоть у себя на хосте для разработки, продашкена и провизионинга, хоть для удаленного разворачивания аналогичной системы на сервере.
Да хоть на сервере, хоть у себя в продакшене или девелопменте, с последующим переносом на сервер. Но в первую очередь у себя на компе, где продакшен и девелопмент.
Слегка уточню свой интерес про запуск команд make site со страницы сайта. Есть два варианта:
Допустим хочу создать вэбинтерфейс для управления докер и всем этим удовольствием. Лень мне залазить в PHPStorm, руками править нужные файлы. Ведь по сути все сводится к добавлению адресов в нужное место пары файлов и потом запуск их с помощью Makefile. Если не нужно править код на странице сайта, добавлять какой-то функционал, исправлять баги, а только задеплоить на какой-то сервер(ы).
Допустим хочу на сервере, где крутиться сайт иметь возможность копировать его (или какую-то часть) на другие сервера. Ведь ансибл для этого и создан, чтоб разворачивать приложения на разных серверах.
На данный момент я понимаю, что в простейшем случае нужен код что-то типа такого (api/public/index.php):
Так я могу запустить какую-то команду и отобразить её вывод на странице сайта. Но если прописать:
То выведет 127int(127)
Я так понимаю, что это из-за того, что находимся в "другом образе", не на самом хосте, где разрабатываем сайт, а в контейнере. Пробовал в каталоге provisioning в файле Makefile Добавлять команду типа:
Она работает. Но замена на
Тоже ничего не дала 127int(127).
Благодаря ошибке стал понимать, что в моем случае скорее всего нужно доустановить ансибл в один из контейнеров, чтоб получился приблизительный путь
/app/public/index
.То есть по идее в docker-compose нужно добавить секцию что-то типа такого:
а в Dockerfile что-то типа этого:
и потом вызывать командой:
Но пока не получилось
По крайней мере установка ансибл с помощью команды: docker-compose run --rm api-php-cli apk add ansible
Хоть и установила ансибл, но ничего не дала в плане выполнения команд от его имени Так же и с добавлением RUN apk add ansible в api/docker/development/php-cli/Dockerfile
Или войти через: