Как да настроите приложение Koa.js Node на Ubuntu 16.04 LTS

В този урок ще се научим как да настроим уеб приложение Koa.js за производство, използвайки Node.js. Също така ще свържем примерен домейн с обратен прокси, използвайки Apache, и ще научим как да го управляваме с подходящ мениджър на процеси. Без повече приказки, нека да започнем.

Кратко описание на Node.js, Koa.js и Apache

Node.js е бърза, междуплатформена JavaScript рамка, базирана на V8 двигателя на Chrome. Използва се както в настолни, така и в сървърни приложения и е известен със своята еднонишкова обработка на цикъл на събития. Node.js разполага с пакетен регистър, наречен Node Package Manager (NPM), който хоства над половин милион пакета. NPM пакетите (или модулите) са основният гръбнак на Node.js, тъй като те са код, управляван от общността, който може да бъде полезен във вашето приложение Node.js. В нашето приложение Koa.js Node.js е основната част от неговата функция.

Koa.js е минималистична уеб рамка, изградена на платформата Node.js. Създаден от същия екип зад популярната рамка Express.js, нейната цел е допълнително да минимизира вече минималистичната рамка Express.js, като изключи междинния софтуер от нейното ядро. Основна характеристика на Koa.js е фактът, че няма обратни извиквания. Koa.js е изграден върху ES6-базирани генератори и функции на ES6, като Promises.

Apache е популярен уеб сървър с отворен код, използван като много основна отправна точка за уеб сървъри. В този урок ще използваме Apache като обратен прокси, което ще ни позволи да свържем нашето приложение с примерен домейн. Ако нямате домейн, този урок все още ще работи за вас, с единствената разлика, че уебсайтът ще работи на вашия VPS IP, вместо на домейн.

Настройка на Node.js

Както при всяка рамка на Node.js, ще трябва да инсталирате Node.js на вашия VPS. В името на този урок ще предположа, че вече имате инсталиран Node.js във вашата система. Ако не, можете просто да следвате инструкциите тук .

Настройване на нашата директория с приложения

Ще трябва да създадем папка, която ще съдържа основните файлове на нашето приложение.

mkdir site

Чувствайте се свободни да замените siteс всяко друго име, което искате за директорията. След това ще трябва да инициализираме нашия пакет Node.js файл. Променете в директорията, която току-що сте създали, стартирайте npm initи попълнете подканите. В крайна сметка трябва да изглежда така:

{
  "name": "site",
  "version": "1.0.0",
  "description": "Koa.js Site",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "yourname",
  "license": "ISC"
}

Инсталиране на Koa.js

След като вече сме настроили нашата директория, можем да продължим да инсталираме Koa.js. В текущата работна директория /site, въведете следното.

npm install koa

Това ще изтегли модула Koa.js от NPM и ще го инсталира в нашата директория на проекти за бъдеща употреба. След това ще създадем нашия примерен файл на приложението, който ще съдържа нашия код на приложението. За да направите това, създайте index.jsфайл.

nano index.js

След като влезете във файла, създайте примерно приложение.

const Koa = require('koa');
const app = new Koa();

app.use(async ctx => {
     ctx.body = 'Hello World';
 });

app.listen(3000);
console.log('Website is live!')

Запазете и затворете файла. CTRL+ X.

Ще искаме да сме сигурни, че нашето приложение работи правилно. За да го стартирате, стартирайте node index.jsи ще видите Website is liveв конзолата.

Инсталиране на Apache

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

sudo apt install -y libapache2-mod-proxy-html libxml2-dev

За да използваме функцията за обратен прокси, открита в Apache, ще трябва да активираме необходимите модули.

a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod proxy_balancer
a2enmod proxy_connect
a2enmod proxy_html

Някои от тези модули може да са вече активирани, но винаги е добре да ги проверите отново.

Сега трябва да редактираме конфигурационния файл по подразбиране за Apache.

sudo nano /etc/apache2/sites-enabled/000-default.conf

Тук ще трябва да добавим блок за нашето приложение.

<VirtualHost *:*>
    ProxyPreserveHost On
    ProxyPass / http://0.0.0.0:3000/
    ProxyPassReverse / http://0.0.0.0:3000

    ServerName localhost
</VirtualHost>

Запазете файла, CTRL+ X.

Може да забележите, че използваме порт 3000като порт за нашия ProxyPassи ProxyPassReverseIP. Тъй като това е същият порт, на който изпълняваме нашето приложение Koa.js, е наложително да въведете правилния порт.

След като промените са на място, ще трябва да рестартираме Apache и да стартираме отново нашето приложение Koa.js.

sudo systemctl restart apache2

Това ще гарантира, че нашият конфигурационен файл е активен и готов за работа, когато стартираме нашето приложение Koa.js. След като Apache бъде рестартиран, върнете се обратно до директорията на вашия сайт и стартирайте приложението Koa.js, както направихме преди. От вашия уеб браузър отидете до http://yourdomainили http://yourip:и ще видите „Hello World“.

Управление на нашето приложение със systemd

Сега, когато покрихме основите на създаването на примерно приложение Koa.js, осъзнаваме, че в производствена среда стартирането на приложението, както сме сега, е непрактично. Мениджър на процеси определено е изискване. Това е мястото, където systemd влиза в игра. С прости думи, systemd се състои от софтуер, който предоставя градивни елементи за Linux система. Подобно на "init", той предоставя система за управление на потребителски процеси след стартиране на системата. В случай на нашето приложение, systemd ни позволява автоматично да стартираме нашия уебсайт след рестартиране на системата, в случай че има събитие, което нарушава времето на работа на системата. Той също така предоставя набор от инструменти, които могат да бъдат полезни при управлението на нашето приложение. Най-хубавото е фактът, че е вграден в Ubuntu 16.04 LTS, така че не е необходимо да инсталираме допълнителен софтуер.

