Установка VPS на Hostinger со стеком LEMP, Ubuntu 24.04 LTS и CloudPanel

У меня есть 3 сайта на Drupal 7, использующих PHP Generic и Varnish. Стек LEMP использует NGINX.
Я хочу установить Discourse как форум для одного из моих сайтов.
Я установил Docker, Discourse, настроил поддомен и файл /etc/nginx/sites-enabled/forum.linguagemclipper.com.br.conf.
Создал сертификаты.
После установки получаю ошибку: “The provided host name is not valid for this server”.
Появилось множество ошибок, связанных с использованием одной и той же порта.
Думаю, мне нужно исправить мой .conf и файл app.yml. Я уже провел множество тестов с помощью ChatGPT, запустил ./discourse-doctor.
Не знаю, что делать дальше…

Мой .conf:

server {
    listen 80;
    listen [::]:80;
    server_name forum.linguagemclipper.com.br;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    http3 off;
    server_name forum.linguagemclipper.com.br;

    ssl_certificate     /etc/letsencrypt/live/forum.linguagemclipper.com.br/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/forum.linguagemclipper.com.br/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
    }
}

И мой app.yml:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## Раскомментируйте следующую строку, чтобы включить слушатель IPv6
  #- "templates/web.ipv6.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## Раскомментируйте эти две строки, если хотите добавить Lets Encrypt (https)
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

## Какие TCP/IP порты должен открывать этот контейнер?
## Если вы хотите, чтобы Discourse использовал один порт с другим веб-сервером, например Apache или nginx,
## см. https://meta.discourse.org/t/17247 для деталей
expose:
- "8080:80"   # внутренний HTTP Discourse, сопоставленный с портом 8080
#  - "3000:80"   # http
#  - "4433:443"  # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Установите db_shared_buffers максимум на 25% от общего объема памяти.
  ## Будет установлено автоматически при загрузке на основе обнаруженной оперативной памяти, или вы можете переопределить
  db_shared_buffers: "2048MB"

  ## Может улучшить производительность сортировки, но увеличивает использование памяти на подключение
  db_work_mem: "40MB"

  ## Какую ревизию Git должен использовать этот контейнер? (по умолчанию: tests-passed)
  #version: tests-passed

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  DISCOURSE_DEFAULT_LOCALE: pt_BR

  # HTTPS принудительно включен, даже без использования внутреннего SSL
  DISCOURSE_FORCE_HTTPS: true

  ## Сколько одновременных веб-запросов поддерживается? Зависит от памяти и ядер CPU.
  ## Будет установлено автоматически при загрузке на основе обнаруженных процессоров, или вы можете переопределить
  UNICORN_WORKERS: 4

Некоторые ошибки:

