Ошибка 502 в nginx

Здравствуйте,

Я только что выполнил команду ./launcher rebuild app, и ошибок, казалось бы, не возникло. Однако при попытке открыть сайт я получаю ошибку 502.

В логе ошибок nginx (shared/standalone/log/var-log/nginx/error.log) указано:

2020/08/12 05:47:43 [error] 653#653: *7 connect() failed (111: Connection refused) while connecting to upstream, client: [...], server: _, request: "GET / HTTP/2.0", upstream: "http://127.0.0.1:3000/", host: "[...]"

Я просмотрел все темы, которые нашёл по поводу ошибок 502 в Discourse и nginx, но не смог найти или понять ничего, что имело бы смысл в моём случае.

Это может иметь отношение к делу: при запуске из контейнера:

# netstat -plant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      644/nginx: master p 
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      644/nginx: master p 
tcp6       0      0 :::6379                 :::*                    LISTEN      -                   
tcp6       0      0 :::5432                 :::*                    LISTEN      -

Должен ли что-то работать на порту 3000?

Не могли бы вы подсказать, где ещё стоит искать информацию для отладки этой проблемы?

Pura vida :slight_smile:

Сначала отображается ошибка 502, так как службы внутри контейнера запускаются. Она должна исчезнуть в течение 30 секунд. Если этого не происходит, возможно, процессор вашего сервера находится под экстремальной нагрузкой, что вызывает замедление работы.

Спасибо, @itsbhanusharma.

Я выполнил команду ./launcher restart app и отслеживал нагрузку с помощью top; она значительно ниже 10%.

Думаю, мощности процессора должно хватить для обработки нагрузки:

$ cat /proc/cpuinfo  | grep 'name' | uniq
model name      : Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz
$ cat /proc/cpuinfo  | grep process | wc -l
4

Есть ли лучший способ отладить запуск контейнера?
Есть ли другие идеи?

Какие плагины установлены? Использует ли этот сервер SSD?

Я только что склонировал репозиторий и выполнил команды настройки, так что, наверное, там только плагины по умолчанию? Не уверен, где это проверить, но я точно ничего не добавлял.

Сервер не на SSD.

Привет @elopio

Можешь выложить свой файл «yml» без какой-либо конфиденциальной информации?

Конечно, вот ссылка:

Для Discourse требуется SSD; обычные вращающиеся диски не обеспечивают достаточного количества операций ввода-вывода в секунду (IOPS).

И это причина ошибки 502? Или без SSD сайт должен работать, но очень медленно?

Использование обычного жесткого диска вместо SSD не должно приводить к ошибке 502. Это действительно маловероятно, как следует из вашего вопроса, @elopio.

Вот небольшая заметка, которая может оказаться полезной:

На мой взгляд, лучшее решение — открыть несколько терминалов и запустить команду tail -f для обоих файлов логов: Rails и nginx, включая файлы ошибок и доступа. Затем попробуйте получить доступ к системе и убедитесь, что в момент появления ошибки 502 вы следите за последними записями в этих логах.

Знаете ли вы, где находятся эти файлы логов и как выполнять команды tail -f для них в терминале?


Примечание: ранее вы спрашивали:

Rails работает на порту 3000 внутри контейнера Docker, и этот порт не доступен извне контейнера. Вот почему вы не видите порт 3000 снаружи контейнера при выполнении netstat вне его.

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

Говоря по опыту, медленный ввод-вывод (IO) действительно может и приводит к тайм-аутам и ошибке 502.

IOPS на уровне SSD являются строгим требованием.

Ура! Просматривая логи Rails, я обнаружил, что лог Unicorn был огромным и сообщал об ошибках прав доступа. Я удалил rm -rf tmp/cache/bootsnap-compile-cache/, и теперь вижу экран с поздравлениями!!!

Спасибо, друзья. Я немного поэкспериментирую с этим, прежде чем решу перенести всё на сервер с SSD.

Пожалуйста, @elopio.

Рады, что вы нашли проблему в логах и смогли её решить. Отличная работа.

Желаем вам лёгкого пути вперёд!

Отлично, это работает блестяще. Я хочу показать, что мы делаем:

https://bunqueer.jaquerespeis.org/

Это миграция костариканского хакерспейса с Telegram на Discourse :slight_smile: Нам ещё предстоит сделать очень многое, но в этот раз я уверен, что нам точно удастся полностью отказаться от чата. Большое спасибо команде Discourse!