Как открыть доступ через внутренний IP?

Уважаемые эксперты,

Я очень ценю ваш вклад!!

На данный момент мне удалось успешно собрать Discourse на локальном компьютере, и я могу открыть его по адресу localhost:3000. Это замечательно: можно создавать темы, публиковать сообщения и т. д.

В основном я следовал руководству отсюда. Это действительно здорово!

Однако я не могу открыть форум по моему внутреннему IP-адресу (то есть локальному адресу в сети). Например, 10.1.2.139 (что-то вроде этого). Я хочу иметь возможность открывать этот форум на других устройствах (например, на своём ноутбуке).

Воспроизведение

Получите скрипт bash (install_discourse.sh) отсюда: install-rails/linux at main · discourse/install-rails · GitHub

chmod +x install_discourse.sh
sudo ./install_discourse.sh

git clone https://github.com/discourse/discourse.git ~/discourse
sudo -u postgres createuser -s "$USER"
cd ~/discourse

source ~/.bashrc
bundle install

bundle exec rake db:create 
bundle exec rake db:migrate
RAILS_ENV=test bundle exec rake db:create db:migrate

bundle exec rake autospec (здесь могут возникнуть ошибки.)

Запуск сервера:

bundle exec rails server
или
bundle exec rails server --binding=0.0.0.0

Создание администратора

RAILS_ENV=development bundle exec rake admin:create

Настройка почты

mailcatcher --http-ip 0.0.0.0

Есть ли какие-либо рекомендации по доступу через локальный IP-адрес?
Большое спасибо.

С уважением,
Чие

Какую команду вы использовали для запуска сервера? Вам нужно использовать эту:

bundle exec rails server --binding=0.0.0.0

У меня тоже возникли проблемы с тем, чтобы мой сервер разработки слушал IP-адрес при недавней установке в режиме разработки на Ubuntu.

Я почти уверен, что выполнил рекомендации Саймона, а также использовал bin/rails.

Уважаемый @simonk,

Спасибо за ваш ответ!!
Я использую Ctrl+C для остановки процесса в терминале и запускаю сервер командой bundle exec rails server --binding=0.0.0.0, но, похоже, это всё ещё не работает.

Подскажите, пожалуйста, как правильно остановить процесс и запустить его снова? Я заметил, что даже после закрытия терминала форум остаётся доступным. Кроме того, я не использую Docker-контейнеры, поэтому у меня нет утилиты launcher для выполнения команды ./launcher stop app. Также я пробовал выполнить kill $(cat tmp/pids/server.pid), но получил ошибку: cat: tmp/pids/server.pid: Нет такого файла или каталога.

Буду очень признателен за любые подсказки.

Заранее спасибо!

С уважением,
Чие

(Отказ от ответственности: Я сам не запускал Rails таким образом — я использую среду разработки на базе Docker)

Вы уверены в этом? Со мной уже случалось подобное, потому что мой браузер кэшировал приложение Discourse и позволял мне перемещаться между темами, даже если процесс сервера не работал. Возможно, стоит проверить это с помощью curl:

curl http://localhost:3000

Также можно проверить, запущены ли какие-либо процессы ruby:

ps -ef | grep ruby

Утилита netstat может показать, какие процессы прослушивают определённые порты. Например, если я запущу простой веб-сервер на Python так:

$ python3 -m http.server 8099
Serving HTTP on 0.0.0.0 port 8099 (http://0.0.0.0:8099/) ...

Затем выполню netstat:

$ netstat -tlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address    Foreign Address   State    PID/Program name
tcp        0      0 0.0.0.0:8099     0.0.0.0:*         LISTEN   2511478/python3
...

Это показывает, что процесс с PID 2511478 прослушивает порт 8099 на всех интерфейсах (0.0.0.0 означает «все интерфейсы»). Чтобы получить немного больше информации об этом процессе:

$ ps -fp 2511478
UID          PID    PPID  C STIME TTY          TIME CMD
simon    2511478 1250783  0 09:53 pts/11   00:00:00 python3 -m http.server 8099

Привет @simonk,

Спасибо за информацию! Она очень полезна. К тому же я уже перешел на docker-container таким образом.
Я продолжу экспериментировать с Discourse. Я действительно в восторге от этого.

Ещё раз спасибо!

С уважением,
Чие