Как следует из названия, я выполнил команду sudo apt install apache2.
Сервер не запускается, и вот ошибка:
(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
pam_unix(sudo:session): session closed for user root
Control process exited, code=exited status=1
apache2.service: Failed with result 'exit-code'.
Failed to start The Apache HTTP Server.
И да, и нет. Давайте сделаем шаг назад и разберемся.
Ранее, судя по всему, вы запускали несколько веб-сайтов с помощью Apache. Apache прослушивал порты 80 и 443, а затем «проксировал» (перенаправлял) запросы как «виртуальные хосты», что позволяло запускать множество веб-сайтов на одном сервере, все из которых слушали одни и те же порты (80 и 443). Это был «LAMP 101»… принцип работы виртуальных хостов.
Теперь предположим, что вы устанавливаете Discourse официальным способом «из коробки» (OOTB). OOTB-версия Discourse попытается занять те же порты и потерпит неудачу, так как Apache уже использует (занял) эти порты. У вас есть выбор:
Запустить Discourse через Unix-сокет и настроить Apache для обратного проксирования приложения Discourse как виртуального хоста.
Примечание: Я протестировал это, и это работает; однако эта конфигурация не поддерживается официально (и даже неофициально) разработчиками Discourse.
Перейти с Apache на nginx, запустить все свои веб-серверы на nginx, а также настроить обратное проксирование приложения Discourse как виртуального хоста, используя Unix-сокет для продакшн-версии приложения Discourse-docker.
Примечание: Это также не поддерживается официально разработчиками Discourse; и большинству людей, использующих сайты на Apache, будет довольно сложно («трудоемко») перенести все свои настройки mod_rewrite и закодированные модули geo-ip на nginx; но это, конечно, выполнимо, особенно если ваши приложения изначально созданы для работы как с nginx, так и с Apache2 (это проще, но все равно не поддерживается официально).
Открыть контейнер Docker с Discourse на портах, отличных от 80 и 443.
Примечание: Это тоже (по сути) не рекомендуется (хотя, насколько я помню, официально поддерживается). Однако большинство людей не хотят обращаться к веб-приложению, вводя номера портов, например https://my-great-discourse-app.org:3334, поэтому в продакшн-среде так обычно не делают. В разработке ситуация иная.
Моя рекомендация «без знания всех деталей», исходя из опыта работы с LAMP и всё чаще с Discourse, — запускать их на отдельных серверах (это официально поддерживается Discourse); но если у вас действительно ограниченный бюджет и вы должны запустить всё на одном сервере (или вам просто нравится иметь один большой сложный сервер), то вам нужно будет научиться настраивать Apache2 для обратного проксирования через Unix-сокет к приложению Discourse и обратно.
Я протестировал это, и возможно настроить Apache2 для обратного проксирования Discourse через Unix-сокет; однако это решение не поддерживается официально (вообще).
Примечание: Ссылка на настройку Apache2 с HAProxy была решением, которое мне не удалось легко заставить работать, поэтому я от него отказался (нет необходимости использовать только HAProxy, есть «старые способы» сделать это). Однако вам, возможно, будет лучше просто следовать этому руководству Discourse:
Размещение на нестандартных портах полностью не поддерживается. Я видел несколько тем, где владельцы сайтов, вместо привязки к сокету, меняли порты и использовали обратный прокси для сопоставления с 80/443, но если конечный результат требует указания :port, то это невозможно поддержать.