Установка не работает!

Я пытаюсь выполнить чистую установку с помощью приложения в один клик от DigitalOcean.
Это уже третья попытка создать его с нуля, и я сталкиваюсь с той же проблемой.
Проверив DNS, я вижу, что мой домен указывает на IP-адрес дроплета, но Discourse не отображается на моём домене.

Я запустил discourse-doctor, и он завис/зависает перед отображением информации «домен обслуживается/не обслуживается».

Было ли обновление, которое могло вызвать такое поведение?

Установка в один клик не поддерживается.

Пожалуйста, воспользуйтесь невероятно простым официальным процессом установки.

Если после этого у вас возникнут какие-либо проблемы, вы можете опубликовать их здесь и получить поддержку.

@merefield Только что создал новый дроплет и выполнил установку, как описано в официальной инструкции. У меня всё ещё возникает точно такая же проблема.

discourse-doctor завис

и на моём домене ничего не отображается.

Это полностью чистая установка по официальной инструкции. Не могу понять, что здесь происходит. Есть какие-то идеи?

@merefield В логах ./launcher logs app я вижу:

nginx: [emerg] не удалось загрузить сертификат "/shared/ssl/mydomainname.de.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)

хотя не совсем понимаю, что это значит

Понятно, что он пытается обратиться к /shared/ssl, но на самом деле SSL находится в shared/standalone/ssl. Как это исправить?

Проблема обычно заключается в том, что DNS настроен неправильно или изменения ещё не успели распространиться. Если вы поделитесь своим URL, кто-то сможет проверить.

Я часто использую https://dnschecker.org/#A/example.com для проверки.

Но если вы уже пробовали несколько раз, то, скорее всего, исчерпали лимит запросов на получение сертификата от Let’s Encrypt. Я на 90% уверен, что это ваша текущая проблема. Можно «обойти» ограничение, следуя инструкции по адресу Set up Let’s Encrypt with multiple domains / redirects - #53, но это более сложная настройка, и вы не сможете реализовать простую конфигурацию. Лучший вариант — подождать несколько дней и попробовать снова.

Это не проблема. /shared/ssl — это путь внутри контейнера, а shared/standalone/ssl — путь вне контейнера.

@pfaffman Да, звучит правдоподобно! Всё ещё не могу создать его, но могу создать на другом домене. Поскольку DNS-запрос показывает, что я подключён к правильному серверу и так далее, я предполагаю, что дело в том, что вы описали. Подожду ещё несколько дней и попробую снова.
Спасибо :metal:

@pfaffman Можешь помочь мне с читерством? Я посмотрел, как настроить это с несколькими доменами, но не уверен, что ты имел в виду. Ты имеешь в виду использование хука after_ssl каким-то образом?

Вам просто нужно добавить любой другой домен. Так, если ваш форум находится по адресу forum.example.com, вы создадите DNS-запись для cheat.example.com, указывающую на ваш сервер, и добавите её, как описано там. Поскольку это будет отдельный запрос сертификата, вы сможете его запросить.

@pfaffman Я использую Digital Ocean. Я добавил cheat.example.com как A-запись, но при настройке он не принимается как домен.

(ПРЕДУПРЕЖДЕНИЕ: Порт 443 на компьютере, по-видимому, недоступен)

Я следовал инструкциям и выполнил пересборку, но всё равно появляется сообщение: “Сайт недоступен”. :thinking:

Остальная часть конфигурации: я просто добавил

  after_ssl:
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d cheat.example.com"

внутри hooks: в моём файле app.yml.

