vaflya
@vaflya
Ничего личного, это всего лишь хобби.

Как правильно настроить окружение для node.js?

Ребят, всем привет! В процессе запуска проекта на prod появилась каша в голове и множество вопросов. Прошу направить меня в нужную сторону =]

Стэк слкдующий
backend (API): node.js, typescript, postgresql
frontend (SPA): vue
сборщик: webpack
сервер: vps на reg.ru (ubuntu 16.x)

Написание приложения и сервера поддалось) А вот правильно развернуть уже не под силу (развернул но костыльно). В процессе чтения нашел различные "очень важные вещи"

1. Ситуация:
PM2 - как я понял обязательно нужно поднять пару инстансов моего сервера (по инстансу на яжро). Проблема в том, что я пишу код под ts-node и так же на проде. PM2 как я понял не работает с typescript и нужно делать компиляцию в js.

Вопрос:
На сервер мне закидывать весь код из репозитория и компилировать уже на серваке или скомпилировать на локальной машине и закинуть только билд? Если билд, то чем лучше закидывать билд на сервер?

2. Ситуация:
В одном из видео услышал, что нужно делать реверс прокси через nginx, дабы не допустить выполнения пользовательского js кода на сервере. И для раздачи статики.
Вопрос: Это правда?

3. Ситуация:
Мне нужно добавить SSL сертификат.
Вопрос:
Как я понимаю, для этого мне тоже нужен nginx

4. Ситуация:
Так как разработка приложения идет кусками, а не планово по фичам, то часто делаю git pull на сервере. Видел в действии gitlab CI и heroku авто деплой.

Вопрос: Я могу сделать авто деплой на сервере из репозитория github? При этом для окружения я использую docker-compose

5. Ситуация:
На сайте реализована авторизация через сессии.

Вопрос: Имеет ли смысл хранить их в Redis если у меня уже есть Postgress (об их разнице знаю)? Так же хочу данную штуку для опыта.

6. Ситуация:
В БД много описаний к фильмам, хочу использовать Elasticsearch.
Вопрос:
Имеет ли смысл использовать Эластик для небольших текстовых полей с описанием.

ps: Какие вещи еще могут мне пригодиться помимо swagger и sentry? Или может хорошие альтернативы про которые стоит почитать?
  • Вопрос задан
  • 275 просмотров
Пригласить эксперта
Ответы на вопрос 2
@vitaly_il1
DevOps Consulting
2 и 3 - да, nginx использует практически всегда - и для SSL termination, и для load balancing, и для статики, и т.д.

4 - в github есть GitHub Actions, на них довольно просто сделать CI
Ответ написан
Комментировать
@AlexSuslov
Нашел как победить проверку на человечность Хабра.

Привет!
Самый костыльный запуск сервера, это старт из под screen. Но если приложение при авто деплое сможет на глухо завесить прод, так что и данные из базы не достать. Будет много приятных минут.

По поводу исходников на проде.
Это не хорошо. Может утечь что то лишнее. Собрать и залить результат.

Сейчас пошла мода разрабатывать и собирать все в контейнерах.
В ноде работает много зависимостей. Здоровья не хватит всё посмотреть. Стартуют с правами разработчика. Могут потырить контакты или секреты какие.
Не хорошо. Поэтому запускаем все в своей песочнице. Секреты храним в vault
https://github.com/alexsuslov/vault-consul-docker

2 Nginx отличная штука!

Поможет:
- раскидать трафик как между процессами так между машинами
- сертификаты подсунуть.
- ограничить доступ к админке по ip
- запаролить что то
и еще много чего

Авторизация
- Регистрация
процесс относительно редкий, данные пишем в базу
- Идинтификация
это происходит на каждый запрос
дергать на каждый чих базу не хорошо

JWT это шифрованный объект в заголовках http.
Сервер его сам делает и может прочитать.
Итого: мы заставляем пользователя таскать с собой некий паспорт в котором храним что нам нравится. Трафик немного растет, но не критично.
Полезная штука

Про эластик не помогу. Как то он мимо меня все время пробегает.

А поиск нужно делать используя 2 источника данных
1. поисковые фразы из описаний
посмотреть сколько слов в среднем набирает пользователь, нарезать описания на фразы

2. Собирать поисковые фразы пользователей, регион, время.

Делать какую то сумму этого. Подсовывать в авто комплит под инпутом.
Надеюсь понятно написал.
Удачи.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы