Создание production-сервера c Ansible

Автоматизация серверной инфраструктуры. Автоматическая установка Docker и Compose на виртуальную машину через Ansible. Подключение сертификатов Let's Encrypt.

Комментарии (89)
Arunas
2019-12-26 19:09

спасибо, очень поможет, очень хорошый урок.

Ответить
Руслан
2019-12-27 08:11

Отличный эпизод, как всегда. Огромная просьба рассмотреть возможность добавить в материалы настройку Github Actions для CI/CD.

PS: интересует также, имеются ли в Ваших курсах материалы по опыту правильной организации multi-tenant архитектуры на любом из фреймовоков? Либо в планах на будущее)

Спасибо еще раз за супер курс!

Ответить
Ruslan
2019-12-27 16:33

Тёзка, там заявлен Дженкинс. Видел на Ютубе CI/CD для Битбакета и для ГитЛаба тоже наверняка найдется.

Ответить
Руслан
2019-12-27 19:28

Руслан, спасибо, конечно, видел то что Jenkins заявлен. Просто Github Actions видется более перспективней в плане популярности в ближайшие время, хотелось на него перескочить в плане self-hosted CI/CD, не ставить на сервак java (Jenkins) или ruby (Gitlab CI).

Ответить
Ruslan
2019-12-28 09:50

А что с приватными репами, только за деньги, как и на самом Github ?

А вообщем, я о том, что нужно придерживаться плана. Я тоже могу написать, что сейчас большой downtime и давайте поднимем кластер для CI/CD без downtime.

Какие-то такие дополнения можно сделать в самом конце когда станет известно как делать: "Разработка аукциона на Slim и ReactJS" :)

Ответить
Paul
2019-12-28 22:39

Мощно!

Ответить
Алекс Про
2019-12-29 17:17

Снимайте, пожалуйста, видео на чёрной теме IDE!!!

Ответить
Deworker Pro
2019-12-29 18:34

Приведите пример видео с YouTube с красивой тёмной темой.

Ответить
Deworker Pro
2019-12-29 18:51

Эта нечёткая (пыльная)

Ответить
Иван
2020-01-23 19:49

Тема: ayu, темная подтема: mirage

Ответить
Deworker Pro
2020-01-23 20:18

Это для Visual Studio. Есть форк для PhpStorm?

Ответить
Иван
2020-01-23 23:40

Visual Studio Code, если быть точным, но и это частность - тема не принадлежит одной какой-то сущности.

Для Sublime Text 3 - есть точно, для PhpStorm - не знаю, должна быть.

Тема мощная и крутая, очень досадно будет, если не портирована.

Ответить
Алексей
2019-12-29 20:36

Все отлично. Но, хотелось бы краем глаза глянуть как вы настраивали реестр для докера. Сама установка вроде бы элементарна.

docker run --entrypoint ./auth/htpasswd registry:2 -Bbn registry passwd > ./auth/htpasswd

docker-compose.yml

version: "3.7" services:

registry:
    restart: always
    image: registry:2
    ports:
        - 5000:5000
    environment:
        REGISTRY_HTTP_TLS_CERTIFICATE: /certs/example.com.crt
        REGISTRY_HTTP_TLS_KEY: /certs/example.com.key
        REGISTRY_AUTH: htpasswd
        REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
        REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
    volumes:
        - ./registry:/var/lib/registry
        - ./auth:/auth
        - /etc/letsencrypt/live/example.com:/certs

Но с сертификатами у меня получился жуткий костыль. Из коробки докер с letsencrypt не заработал, хотя в документации пишут, что должен. Или, может, дело в версии убунты? У меня 16.04

Ответить
Deworker Pro
2019-12-30 05:47

Просто можно как с gateway закрыть сертификатами и htpasswd снаружи в Nginx:

version: '3'
services:
    nginx:
        image: nginx:alpine
        restart: always
        ports:
            - "80:80"
            - "443:443"
        volumes:
            - /etc/letsencrypt:/etc/letsencrypt
            - /var/www/html:/var/www/html
            - ./docker/nginx/conf.d:/etc/nginx/conf.d
            - ./htpasswd:/etc/nginx/auth/htpasswd
        depends_on:
            - registry
    registry:
        image: registry:2
        restart: always
        volumes:
            - registry:/var/lib/registry
volumes:
    registry:
Ответить
Роман
2020-01-12 16:44
  • ./docker/nginx/conf.d:/etc/nginx/conf.d

