ПРЕДУПРЕЖДЕНИЕ: Порт 443 компьютера недоступен по имени хоста

Я делаю это для настройки Discourse: ./discourse-setup, но получаю ошибку, показанную на изображении.
Как исправить эту ошибку? Я использую Ubuntu 18.04

Мои DNS-записи:

Мой sudo ufw status verbose:

В имени хоста, которое вы ввели, содержится невидимый символ:

image

Попробуйте снова, но убедитесь, что вводите его корректно. Если вы копируете и вставляете текст, убедитесь, что исходный текст чистый.

Изменений не было.

Похоже, на этом IP-адресе уже запущен WordPress.

Да, WordPress установлен. Не могу ли я использовать оба на одном сервере?

Это возможно, но непросто. При этом вы не можете использовать discourse-setup. Я рекомендую сначала попробовать на сервере, где не запущены другие службы.

Запуск других веб-сайтов на том же сервере, что и Discourse.

Я выполнил эти шаги, но результатов нет. Между тем я использую WEBMIN.

У кого-нибудь есть другие идеи?

Если инструкции в теме, на которую я ссылался ранее, не работают для вас, то самый простой вариант — запустить Discourse на собственном сервере.

Сделать так, чтобы это работало с Webmin, будет очень сложно.

Я знаю, что это будет сложно, но я не считаю себя любителем. Я попробовал инструкции, на которые вы дали ссылку. Есть ли ещё какие-то ссылки, которые мне стоит прочитать?

По этой проблеме есть несколько тем howto.

Привет, @Murto

Кстати, я считаю, что Discourse как бэкенд-приложение на Rails настраивается гораздо проще, если сконфигурировать Rails для использования unix-сокета вместо TCP/IP-порта, а само приложение Discourse разместить за обратным прокси.

В этом случае TCP/IP-порты открываются только через обратный прокси, а приложение Discourse (и контейнер) работает через unix-сокет. Так вы можете запустить столько экземпляров контейнеров Discourse, сколько захотите, не беспокоясь о конфликтах TCP/IP-сокетов. На мой взгляд, это очень чистый способ запуска Discourse.

На этом сайте множество руководств и уроков, которые помогут вам настроить это, если вы застрянете и захотите немного изменить направление. В дистрибутиве Discourse есть шаблон «socket», который можно использовать для настройки «части конфигурации Discourse»; затем вам останется только настроить обратный прокси (уроков по этому поводу бесчисленное множество), и «вперёд!».

Надеюсь, это поможет.

Мне так и не удалось решить проблему. Не мог бы кто-нибудь подробно объяснить? :roll_eyes:

Попробуйте следующее:

netstat -lnptu | grep :443

а затем:

kill -9 PID (замените PID на номер, полученный в результате выполнения предыдущей команды)

Я рекомендую настроить обратный прокси на вашем сервере, доступном из интернета, и настроить его на перенаправление запросов к WordPress или Discourse в зависимости от хоста.

Например, запустите службу nginx, используя порты 80 и 443 на хосте, и настройте его на проксирование запросов к blog.yourdomain к сервису WordPress (либо на внутренний порт вашего хоста, если у вас Apache + WordPress, в этом случае вы можете перенаправить запросы на порт Apache, например 8080, либо использовать FastCGI).

Затем на том же сервере вы можете запустить Discourse, убедившись, что в файле app.yml указаны неиспользуемые порты хоста, например 8081, либо используйте unix-сокет, как предложил @neounix. После этого настройте проксирование запросов к forum.yourdomain на этот порт или на сокет. Для запуска Discourse необходимо выполнить команду ./launch rebuild app в директории Discourse (обычно это /var/discourse).

В этом случае вам не нужно запускать discourse-setup для создания файла подкачки размером 2 ГБ (он в основном используется при обновлениях, которые могут требовать больше памяти, хотя он может и не понадобиться, если у вашего сервера много памяти), а также для создания файла app.yml. Вместо этого вы должны сделать это самостоятельно. Если вы не знаете, что указать в файле app.yml, я рекомендую выполнить рекомендуемую установку на отдельном сервере, даже если только для того, чтобы лучше ознакомиться с Discourse и посмотреть сгенерированный файл app.yml, который вы сможете использовать на вашем общем сервере (не забудьте изменить порты или удалить их, если вы используете подход с unix-сокетом).

