× К оглавлению На главную Об авторе

Дата и время публикации:

1. Что такое NODE.js


Реализует платформу JavaScript (или JS) в качестве надстройки высокого уровня и предназначен для общего программирования сетевых приложений за счет использования моделей неблокирующего ввода-вывода и обработки событий, делая их легкими и шустрыми при интенсивном обмене данных в режиме реального времени на распределенных устройствах.

Поэтому ниже, в основном пойдет речь о том, как настроить рабочее окружение NODE.js на дистрибутиве Debian GNU/Linux, начиная с 7-ой версии и выше.

2. Что нужно установить?

2.1 Пакет nodejs

Содержит описанную выше NODE.js и идет в комплекте с несколькими полезными библиотеками предназначенных для решения северных задач, таких как обработки событий, реализацию доступа к устройству стандартного ввода-вывода, подключения модули, запуск таймеры, использование мультизадачности и технологий POSIX, HTTP, TCP, DNS и т.п., связанные с обработки данных запросов WEB. Таким образом, данный пакет содержит надстройку верхнего уровня JS или движок V8, используемый браузером WEB Chromium.

2.2 Корректная установка пакета nodejs

Конечно можно просто выполнить apt-get install nodejs, но тогда не будут учтены последние обновления безопасности. Поэтому, для установки рекомендованного репозитария APT, содержащий Node.js, который соответсвующим образом поддерживается и обновляется, нужно обновить связку ключей репозитария APT связанных с ключом PGP наиболее быстро следующей командой, как показано в листинге 1а.

Листинг 1а

$ sudo curl -sL https://deb.nodesource.com/setup_7.x | bash - 

Нормальным завершением работы скрипта должно стать сообщение, приведенное в листинге 1б.

Листинг 1б

          
## Run `apt-get install nodejs` (as root) to install Node.js v7.x and npm
       

которая, если дословно: "для установки Node.js v7.x и npm выполните следующую команду", приведенную в листинге 2

Листинг 2

$ sudo apt-get install -y nodejs

Для проверки работоспособности Node.js нужно получить версию серверной части рабочего окружения JS, как показано в листинге 3.

Листинг 3

$ node -v
v7.6.0

На этом установка завершена и Node.js готов к работе

2.3 Обновление менеджера пакетов JS npm

Наконец мы дошли до финальной стадии, когда остается обновить npm до последней версии, являющейся наиболее свежей чем установленной вместе с пакетом nodejs ранее. Для чего выполните следующую команду, как показано в листинге 4.

$ sudo npm install npm --global

3. Как использовать

Для этого нужно написать модуль и с помощью systemd запустить его. Пример модуля server.js приводится в листинге 4.

Листинг 4

const http = require('http');

const hostname = '0.0.0.0'; // listen on all ports
const port = 1337;

http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World\n');
}).listen(port, hostname, () => {
  console.log('Server running at http://'+hostname+':'+port+'/');
});

Сохранием его в /opt/nodeserver/server.js и проверим, как показано в листинге 5

Листинг 5

$ node /opt/nodeserver/server.js
Server running at http://0.0.0.0:1337/
Примечание Для пущей безопасности создадим группу nodejs и в ней пользователя nodeserver, как показано в листинге 5а и 5б. Затем, в листинге 5в назначим их для директории /opt/nodeserver и файла server.js в неё. Листинг 5а
$ sudo groupadd nodejs
Листинг 5б
$ sudo useradd -g nodejs -d /opt/nodeserver -s /bin/false
Листинг 5в
$ sudo chown -R nodeserver:nodejs /opt/nodeserver

Напишем сервисный файл /etc/systemd/system/nodeserver.service, содержимое которого представлено в листинге 6.

Листинг 6

$ sudo nano /etc/systemd/system/nodeserver.service
[Unit]
Description=Node.js Example Server
#Requires=After=mysql.service       # Требует сервис mysql для первого запуска

[Service]
ExecStart=/usr/local/bin/node /opt/nodeserver/server.js
#WorkingDirectory=/opt/nodeserver   # Требуется на некоторых системах...
Restart=always
RestartSec=10                       # Перезапуск сервиса после его аварийного завершения
StandardOutput=syslog               # Вывод в системный журнал(syslog)
 StandardError=syslog               # Вывод в системный журнал(syslog)
SyslogIdentifier=nodejs-example
User=nodeserver
Group=nodejs
Environment=NODE_ENV=production PORT=1337

[Install]
WantedBy=multi-user.target

и сделаем его активным для запуска systemd, как показано в листинге 7.

Листинг 7

$ sudo systemctl enable nodeserver.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nodeserver.service to /etc/systemd/system/nodeserver.service. 

Запускаем в работу только что созданный сервис nodeserver.service, как это делается в листнге 8.

Листинг 8

$ sudo systemctl start nodeserver.service 

Проверяем в листинге 9 как он работает

Листинг 9

nodeserver.service - Node.js Example Server
   Loaded: loaded (/etc/systemd/system/nodeserver.service; enabled)
   Active: active (running) since Вс 2017-02-26 12:42:17 MSK; 37s ago
 Main PID: 26915 (node)
   CGroup: /system.slice/nodeserver.service
           └─26915 /usr/bin/node /opt/nodeserver/server.js
Примечание При выдаче нечто похожего, как показано в листинге 9а, проверте абсолютный путь интерпретатора node, как показано в листинге 9б. Листинг 9а
nodeserver.service - Node.js Example Server
   Loaded: loaded (/etc/systemd/system/nodeserver.service; enabled)
   Active: failed (Result: start-limit) since Вс 2017-02-26 12:18:25 MSK; 2min 1s ago
  Process: 26638 ExecStart=/usr/local/bin/node /opt/nodeserver/server.js (code=exited, status=203/EXEC)
 Main PID: 26638 (code=exited, status=203/EXEC)
Листинг 9б
$ which node 
/usr/bin/node
После редактирования сервисного файла сервисный файл /etc/systemd/system/nodeserver.service, перегрузите сервис nodeserver.service
$ sudo systemctl daemon-reload
$sudo systemctl restart nodeserver.service

А на стороне клиента, как показано в листинге 10.

Листинг 10

$ telnet localhost 1337
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET/HTTP/1.0 
Connection closed by foreign host.
user@debian:/opt$ telnet localhost 1337
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /index.html HTTP/1.1<Нажать Enter>   
<Нажать Enter>
HTTP/1.1 200 OK
Content-Type: text/plain
Date: Sun, 26 Feb 2017 09:55:46 GMT
Connection: keep-alive
Transfer-Encoding: chunked

c
Hello World

0

4. Выводы

Данный пример показывает как достаточно просто использовать Node.js с дистрибутивом Debian GNU/Linux и добавлять в него простенькие и небольшие программки работающие в фоновом режиме, что несомненно его сделает в будущем одним из самых применяемых в силу своей простоты и легковесности восприятия.

5. Билиография


1) Installing Node.js Tutorial: Debian Linux

2) How To Install Node.js on Debian 8

3) Run node.js service with systemd

4) Basics of telnet and HTTP