Как да стартирате Node.js и Next.js приложения на VPS

Как да стартирате Node.js и Next.js приложения на VPS

Можете да стартирате Node.js приложение на VPS сървъра, който хоства сайта ви, без да плащате за отделна машина. Облачният VPS ви дава гарантирани ресурси от CPU, RAM и дисково пространство, а Node.js или Next.js приложението е просто още един процес, който ги използва.

В облачните VPS планове на NS1 приложението се стартира от графичния интерфейс на NodeJS Manager в SPanel. Избирате домейн и качвате кода, а SPanel инсталира нужните елементи, насочва трафика към приложението през уеб сървъра и поддържа процеса активен с pm2. Важни са две условия: приложението споделя ресурсите на сървъра с вашите сайтове и на всеки домейн или поддомейн работи само едно приложение.

Ръководството е за основатели на стартъпи и малки SaaS екипи, които поддържат сайт и приложение, както и за агенции, които хостват приложения на клиенти.

Какво е нужно на Node.js приложението?

Node.js приложението се нуждае от пет основни неща, за да е достъпно за потребителите:

  1. Среда за изпълнение (runtime). Самият Node.js, инсталиран на сървъра, изпълнява JavaScript кода ви извън браузъра.
  2. Мениджър на процеси. Той стартира приложението, поддържа го активно във фонов режим и го рестартира след срив. pm2 е един от най-използваните мениджъри за Node.js.
  3. Порт. Локалният мрежови порт, например 3000, е мястото, където приложението приема заявки. Всяко приложение на сървъра се нуждае от собствен порт.
  4. Обратно прокси (reverse proxy). Уеб сървър като Apache или Nginx приема публичния трафик и го препраща към порта на приложението. Документацията на Next.js препоръчва обратно прокси пред самостоятелно хостван Next.js сървър (на английски), защото проксито обработва невалидните заявки, бавните връзки и ограниченията за размера на заявките, преди те да стигнат до приложението.
  5. SSL сертификат. Сертификатът криптира трафика, така че браузърите да зареждат приложението през HTTPS.

Средата за изпълнение е лесната част. Останалите четири изисквания отнемат повечето време за настройка на самостоятелно управляван сървър, защото всяко се конфигурира отделно и може да спре да работи независимо от другите.

На сървър без контролен панел ще трябва сами да регистрирате приложението в pm2 или като systemd услуга, да намерите свободен порт, да напишете правилата за проксиране в уеб сървъра и да подновявате сертификатите. SPanel поема тези четири стъпки, когато стартирате приложението през NodeJS Manager. Всички апликации работят с версията на Node.js, инсталирана на сървъра. Ако вашето приложение изисква конкретна версия, екипът ни по поддръжка ще ви каже как да процедирате.

Как да стартирате Node.js приложение на VPS чрез SPanel?

NodeJS Manager е инструмент в потребителския интерфейс на SPanel (User Interface), който стартира Node.js и Next.js приложения, задава порт на всяко от тях, насочва трафика към него през уеб сървъра и го поддържа активно с pm2. Стартирането на Node.js или Next.js приложение през него става в седем стъпки. NodeJS Manager е част от SPanel, контролния панел, който разработваме и използваме във всички наши услуги. SPanel работи и на самостоятелно управляваните Cloud VPS сървъри на NS1, така че стъпките са едни и същи, независимо дали ние управляваме сървъра, или вие.

За да стартирате приложение:

  1. Качете кода. Копирайте проекта в папка в домашната си директория чрез File Manager на SPanel или FTP клиент. Дръжте я извън public_html, за да не могат посетителите да изтеглят изходния ви код или файла .env през сайта. Не е нужно да качвате node_modules, защото SPanel изпълнява npm install при стартирането.
  2. Отворете NodeJS Manager. В потребителския интерфейс на SPanel кликнете NodeJS Manager, а след това Deploy a New App.
  3. Изберете типа приложение. Изберете Custom за собствено Node.js или Next.js приложение. Другата опция, n8n Automation, инсталира n8n за автоматизация на работни процеси.
  4. Задайте адреса на приложението. В Application URL изберете домейна или поддомейна от падащото меню. Попълнете Folder Name само ако приложението трябва да работи в папка, например example.com/api.
  5. Посочете приложението. Кликнете Browse и изберете папката на проекта или .js файла, който стартира приложение от един файл.
  6. Оставете порта на Automatic. SPanel задава свободен порт в диапазона 3000–3200. Кликнете иконата с молив и въведете порт само ако приложението ви е настроено да слуша на конкретен порт.
  7. Кликнете Deploy. Приложението се появява в списъка на NodeJS Manager с порта, адреса и статус Online.
