This (port conflict) was handled in the script a while ago. Needing to proxy is a whole other deal there are howto topics on that.
This is the guide that the script links to but I don’t want to tear down my production website just to install discourse.
This guide assumes you already have Discourse working - if you don't, it may be hard to tell whether or not the configuration is working.
Так как эта тема оказалась полезной, я добавлю к ней, даже если она уже трёхлетней давности. Сегодня я столкнулся с проблемой «порт занят» и немного озадачен тем, что произошло. Просто изложу хронологию событий, на случай если кто-то ещё с этим столкнётся.
Контекст: Установлена Ubuntu 16.04.3 LTS (слишком боюсь обновляться до 18.04) и Discourse 2.3.x (не уверен, какая именно версия, причина этого позже :)).
Внёс изменение (не имеющее отношения к проблеме) в файл app.yml и пересобрал приложение.
Также заметил, что Ubuntu предложила перезагрузку (причину не проверял), поэтому перезагрузил и саму Ubuntu.
В итоге возникла ошибка с портом.
Понял, что внезапно запустился Apache2, поэтому отключил его:
root@Discourse:~# sudo update-rc.d apache2 disable
insserv: warning: current start runlevel(s) (empty) of script apache2' overrides LSB defaults (2 3 4 5). insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script apache2’ overrides LSB defaults (0 1 6).
В конце концов форум снова заработал, так как порт освободился.
Что меня не покидает — почему это произошло? Откуда взялся Apache2?
Надо было сразу после перезагрузки проверить форум, черт возьми. Теперь я не знаю, что стало причиной этого: обновление Discourse или перезагрузка Ubuntu (вероятно, это можно найти в логах, но я уже не очень силён в Linux). Даже пытался поискать на форуме, устанавливает ли сейчас Discourse 2.5 Apache2.
Хорошая новость в том, что обновление Discourse давно назрело. Просто в последнее время я очень неохотно обновляюсь, так как за последние 5 лет примерно через раз сталкивался с подобными проблемами. Тем не менее, я всё ещё люблю Discourse…
Судя по вашему описанию, лучший способ узнать, вызовет ли следующее обновление проблему, — это обновляться три дня подряд. Это должно быть достаточно просто и выполнимо!
В целом, если с момента последнего обновления Discourse прошло больше года, скорее всего, потребуется выполнить ./launcher rebuild app. Конечно, рекомендую чаще заходить на страницу /admin/upgrade ![]()
Если ваше app.yml называлось иначе, вам нужно
./launcher stop irrelevant
Или переименовать его и пересобрать.
Discourse ничего не устанавливает за пределами контейнера, кроме Docker, который требуется как условие для установки.
Скорее всего, Apache2 был установлен после последней перезагрузки и не мог захватить порт, пока вы не перезагрузили машину. Проверьте историю команд bash, чтобы узнать, какие пакеты были установлены вручную.
Спасибо всем за идеи.
Я использовал скрипт rebuild. И если Discourse не устанавливает ничего лишнего (я думал, что nginx и Apache2 появятся по умолчанию из-за чего-то нового)… хм. Я точно не устанавливал Apache2 сам.
Ах. После того как я годами держал этот DigitalOcean Ubuntu только для Discourse, в январе я фактически установил Subversion, apparently без перезагрузки. Эта установка, похоже, добавляет Apache, хотя его отключение всё равно оставляет мне необходимую функциональность.
Похоже, я уже не привык к тому, что установки добавляют мусор (да, я уверен, что Apache нужен для чего-то). Такое чаще случается, например, в Windows или Android :D.
Извините за беспокойство. С другой стороны, это реальный сценарий использования — всегда полезно читать такие случаи разработчикам.