Или он может добавить один домен или поддомен с помощью этого метода. Это простой способ обойти проблему, когда вы достигли лимита запросов. Однако, чтобы избежать превышения лимитов, всегда лучше использовать тестовый режим --dryrun. (Обратите внимание, что Let’s Encrypt, возможно, переименует --dryrun в что-то более понятное для неанглоязычных пользователей, например --test или --testrun. Скорее всего, это произойдёт не раньше января 2021 года или позже. Они также работают над полным переписыванием своих руководств. :slightly_smiling_face:


Рекомендуемый способ добавления нового домена в существующий сертификат — действительно повторно использовать исходную команду, добавить новый домен с ещё одним флагом -d и указать --expand, чтобы сообщить certbot, что не нужно создавать новую линию сертификатов (это привело бы к созданию новой подкаталога в /etc/letsencrypt/live).

Проблема здесь в том, что вы не понимаете, что это тест, пока не станет слишком поздно. Кроме того, даже мне не совсем ясно, как настроить Discourse для получения этих сертификатов в тестовом режиме.

Именно это я и пытался донести.

Одна из причин, по которой они (в Let’s Encrypt) переписывают свои руководства, — сделать их более понятными. Как только вы настроите получение тестового (фейкового) сертификата с использованием тестовой среды, можно запустить Certbot в производственном режиме и получить ваш центр сертификации (CA). После этого можно установить Discourse, и он должен будет подхватить новый (расширенный) CA.

:+1:

Дело не в этом. Дело в том, что разобраться, как добавить секцию в app.yml для включения этого переключателя — насколько бы очевидным это ни казалось — примерно в 3 раза (а может, и в 10 раз) сложнее, чем установить Discourse. Вам нужно отредактировать app.yml, добавить сложную конструкцию и расставить все пробелы идеально? Просто подождите неделю или выберите новое имя.

@pfaffman Я выбрал новое имя, как и описал. Одна проблема заключалась в том, что cheat.example.com должен быть записью CNAME, а не A.

Тем не менее, это всё ещё не работает. Я дам этому ещё немного времени.

РЕДАКТИРОВАНИЕ: Для справки вот мой app.yml:


templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Раскомментируйте эти две строки, если хотите добавить Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Установите db_shared_buffers максимум в 25% от общего объёма памяти.
  ## Будет установлено автоматически при загрузке на основе обнаруженной оперативной памяти, либо вы можете переопределить
  db_shared_buffers: "256MB"

  ## Может улучшить производительность сортировки, но увеличивает использование памяти на соединение
  #db_work_mem: "40MB"

  ## Какую ревизию Git должен использовать этот контейнер? (по умолчанию: tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en
  # DISCOURSE_RELATIVE_URL_ROOT: /forum
  ## Сколько одновременных веб-запросов поддерживается? Зависит от памяти и количества ядер процессора.
  ## Будет установлено автоматически при загрузке на основе обнаруженных процессоров, либо вы можете переопределить
  UNICORN_WORKERS: 4

  ## TODO: Доменное имя, на которое будет реагировать этот экземпляр Discourse
  ## Обязательно. Discourse не будет работать с чистым IP-адресом.
  DISCOURSE_HOSTNAME: cheat.example.com

  ## Раскомментируйте, если хотите, чтобы контейнер запускался с тем же
  ## именем хоста (опция -h), что указано выше (по умолчанию "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Список email-адресов через запятую, которые станут администраторами и разработчиками
  ## при первой регистрации, например 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'emails@emails.com'

  ## TODO: SMTP-сервер, используемый для проверки новых аккаунтов и отправки уведомлений
  ## Адрес SMTP, имя пользователя и пароль обязательны
  ## ВНИМАНИЕ: символ '#' в пароле SMTP может вызвать проблемы!
  DISCOURSE_SMTP_ADDRESS: smtpout.secureserver.net
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: some@email.com
  DISCOURSE_SMTP_PASSWORD: "apassword"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (опционально, по умолчанию true)

  ## Если вы добавили шаблон Lets Encrypt, раскомментируйте ниже, чтобы получить бесплатный SSL-сертификат
  LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## Адрес CDN (http или https) для этого экземпляра Discourse (настроен на извлечение)
  ## см. https://meta.discourse.org/t/14857 для деталей
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

## Контейнер Docker не имеет состояния; все данные хранятся в /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Плагины размещаются здесь
## см. https://meta.discourse.org/t/19157 для деталей
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
  after_ssl:
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d cheat.example.com --expand"
 

В итоге прошла неделя, и я снова смог использовать свой домен. Вероятно, в конфигурации для настройки работы с поддоменом была какая-то ошибка, так как после ознакомления с документацией Let’s Encrypt я уверен, что это правильное решение.

Ещё раз спасибо @pfaffman и @JimPas за помощь и информативные ответы!