Я рекомендую следовать одному из тематических руководств по этой теме (howto), если вы не можете продолжить самостоятельно.

Можете объяснить, как выполнить процесс обратного прокси? Я узнал, что нужно делать, но не знаю, как это сделать.

У меня нет примера под рукой, так как я не использую прокси-сервер перед ними, хотя, кажется, я реализовывал это некоторое время назад. В любом случае, здесь нет ничего секретного; всё должно работать так же, как и с другими обратными прокси-серверами. Ниже приведён обзор того, что следует делать с использованием портов (а не сокетов):

  1. Убедитесь, что сервис WordPress запущен на порту, отличном от 80 и 443 (например, 8443), и работает. Сначала вы можете попробовать открыть его доступ в интернет, чтобы проверить работоспособность.

  2. Сделайте то же самое для Discourse, сопоставив его с другими портами.

Было:

expose:
  - "80:80"   # http
  - "443:443" # https

Стало (например):

expose:
  - "8081:80"   # http
  - "8444:443" # https

В вашем файле app.yml (если у вас его нет, рекомендую запустить Discourse на отдельной машине, следуя официальному руководству, просто чтобы понять, как это работает, и посмотреть на сгенерированный файл app.yml в /var/discourse/containers/). Вот пример файла app.yml: discourse_docker/samples/standalone.yml at master · discourse/discourse_docker · GitHub

  1. Установите nginx и добавьте директивы прокси в его конфигурационный файл. Они должны быть похожи на следующий фрагмент:
upstream blog {
    server localhost:8080;
}

server {
    server_name blog.barinaklar.com;
    server_tokens off;
    listen 80;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        return 301 https://blog.barinaklar.com$request_uri;
    }
}

server {
    server_name blog.barinaklar.com;
    server_tokens off;
    listen 443 ssl;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        proxy_pass           http://blog;
        proxy_redirect		 off;
        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-Host $server_name;
        proxy_set_header	 X-Forwarded-Proto $scheme;
    }
}

upstream forum {
    server localhost:8081;
}

server {
    server_name forum.barinaklar.com;
    server_tokens off;
    listen 80;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        return 301 https://forum.barinaklar.com$request_uri;
    }
}

server {
    server_name forum.barinaklar.com;
    server_tokens off;
    listen 443 ssl;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        proxy_pass           http://forum;
        proxy_redirect		 off;
        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-Host $server_name;
        proxy_set_header	 X-Forwarded-Proto $scheme;
    }
}

Это предполагает, что WordPress запущен на порту 8080, а Discourse — на порту 8081. Обязательно настройте фаервол, чтобы заблокировать доступ к этим портам (облачные провайдеры обычно блокируют все порты по умолчанию, кроме 22, поэтому это может быть не нужно).

В этом случае вы сами отвечаете за генерацию SSL/TLS-сертификатов (вы можете сделать это с помощью certbot, запустив его периодически через cron-задачу, поэтому я уже включил пути /.well-known/acme-challenge/ в конфигурацию nginx).


Как я уже говорил выше, это лишь обзор, и возможно, я что-то упустил. Особое внимание следует уделить базовому URL из-за изменения портов (чтобы убедиться, что он не пытается перенаправить пользователя на https://вашдомен:8081 вместо https://вашдомен, и внести необходимые изменения для корректной работы).

Это может быть не нужно, если WordPress запущен в контейнере с портом 80 или 443 внутри контейнера. С Discourse тоже всё должно быть в порядке. Проблема может возникнуть в отношении https: он может перенаправлять на http, так как использует порт http в прокси. Поэтому стоит проверить, происходит ли это, и исправить в случае необходимости.

Спасибо за вашу помощь. Я подам заявку и проинформирую о транзакциях.