Създайте systemd услуга

Всичко, от което се нуждаем, за да стартираме нашето приложение, ще се съдържа във файл, наречен service. Той съдържа подробности за нашето приложение, като неговото име, директория, среда и др. За да създадете нашия системен файл, отворете текстов редактор.

sudo nano /lib/systemd/system/site.service

Редактирайте и запазете файла по този начин.

[Unit]
Description=desc here
Documentation=https://example.com
After=network.target

[Service]
Environment=NODE_PORT=3000
Type=simple
User=youruser
ExecStart=/usr/bin/node /home/[youruser]/site/index.js
Restart=on-failure

[Install]
WantedBy=multi-user.target

Заменете youruserс потребителското име на вашия сървър. Ето кратък преглед на важните полета:

  • After - Това информира systemd да изчака, докато мрежовият интерфейс е готов, преди да стартира нашето приложение.
  • Environment- Тук можем да посочим променливи на средата за нашето приложение. Нашият порт Node.js е един от тях.
  • Type - Това информира systemd, че нашето приложение може просто да бъде стартирано, без разклоняване на потребителски привилегии и други подобни.
  • User- Това казва на systemd, че искаме да стартираме приложението под нашия потребителски акаунт, което е препоръчително. Изпълнението на приложения като root потребител може да доведе до много компромиси със сигурността.
  • ExecStart - По същество командата, която systemd ще изпълнява, за да стартира нашето приложение, подобно на начина, по който го стартирахме ръчно преди.
  • Restart- Указва на systemd при какви условия да рестартира нашето приложение. В този случай искаме нашия уебсайт да бъде рестартиран в случай на грешка.

Стартирайте услугата systemd

Вече сме готови да стартираме нашата услуга systemd.

sudo systemctl daemon-reload

Това е необходимо всеки път, когато файлът на услугата systemd се промени, за да може systemd да регистрира всички нови направени промени.

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

sudo systemctl start site

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

Ключови функции за управление на systemd

  • stop - Спира приложението напълно.
  • restart - Спира приложението и го стартира отново при нов процес.
  • enable - Указва на systemd да стартира приложението всеки път, когато стартирате компютъра си.
  • status - Показва информация за текущо работещото приложение, като време на работа, състояние на приложението и др.

За да използвате някоя от тези функции, изпълнете следното.

systemctl <function> site

Заключение

Успешно настроихме приложение Koa.js и се научихме как да го обръщаме прокси, както и да го управляваме със systemd. Вече сте готови да разширите приложението си и да надградите този пример. Ако искате да научите повече за Koa.js и още неща, с които можете да правите, посетете техния уебсайт за още полезна информация. В допълнение към това, ако искате да научите повече за мениджъра на процеси на systemd, прочетете документацията за него тук . И накрая, ако искате да научите повече за обратния прокси на Apache, не се колебайте да ги проверите тук .

Оставете коментар

Възходът на машините: Реални приложения на AI

Възходът на машините: Реални приложения на AI

Изкуственият интелект не е в бъдещето, тук е точно в настоящето. В този блог Прочетете как приложенията за изкуствен интелект са повлияли на различни сектори.

DDOS атаки: кратък преглед

DDOS атаки: кратък преглед

Вие също сте жертва на DDOS атаки и сте объркани относно методите за превенция? Прочетете тази статия, за да разрешите вашите запитвания.

Чудили ли сте се как хакерите печелят пари?

Чудили ли сте се как хакерите печелят пари?

Може би сте чували, че хакерите печелят много пари, но чудили ли сте се някога как печелят такива пари? нека обсъдим.

Революционни изобретения на Google, които ще улеснят живота ви.

Революционни изобретения на Google, които ще улеснят живота ви.

Искате ли да видите революционни изобретения на Google и как тези изобретения промениха живота на всяко човешко същество днес? След това прочетете в блога, за да видите изобретенията на Google.

Friday Essential: Какво се случи с колите, задвижвани от изкуствен интелект?

Friday Essential: Какво се случи с колите, задвижвани от изкуствен интелект?

Концепцията за самоуправляващи се автомобили да тръгват по пътищата с помощта на изкуствен интелект е мечта, която имаме от известно време. Но въпреки няколкото обещания, те не се виждат никъде. Прочетете този блог, за да научите повече…

Технологична сингулярност: далечно бъдеще на човешката цивилизация?

Технологична сингулярност: далечно бъдеще на човешката цивилизация?

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

Функционалности на референтните архитектурни слоеве за големи данни

Функционалности на референтните архитектурни слоеве за големи данни

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

Еволюция на съхранението на данни – инфографика

Еволюция на съхранението на данни – инфографика

Методите за съхранение на данните може да се развиват от раждането на данните. Този блог обхваща развитието на съхранението на данни на базата на инфографика.

6 невероятни предимства от наличието на интелигентни домашни устройства в живота ни

6 невероятни предимства от наличието на интелигентни домашни устройства в живота ни

В този дигитално задвижван свят устройствата за интелигентен дом се превърнаха в решаваща част от живота. Ето няколко невероятни предимства на интелигентните домашни устройства за това как те правят живота ни струващ и по-опростен.

Актуализацията на допълнението на macOS Catalina 10.15.4 причинява повече проблеми, отколкото решава

Актуализацията на допълнението на macOS Catalina 10.15.4 причинява повече проблеми, отколкото решава

Наскоро Apple пусна macOS Catalina 10.15.4 допълнителна актуализация за отстраняване на проблеми, но изглежда, че актуализацията причинява повече проблеми, водещи до блокиране на mac машини. Прочетете тази статия, за да научите повече