Как работает Node.js

Хостинг - как работает Node.js

В хостинге некоторые решения могут показаться вам нестандартными.
Поэтому перед началом работы мы бы рекомендовали ознакомиться с вводной статьей.

1. Запуск Node.js
2. Смена версий
3. Работа с MySQL
4. Работа с Redis
5. Работа с Memcached
6. Перезапуск сервиса после изменения кода
7. Работа с ошибками приложения

1. Запуск Node.js

При создании сайта необходимо выбрать, что сайт работает на Node.js:

Настройки

Загрузить файлы сайта можно подключившись по SFTP.

Файлы вашего приложения можно расположить в каталоге sitename/app , а статические файлы (.css, .jpg, .png и другие) - в каталоге sitename/www.

Откройте настройки сайта в панели управления.

Если ваше приложение запускается через node hello.js, то укажите путь до hello.js в параметре APP_PATH, аналогично тому, как это сделано на скриншоте ниже:

Настройки

Если ваше приложение запускается через npm start, то в APP_PATH укажите только путь до каталога, где находится package.json.


Установка пакетов и отладка сайта

Управлять проектом можно подключившись по SSH.

После входа на сервер по SSH можно, например, установить необходимые для работы вашего сайта пакеты.

Для каждого сайта уже создано индивидуальное виртуальное окружение. Свое собственное виртуальное окружение создавать не требуется.

При установке пакетов через npm install сначала перейдите в каталог с сайтом и виртуальное окружение активируется автоматически:

c566@h2:~$
c566@h2:~$ cd mydomain.ru/
Now using node v9.9.0 (npm v5.6.0)
(node.js v9.9.0)c566@h2:~/mydomain.ru$

Далее можно установить нужные расширения:

(node.js v9.9.0)c3087@h2:~/mydomain.ru$ npm install mysql

Для отладки можно запустить любой скрипт, выполнив его напрямую. Для начала перейдем в каталог сайта:

c3087@h2:~$
c3087@h2:~$ cd mydomain.ru/
direnv: loading .envrc
Now using node v9.9.0 (npm v5.6.0)
direnv: export +ENV
(node.js v9.9.0)c3087@h2:~/mydomain.ru$

Далее запустим скрипт:

(node.js v9.9.0)c3087@h2:~/mydomain.ru$ node app/hello.js
Connected!


Особенности запуска вашего приложения

Чтобы сайт был виден извне нужно прикрепиться (bind) на IP и порт, которые мы передаем в переменных окружения APP_IP и APP_PORT.

По умолчанию в app/hello.js уже загружен пример использования переменных окружения APP_IP и APP_PORT. При обращении к сайту в браузере выводится “Hello world!”.

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello world!\n');
}).listen(process.env.APP_PORT, process.env.APP_IP);
console.log('Server running at http://%s:%s/', process.env.APP_IP, process.env.APP_PORT);

2. Смена версий Node.js

При необходимости можно задать нужную версию Node.js в панели управления

Для уже работающего сайта смена версии Node.js может привести к неработоспособности сайта. Причиной этого может быть то, что версии пакетов, установленных вами через npm, никак не изменяются.

Возможно некоторые пакеты потребуется установить повторно, а некоторые пакеты вообще могут быть недоступны для выбранной вами версии Node.js.

3. Работа с MySQL

MySQL доступен только через сокет /run/mysqld/mysqld.sock и недоступен по сети.

Установим драйвер для работы с MySQL

npm install mysql
var mysql = require('mysql');

var con = mysql.createConnection({
  socketPath: "/var/run/mysqld/mysqld.sock",
  user: "c3087_mydomain_ru",
  password: "HeKriDapsonag31"
});

con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
});

Сохраним этот код в файл app/hello.js. Далее перезапустим приложение.

Если после открытия этого сайта в браузере появляется сообщение Connected!, то подключение к MySQL прошло успешно.

4. Работа с Redis

На хостинге в redis данные хранятся только в оперативной памяти и на диск не сохраняются. Из оперативной памяти данные очищаются при перезапуске сервиса, либо пока вы специально не удалите данные.

Установим драйвер для работы с redis

npm install redis
var redis = require("redis");
var client = redis.createClient();

client.on("error", function (err) {
    console.log("Error " + err);
});

client.set("string key", "string val", redis.print);
client.hset("hash key", "hashtest 1", "some value", redis.print);
client.hset(["hash key", "hashtest 2", "some other value"], redis.print);
client.hkeys("hash key", function (err, replies) {
    console.log(replies.length + " replies:");
    replies.forEach(function (reply, i) {
        console.log("    " + i + ": " + reply);
    });
    client.quit();
});

Сохраним этот код в файл app/hello.js. Далее перезапустим приложение.

Если после открытия этого скрипта в браузере появляется сообщение Connected!, то подключение к MySQL прошло успешно.

5. Работа с Memcached

Для начала работы с Memcached можно установить два пакета

npm install memcached express

Пример подключения к Memcached и сохранения данных на 10000 секунд:

var express    = require("express");
var Memcached = require('memcached');
var app = express();
app.listen(process.env.APP_PORT, process.env.APP_IP);
var memcached = new Memcached();

memcached.connect( '127.0.0.1:11211', function( err, conn ){
  if( err ) {
     console.log( conn.server );
  }
});

var profile = {'name':'Kirill',
               'location':'Yekaterinburg',
               }

memcached.set('profile', profile, 10000, function (err) {
  if(err) throw new err;
});

Сохраним этот код в файл app/hello.js. Далее перезапустим приложение.

Чтобы проверить сохраненные данные подключимся по SSH , а далее подключимся к серверу Memcached

$ telnet 127.0.4.27 11211
Trying 127.0.4.27...
Connected to 127.0.4.27.
Escape character is '^]'.

Запросим значение ключа profile:

get profile
VALUE profile 2 44
{"name":"Kirill","location":"Yekaterinburg"}
END

6. Перезапуск сервиса после изменения кода сайта

После подключения по SSH можно перезапустить сервис NodeJS выполнив команду

touch sitename/reload

Например

c3087@h2:~$ touch mydomain.ru/reload

7. Работа с ошибками приложения

Если при обращении к сайту вы видите ошибку 502 Bad Gateway или аналогичную, то в первую очередь стоит обратиться к логам ошибок.

Последние возникавшие ошибки можно найти в конце файла имясайта/log/node-runlog/current.

Наблюдение за лог-файлом в реальном времени:

tail -f ~/имясайта/log/node-runlog/current
Хостинг
Хостинг
Хостинг
Создавайте неограниченное количество сайтов в изолированных контейнерах
С 2003 года
Надежность.
Нам доверяют десятки тысяч компаний и разработчиков
20 лет
Предоставляем услуги профессионального хостинга
35 000
Клиентов доверяют нам размещение своих сайтов
99.99%
Подтвержденный uptime
наших серверов хостинга
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
ВК49865