Как да стартирате Node.js и Next.js приложения на VPS, Как да стартирате Node.js приложение на VPS чрез SPanel?
Форма за стартиране на Node.js приложение в SPanel с порт, зададен на Automatic

Единственото истинско решение в процеса е къде да работи приложението. Всичко останало SPanel определя по файловете ви.

Какво прави SPanel с файловете ви?

SPanel разпознава типа приложение по файловете, които посочите, и изпълнява съответните стъпки. Таблицата показва какво се случва при четирите типа проекти, които NodeJS Manager разпознава:

Посочвате на SPanelКакво прави SPanel
Папка с Next.js проектИзпълнява npm install, създава продукционната версия и я стартира с next start на зададения порт
Папка с файл package.jsonИзпълнява npm install и стартира приложението със скрипта му npm run start
Единичен .js файлСъздава файл app.yml до скрипта и стартира скрипта с Node.js
Папка със собствен app.yml или app.jsonИзползва вашата конфигурация без промени

При Next.js приложение не е нужно да пишете команда за стартиране. SPanel променя скрипта за стартиране на проекта на next start -p <зададен порт> -H localhost, така че приложението слуша само на самия сървър и достига до посетителите през уеб сървъра пред него.

SPanel стартира всяко приложение с NODE_ENV със стойност production и препраща HTTPS посещенията с хедър X-Forwarded-Proto: https. Платформите, които проверяват дали връзката е защитена, например Express с включена настройка trust proxy, четат този хедър и третират връзката като защитена с HTTPS.

Как да обновите вече стартирано приложение?

Обновяването на стартирано Node.js приложение често е съвсем лесно: качвате новия код и кликвате Restart в менюто Actions на приложението. Това е достатъчно, когато ъпдейтът променя само вашия код и не добавя или обновява пакетите, от които зависи приложението.

По-големите ъпдейти изискват една или две допълнителни стъпки, които изпълнявате през SSH в папката на приложението, преди да го рестартирате:

  • Инсталиране на новите пакети. Когато ъпдейтът добавя или променя пакетите, от които зависи приложението, сървърът трябва да ги изтегли, преди новият код да може да работи.
  • Нов билд на Next.js приложението. Next.js приложението зарежда продукционната версия, създадена при стартирането му, затова всяка промяна в кода изисква нов билд, преди посетителите да я видят.

Ако промяната не се вижда след рестарт, обикновено липсва една от тези две стъпки. Ако кодът ви е в Git хранилище, Git Version Control в SPanel може първо да го изтегли в папката на приложението.

Какво се случва, когато Node.js приложението ви се срине?

Сринато Node.js приложение в SPanel се рестартира автоматично, защото SPanel изпълнява всяка апликация от NodeJS Manager чрез pm2. Стратегиите за рестартиране на pm2 (на английски) рестартират приложението, когато то спре неочаквано. Така еднократна грешка, например необработено изключение при рядка заявка, струва на приложението един рестарт, а не дълго прекъсване.

Ако приложението изобщо не успее да стартира, посетителите виждат страница с грешка 503 с текста „The application failed to start“ и препратка към папката с логове на pm2. Пътят в това съобщение е общ пример, затова най-бързият начин да откриете причината е View Logs в менюто Actions на приложението.

Прозорецът View Logs се отваря в раздела Output log, където е всичко, което приложението извежда, с час на всеки ред. До него е разделът Error log с грешките и stack trace. И двата раздела имат поле за търсене и бутон Reload, така че можете да следите новите редове, след като отстраните проблема и рестартирате приложението.