А в этом случае прокидываемый конфиг в контейнер как будет выглядеть? Самый базовый с ssl сниппетами и auth_basic_user_file /path/to/.htpasswd; в главном локейшене для nginx на домен registry.domain.com, к примеру, верно?

Ответить
Deworker Pro
2020-01-13 09:57

Да, примитивный с секцией server как приведённый в документации к registry, только переделанный для Let's Encrypt.

Ответить
Роман
2020-01-13 10:03

Спасибо!

Ответить
BMWist
2020-01-13 14:39

Было бы не плохо, если бы в одном уроке настройку registry сервера показали на этой же виртуалке, чтобы охватить все технологии, которые используется, мне было бы очень полезно ))

Ответить
Роман
2020-02-09 02:19

Дмитрий, я правильно понимаю что ваш кейс с оркестрацией сервера подразумевает абсолютно голый сервер? Если на удаленной машине, на которой я хочу поднять образы из реестра, уже стоит nginx и слушает 80 и 443 порты, то в этом случае не получится проброска этих портов для gateway в docker-compose-production и, как следствие образы не поднимутся. Завелось вместе с ssl только тогда, когда я сделал проброс незанятого порта, к примеру 5001 на 443 ("5001":"443", в докер композ прод), но для этого приходится добавлять порт на продакшене в строке браузера, для того чтобы происходило перенаправление в обработку докера на 443 порт. Хотел узнать, может есть какой-то лайфхак, чтобы разрулить эту ситуацию на уровне конфигов nginx, хотя пробовал разные варианты. Просто не хочется добавлять все время порт в строке браузера

Ответить
Deworker Pro
2020-02-09 12:40

Да, на сервере можно поднять только один Nginx на одном порту. Поэтому если уже стоит внешний Nginx, то можно в него добавить хост с proxy_pass localhost:5001

Ответить
Александр
2019-12-31 12:01

Курс супер. Но зачем так заморачиваться с сертификатами, если можно использовать Treafik. Он все это умеет из коробки.

Ответить
Руслан
2020-01-01 23:29

Александр, интересуют подробности других преимуществ Traefik vs nginx / haproxy etc. (кроме сертификатов) и опыт оптимальной установки/настройки?

Ответить
Александр
2020-01-02 18:26

Я только осваиваю. Но он много чего умеет. Про haroxy не слышал.

Ответить
Руслан
2020-01-02 20:21

Насколько понимаю, чтобы разобраться как обойтись средствами уже задействованного nginx, чем вводить дополнительный слой либо отдавать предпочтение одному из многих специализированных прокси-серверов/балансировщиков, уже заточенных под микросервисы и k8s (traefik, haproxy, envoy, kong и пр.). Последние конечно удобны разными плюшками из коробки, но на них можно будет легко мигрировать при необходимости и от нужд в этих плюшках конкретного проекта.

Ответить
Deworker Pro
2020-01-04 16:49

UPD 1: В Cron-задаче очистки Docker нужно добавить флаг "a":

docker system prune -af --filter "until=$((30*24))h"
Ответить
Ruslan
2020-01-06 13:54

А в эту чистку используемые контейнеры попадают, ведь проект может быть и год без изменений? Или это очищает только элементы из которых собирается наш контейнер?

Ответить
Deworker Pro
2020-01-06 17:27
$ 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
2020-01-06 16:22

ничего_не_понял_но_очень_интересно.jpg

Ответить
BMWist
2020-01-11 01:42

Буду переходить на vscale.io

Ответить
Сарибжанов Ильдар
2020-01-15 03:52

На мой взгляд идея ущербности установки с мануалов перед установкой скриптом - надумана.

Мы же сейчас говорим про разработчиков, которые разворачивание окружения производят раз в несколько месяцев, а то и реже. Что скрипт отдельный писать, что мануалы использовать итог один - всё равно придётся актуализировать скрипт под нужды. К тому же сам алгоритм инсталяции может поменяться, например, добавятся зависимости или платформа поменяется. Например, докер переедет go на rust и потребуется отдельно доставлять раст. А по итогу, чтобы починить свой шел придётся лезть в мануалы.

Я не говорю, что представленный материал не нужен, но я бы «продавал» его с позиции управления сложностью: производим декомпозицию алгоритма разворачивания сервера и уход от низкоуровневых абстракций (общение с терминалом) к высокому уровню - ансибл.

Спасибо за материал =)

Ответить
Deworker Pro
2020-01-15 09:49

