Я пытаюсь реализовать раздельные контейнеры, но с удаленной базой данных. Я следовал приведенным выше инструкциям и гайду по настройке удаленной PostgreSQL-базы данных. Настройка работает, но меня беспокоит, почему есть две одинаковые ссылки (в web_only и data) на одну и ту же базу данных. Это заставляет меня думать, что я что-то делаю не так, и контейнер web_only вообще не использует контейнер data.
env:
# убедитесь, что локаль существует в контейнере, возможно, её нужно установить
LANG: en_US.UTF-8
DISCOURSE_DB_USERNAME: REMOVE
DISCOURSE_DB_PASSWORD: REMOVE
DISCOURSE_DB_HOST: REMOVE.ondigitalocean.com
DISCOURSE_DB_NAME: REMOVE
DISCOURSE_DB_PORT: 25060
DISCOURSE_DB_BACKUP_PORT: 25060
Если вы используете удаленную базу данных, вам не нужно создавать контейнер данных, содержащий базу данных. Обратите внимание, что вам потребуются как PostgreSQL, так и Redis (поэтому, возможно, вам понадобится контейнер данных для них).
Я не совсем понимаю, что вы вкладываете в понятие «два контейнера», но если вы предполагаете, что два контейнера означают два отдельных экземпляра Discourse, то вы смотрите не в ту сторону.
Эта статья поможет вам настроить отдельный контейнер приложения и базы данных, что полезно для продвинутых пользователей, ищущих гибкость.
Если вы хотите установить/разместить два сайта Discourse на одной машине, возможно, стоит посмотреть на Multisite для Discourse: Multisite configuration with Docker
Итак, какой контейнер был запущен? Если это был app, то нет — вы используете старую версию discourse-setup.
Перед продолжением выполните git pull, чтобы убедиться, что у вас последняя версия discourse-setup.
Если у вас запущены контейнеры data или web-only, проверьте, что помешало запуску другого. Обычно контейнер web-only не запускается, потому что на портах 80/443 уже запущен другой процесс (веб-сервер).
Как я уже говорил, я запускал отдельный форум в течение месяца. Когда я захотел запустить новый, были опробованы несколько способов:
Я хотел запустить отдельный контейнер на том же сервере — не получилось.
Мультисайтовая конфигурация в Docker с разными контейнерами для веб-сервера и базы данных, как описано здесь: Multisite configuration with Docker — не получилось.
Если вы просто хотите запустить второй автономный контейнер, вам нужно будет изменить файлы yml, чтобы использовать другую директорию и порт. Возможно, также потребуется отключить letsencrypt.
Просто для информации: если вы хотите провести тестирование производительности, не делайте этого на продакшн-машине. Лучше запустите отдельный VPS и используйте его для тестов.
Попытка запустить два отдельных экземпляра Discourse на одной машине может привести к серьёзным сбоям в установке, а это нежелательно.
Эта команда создаст отдельные контейнеры данных и веб-сервера только в том случае, если на момент её выполнения отсутствует файл app.yml. Она не создаст два веб-контейнера.
Думаю, мне следовало оставить эту функцию без документации. И, на самом деле, переход к конфигурации с двумя контейнерами не приносит никакой пользы, так что, вероятно, она вообще не должна быть здесь.
Он не обязательно должен быть очень подробным, но может оказаться очень полезным для тех, кто хочет начать свои первые приключения в продвинутом использовании Discourse?
Возможно, так и есть. Это большая помощь, и, как и discourse-setup, она предназначена для очень конкретной цели — стандартной новой установки. Мои скрипты установки используют её уже довольно давно. Это может быть простым способом перейти к двухконтейнерной архитектуре, если вы готовы сделать резервную копию старого контейнера и восстановить её на новом.
Мое беспокойство всегда заключалось в том, что это будет сложно поддерживать, так как пользователи, которые не понимают, как это работает, будут пытаться использовать этот метод, а затем не смогут применять никакую документацию, поскольку команда «rebuild app» перестанет работать. Кроме того, трудно определить, когда нужно пересобрать контейнер базы данных. Недавно у меня произошла неудача при пересборке, потому что требовалась версия Redis 4.0, а у меня была 3.0. Затем также потребовалось обновить PostgreSQL, что влекло за собой выполнение последовательности шагов. Нужно было знать, когда пересобирать контейнер данных, а когда — веб-контейнер, а также как изменить путь от рекомендованного. Всё прошло гладко — для меня, но попытка объяснить это кому-то, кто не знает, что такое bash, на форуме стала бы утомительной для всех участников.
Я считаю, что, возможно, лучше сохранить высокий порог входа для создания нестандартных установок, чтобы защитить людей от самих себя.