|
Всегда онлайн
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
|
|
Эффективный деплой Node.js приложения10.05.2020, 01:10. Показов 2867. Ответов 5
Метки нет (Все метки)
Всем привет. Есть Git репозиторий, в котором монолитное Node.js приложение (Express / MongoDB) и 5 отдельных фронтенд приложений (Vue проекты, отправляют запросы на Node.js сервер). Сайт растет и думаю что скоро прийдется заниматься мастшабированием, но есть вопросы как это делать правильно и эффективно.
Сейчас это все работает на одном VPS, одновременно запущен сервер через pm2, mongodb, redis и nginx, который проксирует API запросы и раздает статику. Деплой делается путем пуша комита на master, а на сервере есть скрипт который слушает вебхуки от репозитория и запускает pull и ребилд всего этого дела, но часто делается деплой вручную (git pull + build). Как сделать так чтобы с легкостью можно было деплоить все приложение на несколько серверов, с почти нулевым downtime-ом? Нашел рекомендации использовать Kubernetes + Docker, однако не до конца понимаю "прелесть" контейнеров и как их использовать на продакшене. Буду рад услышать советы/гайды как все это дело настроить. Хочу сделать пару важных замечаний, условия которых должны выполняться при том или ином подходе: 1. nginx должен быть обьязательно и с возможностью гибко настроить конфиги без пересборки контейнера, так как каждое из этих 5 отдельных фронтенд приложений работает на отдельном домене с разной конфигурацией. 2. Если нужно делать образ Docker, то я так понимаю нужно чтобы этот образ публиковался в какой-то реестр -, однако проект коммерческий и исходный код/ ресурсы/ конфиги публиковать нельзя. 3. Node.js приложение загружает файлы от пользователей в локальную папку - как это сделать с Docker контейнером, так и еще чтобы можно было легко ее бекапить / изменять / удалять файлы? 4. Пока что не стоит конечная цель "контейнерезировать" весь проект, а просто продумать эффективный деплой на несколько машин. Хостинг позволяет сохранить образ всего VPS и потом на основе его плодить сколько угодно серверов, однако это все равно будут машины которые требуют администрирования. Заранее спасибо за любую помощь.
0
|
|
| 10.05.2020, 01:10 | |
|
Ответы с готовыми решениями:
5
Архитектура node.js приложения
Создание Node.js приложения на MS Azure |
|
Coding is art
540 / 423 / 154
Регистрация: 04.09.2013
Сообщений: 1,066
|
|||||||||||
| 17.05.2020, 14:36 | |||||||||||
Сообщение было отмечено MrOnlineCoder как решение
Решение ... принцип нулевого downtime сводиться к тому, что вы поднимаете ваш новый сервер параллельно с уже использующимся и затем, когда он полностью поднят, подменяете старый на новый. тут куча проблем от того как отследить что сервер новый поднялся и правильно работает до как осуществить подмену с нулевым даунтаймом.. и решений тоже куча, как для разных серверов и разных контейнеров и т.п... Я бы сказал, что стоит найти "удобное время" или "приемлемый даунтайм" и от этого плясать.Замечу, что k8s я бы скорее стал использовать для реально больших и сложных проектов или если планируется в течении нескольких лет выйти на уровень нескольких тысяч обращений в секунду, хотя такое решение лучше делать когда оно конкретно нужно.
2
|
|||||||||||
|
Всегда онлайн
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
|
||
| 17.05.2020, 23:13 [ТС] | ||
|
muxahuk1214, спасибо за развернутый ответ, все таки дождался
![]() Рад буду еще получить уточнения по таким пунктам: 1. Докер это "маст-хев" в таком случае? Я понимаю что это отдельная легковесная среда для приложения, и пробовал с ним локально экспериментировать, перечитал не один гайд / документ относительно работы с ним, но уже стопорнулся на том этапе что мне для работы приложения нужен Redis + MongoDB, и в сети советуют засунуть их в отдельные контейнеры, с чем еще больше возни, всякие там Docker Compose... Т.е. мне проще запустить и настроить бд и редис ручками с полным контролем над ситуацией) 2. До полноценного горизонтального масштабирования еще далеко - начать можно пока с улучшением "железа", потом вынести бд на отдельный сервер с достаточным количеством рам и это решение думаю устроит еще на долгое время. Однако, если все таки дойдет до докупки серверов для самой node.js, то можно воспользоваться функционалом хостинга, создать "снапшот" настроенного сервера и расплодить таких серверов сколько нужно. Однако, в этом случае нужен хороший CI/CD, чтобы обновление сразу на всех сервера приходило. Посоветуйте подходящий набор инструментов для такой задачи - как уже говорил раньше, сейчас это реализовано самописным скриптом который слушает вебхуки от удаленного репозитория, однако сдается мне что такое решение не лучшее. Пробовал Jenkins, однако он прожорлив и настроить все до конца не получилось. Желательно чтобы была возможность отката на предыдущую версию.
0
|
||
|
Coding is art
540 / 423 / 154
Регистрация: 04.09.2013
Сообщений: 1,066
|
|||||||
| 18.05.2020, 01:02 | |||||||
|
По сути можно рассуждать о докере как об "отдельной виртуальной машине", ну т.е. каждый докер имедж это "своя OS" с тем, что ты накидаешь сверху - сервер или редис или монго... суть, если читать оф. доку, сводиться к тому, что они говорят что правильным паттерном является что бы каждый имедж делал только одну задачу (separation of consern). Крч. Докер файл это инструкция как собрать "виртуальную машину", какие библиотеки установить, какие файлы куда положить и какую программу запустить при старте. (поищи в сети примеры докер файла с комментами и должно стать понятнее.. COPY команда используется для копирования файлов) Лучше опишу что у нас есть на проекте и как я это настраивал: 1) Репозиторий, ветка мастер при обновлении посылает сигнал в bamboo. 2) Bamboo выкачивает последние изменения и ранит стадию билда. 3) В билде проверяется качество кода сначала, затем ранятся сканеры и т.п. и создаётся билд докер имеджа. Он сохраняется как артифакт данного билда. (docker build команда вызывается). Внутри докер файла мы делаем npm install, npm build и т.п... и скомпилированный код помещаем в определённую папку и говорим что бы докер запускал "node src/index.js" при его старте. 4) после того, как билд закончился он тригеррит deploy на dev (тут можно ставить, можно не ставить автодеплой, у нас так, что бы не забывать) 5) [нужно заметить, что это шаг отдельный и настраивается отдельно от билда] в деплое мы берём артифакт который был создан в билде и сохраняем его в приватном репозитории 6) далее мы подключаемся к кубернетису, делаем замену версии "сохранённого в репозитории имеджа" и раним команду что бы обновить это всё дело (kubectl apply -k kube/server/dev) это что касается k8s, если же его нет, то на пункте 6 мы логинимся к серверу через ssh и вызываем команды что бы остановить старый имедж, и запустить новый (если не ошибаюсь типо docker stop #id и docker start #image_name) вообщем запускаем нужный имедж. Если нам нужно откатиться на какую-то из старых версий мы в бамбу делаем депрой старой версии, т.к. артифакт храниться в бамбу, то стадия депрлоя просто повторяется для предыдущего билда. 1) запускать докер имедж в нетворке доступном из вне (0.0.0.0) т.е. обращаясь на прямую из вне к серверу на определённый порт мы будем попадать на докер имедж на прямую (такой способ не рекомендуют) 2) запускать имедж в локалхосте (127.0.0.1) и тогда к нему доступ из вне закрыт. И что бы был доступ мы поднимаем на хосте nginx с нашими сертефикатами и ssh и т.п., а затем используя reverse proxy проксируем запросы на адрес докер имеджа (тут же делается и балансировка, т.е. запускаем имедж на разных портах и через ngix лодбалансер на эти 2 порта). Можно ли и это как-то автоматизировать и т.п. - скорее всего да, но у меня опыта администратора или девопса не так много, что бы знать как это сделать... В кубернетисе там есть "модуль" ingress в котором это настраивается и проксируется и т.п... Честно скажу, что разобраться в k8s сложно, я примерно 2 недели потратил что бы понять как и что к чему и как это правильно работает и то не со всем разобрался ещё (т.к. менять конфиги не часто надо)... и да, в k8s лучше не лезть без понимания docker... ЗЫ: когда я рассказывал про бамбу - остальные тулы работают +- по такому же принципу jenkinss, gitlab ci/cd, azure и т.п...
1
|
|||||||
|
Всегда онлайн
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
|
|||
| 18.05.2020, 01:52 [ТС] | |||
|
muxahuk1214, спасибо еще раз!
Не по теме:
И в общем, что делать если автоматизировать деплой нужно "здесь и сейчас" сделать рядовому бекенд инженеру, без возможности потратить год на изучение DevOps, а поиск/найм дополнительного персонала требует больше времени чем есть в наличии?
0
|
|||
|
Coding is art
540 / 423 / 154
Регистрация: 04.09.2013
Сообщений: 1,066
|
||||
| 19.05.2020, 02:08 | ||||
|
За вас решить, что вам делать я не могу...
1
|
||||
| 19.05.2020, 02:08 | |
|
Помогаю со студенческими работами здесь
6
Запуск приложения через NODE.js Развёртывание Node.js приложения на удалённом хостинге Серверная часть на node.js angular приложения Деплой многопроектного приложения Деплой JavaEE приложения на OpenShift Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|