Да, всегда приходится лазить в мануалы и любая автоматизация является оверхедом когда виртуалок и программистов в проекте не больше одной/одного. Тогда можно заходить и ставить софт и править конфиги вручную без скриптов, выполнить что-нибудь в БД без миграций и на локальном компьютере ставить тоже вручную.

Но как только виртуалок становится две, так сразу при ручном подходе получаем вероятность рассинхронизации версий и конфигов, когда на одной что-то поменяли или обновили, а на второй забыли или ещё не успели.

Или когда мы пускаем на сервер другого сисадмина с фриланса, который не понятно что там по своим шпаргалкам ставит и настраивает. Сразу получаем проблемы с тем, что он мог что-то забыть на одной из них. И что он через неделю уйдёт, а нам не очень полную шпаргалку оставит. Или что-то сломает, а мы не узнаем что именно.

Так что как только виртуалок и программистов становится много, то автоматизация во всём очень помогает. И пусть все сисадмины тоже коммитят в tasks.yml.

Ответить
Руслан
2020-01-16 08:31

Подскажите, доступа к root нет, использую в качестве remote_user пользователя,

remote_user: deploy become: yes become_user: deploy

Пишет ошибку: Failed to lock apt for exclusive operation

Подскажите, как настроить без root доступа?

Ответить
Deworker Pro
2020-01-17 15:02

Задачи с apt запускайте только от root (через become без become_user).

Ответить
Arunas
2020-01-16 19:44

после успешного make site, в кроне хостинга (в /etc/cron.d/certbot) введётся команда "...certbot -q renew". Но как реально автоматом происходит certbot renew, если gateway (nginx) работает в докере, а сертификат продлен снаружи? как в этой ситуации, происходит автоматическое продление сертификата?

Ответить
Deworker Pro
2020-01-17 15:17

Как упомянули после деплоя, в cli.ini вместо хука service nginx restart нужно вписать перезапуск gateway вроде такого:

post-hook = /bin/sh -c 'cd /home/deploy/site && docker-compose restart gateway'
Ответить
Deworker Pro
2020-01-22 16:29

Например, в site/tasks добавить задачу добавления строки:

-   name: Add Certbot hook
    lineinfile:
        path: /etc/letsencrypt/cli.ini
        line: "post-hook = /bin/sh -c 'cd /home/deploy/site && docker-compose restart gateway'"
Ответить
Arunas
2020-01-22 17:12

в чем разница между этими вариантами? Ведь, в первом варианте, когда в 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
2020-01-22 17:26

у demo-auction.skucai.com деплоил (18-01-2020) проект, по первому варианту, и подожду 32 дней, посмотрю, продлится сертификат или нет.

Ответить
Arunas
2020-01-22 17:31

А как проверит 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"

Ответить
Deworker Pro
2020-01-22 17:37

Разница в том, что роль certbot будет общая для всех production и staging серверов. Им может быть нужен разный хук и одинаковый cli.ini может всем не подойти. Поэтому можно всем скопировать общий cli.ini без хука, а потом уже в ролях site и staging добавить им по своей строке. Зависит от ситуации.

Ответить
Arunas
2020-01-22 17:43

спасибо.

Ответить
Ruslan
2020-01-18 17:17

Я что-то совсем запутался. Registry требует установки перед ним вэбсервера или нет?

version: '3'

services:
  registry:
    image: registry:2
    restart: always
    ports:
      - "5000:5000"
    environment:
      REGISTRY_HTTP_TLS_CERTIFICATE: /certs/live/{{ registry_host }}/cert.pem
      REGISTRY_HTTP_TLS_KEY: /certs/live/{{ registry_host }}/privkey.pem
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/password
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - ./auth:/auth
      - ./data:/data
      - /etc/letsencrypt/:/certs:ro

Из этого конфига я подумал, что Registry может сам работать без вэба, но

docker push registry.mydomain.com/auction-gateway:master-1

И видно, что он лезет по https в папку V2 :

Get https://registry.mydomain.com/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Ответить
Ruslan
2020-01-18 22:56

На это можно не отвечать. Я уже разобрался. В итоге у меня собралась рабочая среда из: WSL 2, CentOS и docker repository в одном контейнере без вэба впереди. А можно ли в конфигах nginx применять пересенные, чтоб не перебивать названия сайтов "deworker.pro" на свои? В 19и местах пришлось менять руками, так и запутаться можно.

Ответить
Deworker Pro
2020-01-19 05:59

Два варианта. Либо запускать его со своими сертификатами TLS_CERTIFICATE и htpasswd без внешнего Nginx, либо реестр запускать без сертификатов, настроив их в дополнительном Nginx.