Как да стартирате Node.js и Next.js приложения на VPS, Какво се случва, когато Node.js приложението ви се срине?
Логове на Node.js приложение в прозореца View Logs на SPanel при стартиране на Next.js приложение

Три проверки покриват обичайните причини за неуспешно стартиране:

  1. Първо прочетете Error log. Липсваща зависимост или синтактична грешка обикновено се вижда там като последния stack trace.
  2. Проверете порта. Ако приложението ви е настроено за конкретен порт, портът в списъка на NodeJS Manager трябва да съвпада с него. Премахнете приложението с Undeploy и го стартирайте отново, като въведете този порт в полето Port.
  3. Проверете командата за стартиране. При папка с проект във package.json трябва да има скрипт start, който стартира приложението.

Започнете с Error log, защото там обикновено е посочен проблемът. Когато статусът отново е Online, посетителите имат достъп до приложението.

Списъкът на NodeJS Manager показва и стойностите Running Since, CPU и Memory за всяко приложение. Ако времето в Running Since постоянно се нулира, вероятно се налага на pm2 да рестартира приложение, което спира многократно.

Как да стартирате Node.js и Next.js приложения на VPS, Какво се случва, когато Node.js приложението ви се срине? 2
Контроли за възстановяване на Node.js приложение след срив в NodeJS Manager на SPanel с отворено меню Actions

Можете ли да стартирате няколко Node.js приложения на един сървър?

Да. На един облачен VPS на NS1 могат да работят няколко Node.js приложения, по едно на домейн или поддомейн. SPanel позволява само едно приложение от NodeJS Manager на всеки домейн или поддомейн, затова обичайната схема дава собствен поддомейн на всяко приложение. Таблицата показва тази схема за SaaS продукт с маркетингов сайт, потребителски панел и API:

АдресКакво работи тамКак се обслужва
example.comМаркетингов сайт, например WordPressФайлове от public_html, както обикновено
app.example.comПотребителски панел на Next.jsПриложение в NodeJS Manager със собствен порт
api.example.comNode.js APIПриложение в NodeJS Manager със собствен порт

И трите адреса работят на един и същ сървър с една месечна сметка, а всяко приложение има собствен порт, процес, логове и HTTPS адрес.

Приложението може да работи и в папка, например example.com/api, докато сайтът продължава да се зарежда от основния домейн. SPanel препраща заявките към приложението без префикса на папката, така че заявка към example.com/api/users стига до приложението като /users. Това е удобно за API. Next.js приложението работи по-добре на поддомейн, защото Next.js изгражда линковете към страниците и ресурсите си от началото на адреса.

За агенциите същата схема работи за всеки клиент: всяко клиентско приложение получава собствен домейн или поддомейн, а бутонът Undeploy Selected премахва няколко приложения наведнъж, когато проектът приключи. Всички приложения споделят CPU и RAM ресурсите на VPS с вашите сайтове, а колоните CPU и Memory в NodeJS Manager показват колко точно използва всяко от тях. Тези стойности ви подсказват кога е време за по-мощен сървър.

Какво управлявате от един панел?

SPanel събира сайтовете и Node.js приложенията ви на едно място, така че с един вход управлявате всичко:

  • WordPress сайта в WordPress Manager на SPanel, с ъпдейти, тестова среда и бекъпи за всяка инсталация.
  • Node.js и Next.js приложенията в NodeJS Manager, с порта, статуса, CPU и паметта на всяко приложение в един списък.
  • Логовете на всяко приложение във View Logs, с отделни раздели Output log и Error log.
  • Файловете и на двете във File Manager, от темата на WordPress до кода на приложението.

От четирите списъкът в NodeJS Manager е мястото, което да проверите първо, защото показва статуса и ресурсите на всички приложения на един екран.

Кога VPS на фиксирана цена е по-подходящ от платформа с плащане според използването?

