Я пытаюсь выполнить чистую установку с помощью приложения в один клик от DigitalOcean.
Это уже третья попытка создать его с нуля, и я сталкиваюсь с той же проблемой.
Проверив DNS, я вижу, что мой домен указывает на IP-адрес дроплета, но Discourse не отображается на моём домене.
Я запустил discourse-doctor, и он завис/зависает перед отображением информации «домен обслуживается/не обслуживается».
Было ли обновление, которое могло вызвать такое поведение?
@merefield Только что создал новый дроплет и выполнил установку, как описано в официальной инструкции. У меня всё ещё возникает точно такая же проблема.
Проблема обычно заключается в том, что 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-запрос показывает, что я подключён к правильному серверу и так далее, я предполагаю, что дело в том, что вы описали. Подожду ещё несколько дней и попробую снова.
Спасибо
@pfaffman Можешь помочь мне с читерством? Я посмотрел, как настроить это с несколькими доменами, но не уверен, что ты имел в виду. Ты имеешь в виду использование хука after_ssl каким-то образом?
Вам просто нужно добавить любой другой домен. Так, если ваш форум находится по адресу forum.example.com, вы создадите DNS-запись для cheat.example.com, указывающую на ваш сервер, и добавите её, как описано там. Поскольку это будет отдельный запрос сертификата, вы сможете его запросить.
Или он может добавить один домен или поддомен с помощью этого метода. Это простой способ обойти проблему, когда вы достигли лимита запросов. Однако, чтобы избежать превышения лимитов, всегда лучше использовать тестовый режим --dryrun. (Обратите внимание, что Let’s Encrypt, возможно, переименует --dryrun в что-то более понятное для неанглоязычных пользователей, например --test или --testrun. Скорее всего, это произойдёт не раньше января 2021 года или позже. Они также работают над полным переписыванием своих руководств.
Рекомендуемый способ добавления нового домена в существующий сертификат — действительно повторно использовать исходную команду, добавить новый домен с ещё одним флагом -d и указать --expand, чтобы сообщить certbot, что не нужно создавать новую линию сертификатов (это привело бы к созданию новой подкаталога в /etc/letsencrypt/live).
Проблема здесь в том, что вы не понимаете, что это тест, пока не станет слишком поздно. Кроме того, даже мне не совсем ясно, как настроить Discourse для получения этих сертификатов в тестовом режиме.
Одна из причин, по которой они (в Let’s Encrypt) переписывают свои руководства, — сделать их более понятными. Как только вы настроите получение тестового (фейкового) сертификата с использованием тестовой среды, можно запустить Certbot в производственном режиме и получить ваш центр сертификации (CA). После этого можно установить Discourse, и он должен будет подхватить новый (расширенный) CA.
Дело не в этом. Дело в том, что разобраться, как добавить секцию в 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 за помощь и информативные ответы!