Ответить
Ruslan
2020-01-19 09:20

Спасибо.

Мне понравился вариант, когда реро само за себя, если нужно на той же машине использовать вэб, то не нужно учитывать , что 80 и 443 уже используется.

Ответить
Иван
2020-01-23 19:52

Это тоже для новичков или курилка спецов по devops'у?
Вы не понимаете, что такое объяснение.
Объяснение, это не рассказ.

Ответить
Deworker Pro
2020-01-24 08:52

Здесь практика по разработке проекта.
Рассказывать что такое консоль, apt и cron здесь нет смысла.

Ответить
Иван
2020-01-24 13:50

Понял, спасибо.

Ответить
Роман
2020-02-05 15:48

https://i.imgur.com/GrKChZd.png

По команде ansible-playbook -i hosts.yml site.yml у меня на удаленной машине (Ubuntu 18.04) произошла ошибка на шаге Add Certbot repository. Видимо он не смог потом сделать apt-get update. Возможно попробовать другой repo: ?

Ответить
Роман
2020-02-05 16:14
-   name: Add Certbot repository
    apt_repository:
        repo: 'ppa:certbot/certbot'
        state: present
        update_cache: yes

-   name: Install Certbot
    apt:
        name: certbot
        state: present
        update_cache: yes

вот такой вариант прошел, кстати

Ответить
Deworker Pro
2020-02-05 16:16

Да, мы уже обсуждали под эпизодом про Xdebug.

Ответить
Дмитрий
2020-02-25 04:14

Я не понял, для того чтобы заработали поддомены надо ли предпринимать дополнительно что то или достаточно тех настроек nginx которые в контейнерах указаны?

Ответить
Deworker Pro
2020-02-25 09:12

Ещё нужно прописать A-записи с IP-адресом сервера в настройках DNS этих доменов и поддоменов.

Но это уже производится в панели управления регистратора, а не в проекте.

Ответить
Дмитрий
2020-02-25 09:21

На примере vscale, ip повторяет адрес основного домена? а порт нужно указать?

Ответить
Deworker Pro
2020-02-25 16:20

В панели управления регистратора или хостинга проставляем домену и поддомену одинаковую A-запись с одним IP-адресом нашей виртуалки. Или A-запись проставляем тоько домену, а с поддомена ссылаемся на домен через CNAME-запись.

Ответить
Дмитрий
2020-02-25 17:05

ошибка в таске Add Cert Repository, что тут можно предпринять?

upd: увидел ответ выше

Ответить
Тимур
2020-02-29 01:35

Дмитрий, привет После выпуска сертификата apache не останавливается (Debian 10) - в связи не получается сделать deploy так как nginx не запускается Иногда при запуске playbook для выпуска сертификата certbot дает ошибку, и после пользователь deploy не создается (в связи с чем не authorize не docker-login не работают). Если create-user раньше вытащить, ничего страшного? И еще: как сделать интерпритатор питона по умолчанию на 3 версию - в логах ловлю сообщения на прекращение поддержки старых версий

Ответить
Deworker Pro
2020-03-01 13:08

После выпуска сертификата apache не останавливается

Это со свежим кодом из репозитория с конструкцией wait_for?

Если create-user раньше вытащить, ничего страшного?

Ничего страшного. Можно ставить в любой последовательности. Для игнорирования ошибок можно добавить ignore_errors: true к задаче получения сертификатов.

как сделать интерпритатор питона по умолчанию на 3 версию

Они постепенно переходят и описывают это так.

Ответить
Дмитрий
2020-02-29 14:17

Столкнулся с проблемой. Если создать пароль nginx.htpasswd с параметром -B то nginx возвращает ошибку 500. Если этот параметр не применять, то всё хорошо. Образ был просто nginx.

Ответить
Deworker Pro
2020-03-01 13:15

Да, Nginx не поддерживает этот алгоритм.

Ответить
Deworker Pro
2020-03-01 13:29

UPD: Улучшили фрагмент с 26-й минуты про запуск Apache-сервера на использование конструкции wait_for.

Ответить
Александр
2020-03-09 14:30

Ошибка в 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": []}

Ответить
Deworker Pro
2020-03-10 09:27

Поддомен не находит. Настройте его DNS-записи на хостинге или в панели регистратора.

Ответить
Александр
2020-03-14 08:56