VPS на фиксирана цена е по-подходящ, когато трафикът ви е стабилен, поддържате няколко приложения или сайта заедно и искате да знаете месечната сметка предварително. Платформа с плащане според използването е по-подходяща, когато трафикът е непредвидим или изобщо не искате да се занимавате със сървъри. Таблицата сравнява двата модела на плащане в пет ситуации:

СитуацияОблачен VPS на фиксирана ценаПлатформа с плащане според използването
Стабилен, предвидим трафикЕдна и съща сметка всеки месецСметката зависи от заявките, минутите за билд и трафика
Кратки, непредвидими пикове в трафикаКапацитетът зависи от CPU и RAM на плана; мащабирате предварителноМащабира се според заявките, а пикът се отразява в сметката
Сайт, приложение и API заедноЕдин сървър и една сметкаЧесто отделни услуги, всяка с отделно таксуване
Фонови задачи и дълго работещи процесиРаботят до приложението на същия сървърЗависят от ограниченията и цените на платформата
Администриране на сървъраОт нас при управляваните планове, от вас при самостоятелно управляванитеОт платформата

Ако повечето от ситуациите ви попадат в средната колона, VPS е по-предвидимата платформа за приложението ви. Ако трафикът ви идва на резки, непредвидими пикове, плащането според заявките може да си струва цената.

Самостоятелно управляваният VPS запазва фиксираната сметка, но ъпдейтите и сигурността остават ваша грижа. При управляваните облачни VPS планове на NS1 екипът ни поема ъпдейтите, сигурността и мониторинга на сървъра, а поддръжката ни помага, когато стартирането на приложението не мине по план. Така вашият екип може да се фокусира върху приложението.

Сайтът и приложението ви на един сървър

Въпросът, с който започват повечето екипи, дали приложението може да работи до сайта на фиксирана цена, има прост отговор: да, по едно приложение на домейн или поддомейн, стартирано от SPanel и поддържано активно от pm2. Ако плащате за отделна платформа за приложения освен хостинга, управляваният облачен VPS ви позволява да поддържате и двете на един сървър с една сметка.

Искате ли да стартирате приложението и сайта си на един сървър? Разгледайте управляваните VPS планове на NS1.

Често задавани въпроси

В: Коя версия на Node.js използва SPanel?

О: Версията, инсталирана на сървъра. SPanel стартира всички приложения от NodeJS Manager с нея и версията не може да се избира за всяко приложение поотделно. Ако приложението ви изисква конкретна версия, екипът ни по поддръжка ще ви каже коя версия има сървърът ви, преди да стартирате приложението.

В: Получава ли Node.js приложението в SPanel HTTPS автоматично?

О: Да. Приложение, стартирано през NodeJS Manager, се зарежда през HTTPS чрез SSL сертификата на домейна или поддомейна, на който работи. Уеб сървърът поема криптирането и съобщава за него на приложението с хедър X-Forwarded-Proto: https.

В: Нужен ли е SSH достъп, за да стартирате Node.js приложение в SPanel?

О: За ежедневните задачи не. Стартирането, рестартирането, спирането и проверката на логовете на Node.js приложение стават в NodeJS Manager на SPanel. SSH ви трябва само при по-големи ъпдейти, когато сървърът трябва да инсталира нови пакети или да създаде нов билд на Next.js приложение.

В: Каква е разликата между Stop и Undeploy?

О: Stop спира приложението, но го оставя в списъка на NodeJS Manager, така че можете да го стартирате отново със същите настройки. Undeploy премахва приложението от списъка и освобождава домейна или поддомейна му за друго приложение.

В: Как да разберете кой порт използва приложението ви?

О: От колоната Port в списъка на NodeJS Manager, където е портът, който SPanel е задал на всяко приложение. При Next.js приложение същото число се вижда в командата за стартиране, най-горе в Output log във View Logs.

Борислав Тонев

Автор

Борислав е копирайтър с набито око за детайла и увлечение по информационните технологии, което датира от детството му. През годините, той е писал за огромно разнообразие от най-различни теми, но признава, че най-вълнуващото предизвикателство за него е да разбере как работи модерният онлайн свят и да предаде знанията си на читателите.

Напишете коментар

Задължително поле*