+ /usr/bin/docker run --shm-size=512m -d --restart=always -e LANG=en_US.UTF-8 -e RAILS_ENV=production -e UNICORN_WORKERS=4 -e UNICORN_SIDEKIQS=1 -e RUBY_GC_HEAP_GROWTH_MAX_SLOTS=40000 -e RUBY_GC_HEAP_INIT_SLOTS=400000 -e RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=1.5 -e DISCOURSE_DB_SOCKET=/var/run/postgresql -e DISCOURSE_DB_HOST= -e DISCOURSE_DB_PORT= -e LC_ALL=en_US.UTF-8 -e LANGUAGE=en_US.UTF-8 -e DISCOURSE_DEFAULT_LOCALE=pt_BR -e DISCOURSE_FORCE_HTTPS=true -e DISCOURSE_HOSTNAME=forum.linguagemclipper.com.br -e DISCOURSE_DEVELOPER_EMAILS=anderson@linguagemclipper.com.br -e DISCOURSE_SMTP_ADDRESS=smtppro.zoho.com -e DISCOURSE_SMTP_PORT=587 -e DISCOURSE_SMTP_USER_NAME=anderson@linguagemclipper.com.br -e 'DISCOURSE_SMTP_PASSWORD=Clavis75!' -e DISCOURSE_SMTP_ENABLE_START_TLS=true -e LETSENCRYPT_ACCOUNT_EMAIL=anderson@linguagemclipper.com.br -h srv801054-app -e DOCKER_HOST_IP=172.17.0.1 --name app -t -p 8080:80 -v /var/discourse/shared/standalone:/shared -v /var/discourse/shared/standalone/log/var-log:/var/log --mac-address 02:cd:20:6d:ed:a7 local_discourse/app /sbin/boot
f221ba6dc911301795806390816be38e78c26b71d94773c814f057817b88a776
docker: Error response from daemon: driver failed programming external connectivity on endpoint app (a5dc4c7ba846ccf556189495ce62e040cea87a62cf47e44fef76b4364fcb9e4a): Error starting userland proxy: listen tcp4 0.0.0.0:8080: bind: address already in use.
root@srv801054:/var/discourse# docker ps -a
CONTAINER ID   IMAGE                              COMMAND                  CREATED          STATUS                    PORTS     NAMES
18cc215795b4   local_discourse/app                "/sbin/boot"             22 minutes ago   Created                             app
7cc7772ec84d   discourse/base:2.0.20250226-0128   "/bin/bash -c '/usr/…"   22 hours ago     Exited (0) 22 hours ago             frosty_mendeleev
fb3ce2afb5a7   discourse/base:2.0.20250226-0128   "/bin/bash -c '/usr/…"   22 hours ago     Exited (0) 22 hours ago             determined_greider
root@srv801054:/var/discourse# sudo ss -ltnp | grep :8080
LISTEN 0      511          0.0.0.0:8080       0.0.0.0:*    users:(("nginx",pid=885962,fd=26),("nginx",pid=885961,fd=26),("nginx",pid=674485,fd=26))
LISTEN 0      511             [::]:8080          [::]:*    users:(("nginx",pid=885962,fd=27),("nginx",pid=885961,fd=27),("nginx",pid=674485,fd=27))
root@srv801054:/var/discourse# sudo lsof -i :8080
COMMAND      PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
cache-mai 400747 vcache   26u  IPv4 4374453      0t0  TCP localhost:45054->localhost:http-alt (ESTABLISHED)
nginx     674485   root   26u  IPv4 3106797      0t0  TCP *:http-alt (LISTEN)
nginx     674485   root   27u  IPv6 3106798      0t0  TCP *:http-alt (LISTEN)
nginx     885961   root   26u  IPv4 3106797      0t0  TCP *:http-alt (LISTEN)
nginx     885961   root   27u  IPv6 3106798      0t0  TCP *:http-alt (LISTEN)
nginx     885961   root   44u  IPv4 4374454      0t0  TCP localhost:http-alt->localhost:45054 (ESTABLISHED)
nginx     885962   root   26u  IPv4 3106797      0t0  TCP *:http-alt (LISTEN)
nginx     885962   root   27u  IPv6 3106798      0t0  TCP *:http-alt (LISTEN)
root@srv801054:/var/discourse# 

Похоже, что этот порт уже используется чем-то другим. Попробуйте другой порт? После изменения порта в файле app.yml вы можете выполнить

./launcher destroy app; ./launcher start app

вместо полной пересборки.

DISCOURSE УСТАНОВЛЕН, НО НЕ ОТПРАВЛЯЕТ ПИСЬМА

Я изменил порт Discourse в app.yml на 8888 и в vhost Cloudpanel также, затем остановил NGINX для повторной компиляции Discourse, и всё сработало.
Я снова запустил NGINX, и оба сайта, и Discourse остались в рабочем состоянии.
Проблема в том, что Discourse вообще не отправляет письма, а нам нужно письмо для активации аккаунта.
Я уже менял порты, но это не помогло.
На том же сервере я установил Mailcow в Docker, и он работает нормально: как отправка, так и получение писем.

Похоже, вы делаете что-то креативное и крутое на своём сервере! Обратите внимание, что мы можем предоставить поддержку только в том случае, если вы используете официальные инструкции по установке. Пожалуйста, ознакомьтесь с ними и попробуйте снова, следуя инструкциям, которые также содержат шаги по устранению неполадок.