Добрый день, а что именно написать в DNS , какой именно айпишник? Чтото гдето не найду момент по видео, какие записи вставлять. Да и в личном кабинете докерхаб про это не сказано.

Ответить
Deworker Pro
2020-03-14 11:52

В панели хостинга в настройках доменов создать A-запись с названием поддомена и вписать туда IP-адрес вашей виртуальной машины.

Ответить
Александр
2020-03-09 14:33

что не хватает ему не пойму, может надо в своем докер репозитории какие нить теги создать ? А то он пустой.

Ответить
Юрий
2020-03-09 16:39

Добрый вечер!!! после 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": []}
Ответить
Юрий
2020-03-09 17:35

После повторного выполнения 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"}

и здоровенная портянка

task path: /home/pamparam/PhpstormProjects/auction/provisioning/roles/site/tasks/generate_certificates.yml:19
skipping: [server] => (item={'failed': False, u'stat': {u'charset': u'binary', u'uid': 0, u'exists': True, u'attr_flags': u'', u'lnk_target': u'../../archive/auction.pamdev.ru/cert1.pem', u'woth': True, u'device_type': 0, u'mtime': 1583773134.6051612, u'block_size': 4096, u'inode': 154082, u'isgid': False, u'size': 41, u'executable': False, u'roth': True, u'isuid': False, u'readable': True, u'isreg': False, u'version': None, u'pw_name': u'root', u'gid': 0, u'ischr': False, u'wusr': True, u'writeable': True, u'isdir': False, u'blocks': 0, u'xoth': True, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': True, u'gr_name': u'root', u'path': u'/etc/letsencrypt/live/auction.pamdev.ru/cert.pem', u'xusr': True, u'atime': 1583773134.6211607, u'lnk_source': u'/etc/letsencrypt/archive/auction.pamdev.ru/cert1.pem', u'mimetype': u'inode/symlink', u'ctime': 1583773134.6051612, u'isblk': False, u'xgrp': True, u'dev': 65025, u'wgrp': True, u'isfifo': False, u'mode': u'0777', u'islnk': True, u'attributes': []}, 'ansible_loop_var': u'item', 'item': u'auction.pamdev.ru', u'invocation': {u'module_args': {u'follow': False, u'get_checksum': True, u'path': u'/etc/letsencrypt/live/auction.pamdev.ru/cert.pem', u'checksum_algorithm': u'sha1', u'get_md5': False, u'get_mime': True, u'get_attributes': True}}, u'changed': False})  => {"ansible_loop_var": "item", "changed": false, "item": {"ansible_loop_var": "item", "changed": false, "failed": false, "invocation": {"module_args": {"checksum_algorithm": "sha1", "follow": false, "get_attributes": true, "get_checksum": true, "get_md5": false, "get_mime": true, "path": "/etc/letsencrypt/live/auction.pamdev.ru/cert.pem"}}, "item": "auction.pamdev.ru", "stat": {"atime": 1583773134.6211607, "attr_flags": "", "attributes": [], "block_size": 4096, "blocks": 0, "charset": "binary", "ctime": 1583773134.6051612, "dev": 65025, "device_type": 0, "executable": false, "exists": true, "gid": 0, "gr_name": "root", "inode": 154082, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": true, "isreg": false, "issock": false, "isuid": false, "lnk_source": "/etc/letsencrypt/archive/auction.pamdev.ru/cert1.pem", "lnk_target": "../../archive/auction.pamdev.ru/cert1.pem", "mimetype": "inode/symlink", "mode": "0777", "mtime": 1583773134.6051612, "nlink": 1, "path": "/etc/letsencrypt/live/auction.pamdev.ru/cert.pem", "pw_name": "root", "readable": true, "rgrp": true, "roth": true, "rusr": true, "siz .....

проверил по этим адресам есть /etc/letsencrypt/live/auction.pamdev.ru/cert.pem но к доменам и поддоменам они не привязаны и make push не проходит так как стучится по https

Ответить
Deworker Pro
2020-03-10 09:39

Так как файлы уже есть, то при последующих запусках всегда будет skipping

К доменам и поддоменам они теперь должны привязываться в Nginx.

Ответить
Юрий
2020-03-10 15:54

да но в директории /etc/nginx/snippets/ файлов ssl.conf certbot.conf нет и nginx дальше не дает выполнить команды

Ответить
Deworker Pro
2020-03-12 09:35

А почему их там нет?

Ответить
Юрий
2020-03-12 14:04

пока сам не понимаю.. выполняю команду make site

ожидаю что должны появится но их нет

Ответить
Юрий
2020-03-12 17:19

вообще нет nginx

Ответить
Deworker Pro
2020-03-13 11:06

Ansible толлько устанавливает Docker с Certbot и генерирует сертификаты.

А сам проект с Nginx и PHP деплоится через make deploy после make build и make push.

Ответить
Deworker Pro
2020-03-10 09:36

Если в первый раз вылетела ошибка, то добавьте к командам запуска и остановки apache значения ignore_errors: yes и перезапустите снова.

Ответить
Александр
2020-03-14 10:18

Вобщем запнулся на этом уроке. Вторые выходные сижу на нем. выше писал про 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 , тк хочется проверить вашу теорию на практике , своими ручками. А не просто поверить этой "теории"

Ответить
Deworker Pro
2020-03-14 12:05

Сам поддомен нужно создать в панели управления вашего хостинга, где вы регистрировали домен.

Там должно быть примерно так, но с вашими адресами:

Хост              |   Тип   |  Значение
---------------------------------------------
tiru.ru           |   A     |  31.184.254.199
registry.tiru.ru  |   A     |  31.184.254.199

Так поддомены создаются и привязываются к виртуальным машинам по их IP-адресам. И только после этого начинают открываться в браузере.

Ответить
Александр
2020-03-14 12:28

так и есть у меня сейчас

только ошибка не с айпишником 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": []}

сертификат тоже чтоли нужен на этот домен сделать, походу.

Ответить
Deworker Pro
2020-03-14 18:45

Да, сделать сертификат и для него.

Ответить
Александр
2020-03-16 18:16

сделал не помогло , ...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": []}

Ответить
Deworker Pro
2020-03-16 18:29

Виртуалку и поддомен для реестра вы сделали.

Теперь осталось установить туда сам реестр по примерам из комментариев выше.

Ответить
Arunas
2020-03-18 15:47

после 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, я его остановил...

вид http://www.arvidija.lt/turinys.php?autoidpsl=16&puslapio_PVD=programming

Ответить
Deworker Pro
2020-03-20 13:28

Не запустился api-php-fpm.

Ответить
Arunas
2020-03-21 09:37

Да, передеплоил с другого компьютера и всё ок.

Ответить
Олег
2020-04-25 19:08

Дмитрий, приветствую. А не могли бы вы объяснить, за что отвечает переменная REGISTRY при команде make docker-login Видел в комментариях, что люди тоже столкнулись с проблемой на этой команде, но точного ответа и понимания так и не последовало после ваших советов/ответов.

Я правильно понимаю, что вы не используете докер хаб, а создали свой регистр для хранения образов? Или я ошибаюсь?

Если это так, то не ясно, как создавать свой регистр из данных видео. На хабре есть конечно статьи, но хотелось бы тут узнать все нюансы которые вы затрагиваете.

По крайней мере у меня есть аккаунт на DockerHub и я успешно сделал туда пуш в виде docker push myaccount/php:1 (например), но если я пытаюсь использовать команду "docker login -u {{ username }} -p {{ password }} {{ registry }}", как в видео, меня шлют лесом и говорят что нет такого регистра. Вот хотелось бы понять, почему у вас работает и что это за registry.deworker.pro

Заранее спасибо за ответ

UPD - нашел в комментах инфу что требуется поднять свой регистр. Как то не приятно, что требуется копаться в комментах, в поисках информации которая не дается в курсе. Это прям минус.

Ответить
Олег
2020-04-25 19:44

Если кто столкнулся с таким моментов, что у него нет собственного докер регистра, можно поступить так:

Регистрируетесь на докер хаб
Меняете docker_login.yml на такое

---
-   name: Log into private registry
    hosts: site
    remote_user: root
    become: yes
    become_user: deploy
    vars_prompt:
        -   name: username
            prompt: "Username"
            private: no
        -   name: password
            prompt: "Password"
    tasks:
        -   name: Log into private registry
            shell: "docker login -u {{ username }} -p {{ password }}"

При использование команды make build и make push используется для переменной REGISRTY ваш айдишник на докер хабе.

Пулится пушится логинится успешно.

Минус всего этого - ваши образы на докер хабе публичные

Ответить
Deworker Pro
2020-05-01 10:03

Я правильно понимаю, что вы не используете докер хаб, а создали свой регистр для хранения образов?

Да, именно так. И в параметре REGISTRY мы его адрес указываем.

Если это так, то не ясно, как создавать свой регистр из данных видео.

Про это запишу скоро отдельное видео.

Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий