Дата и время публикации:
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/
$ 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
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