Как правильно настроить окружение для node.js?
2 и 3 - да, nginx использует практически всегда - и для SSL termination, и для load balancing, и для статики, и т.д.
4 - в github есть GitHub Actions, на них довольно просто сделать CI
Нашел как победить проверку на человечность Хабра.Привет!
Самый костыльный запуск сервера, это старт из под screen. Но если приложение при авто деплое сможет на глухо завесить прод, так что и данные из базы не достать. Будет много приятных минут.По поводу исходников на проде.
Это не хорошо. Может утечь что то лишнее. Собрать и залить результат. Сейчас пошла мода разрабатывать и собирать все в контейнерах. 
В ноде работает много зависимостей. Здоровья не хватит всё посмотреть. Стартуют с правами разработчика. Могут потырить контакты или секреты какие. 
Не хорошо. Поэтому запускаем все в своей песочнице. Секреты храним в vault
https://github.com/alexsuslov/vault-consul-docker2 Nginx отличная штука! 
Поможет:
- раскидать трафик как между процессами так между машинами 
- сертификаты подсунуть.
- ограничить доступ к админке по ip
- запаролить что то
и еще много чегоАвторизация 
- Регистрация
  процесс относительно редкий, данные пишем в базу
- Идинтификация
  это происходит на каждый запрос
  дергать на каждый чих базу не хорошо
JWT это шифрованный объект в заголовках http.
Сервер его сам делает и может прочитать.
Итого: мы заставляем пользователя таскать с собой некий паспорт в котором храним что нам нравится. Трафик немного растет, но не критично.
Полезная штука
Про эластик не помогу. Как то он мимо меня все время пробегает.
А поиск нужно делать используя 2 источника данных
1. поисковые фразы из описанийпосмотреть сколько слов в среднем набирает пользователь, нарезать описания на фразы
2. Собирать поисковые фразы пользователей, регион, время.
Делать какую то сумму этого. Подсовывать в авто комплит под инпутом.
Надеюсь понятно написал.
Удачи.