Port already in use, what to do?

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 :slight_smile:

Если ваше app.yml называлось иначе, вам нужно

  ./launcher stop irrelevant

Или переименовать его и пересобрать.

Discourse ничего не устанавливает за пределами контейнера, кроме Docker, который требуется как условие для установки.

Скорее всего, Apache2 был установлен после последней перезагрузки и не мог захватить порт, пока вы не перезагрузили машину. Проверьте историю команд bash, чтобы узнать, какие пакеты были установлены вручную.

Спасибо всем за идеи.

Я использовал скрипт rebuild. И если Discourse не устанавливает ничего лишнего (я думал, что nginx и Apache2 появятся по умолчанию из-за чего-то нового)… хм. Я точно не устанавливал Apache2 сам.

Ах. После того как я годами держал этот DigitalOcean Ubuntu только для Discourse, в январе я фактически установил Subversion, apparently без перезагрузки. Эта установка, похоже, добавляет Apache, хотя его отключение всё равно оставляет мне необходимую функциональность.

Похоже, я уже не привык к тому, что установки добавляют мусор (да, я уверен, что Apache нужен для чего-то). Такое чаще случается, например, в Windows или Android :D.

Извините за беспокойство. С другой стороны, это реальный сценарий использования — всегда полезно читать такие случаи разработчикам.