В хостинге некоторые решения могут показаться вам нестандартными.
Поэтому перед началом работы мы бы рекомендовали ознакомиться с вводной статьей.
1. Запуск Node.js
2. Смена версий
3. Работа с MySQL
4. Работа с Redis
5. Работа с Memcached
6. Перезапуск сервиса после изменения кода
7. Работа с ошибками приложения
При создании сайта необходимо выбрать, что сайт работает на 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
сначала перейдите в каталог с сайтом и виртуальное
окружение активируется автоматически:
c96147@h49:~$ cd mynodejs.ru/
(node.js v22.7.0)c96147@h49:~$
Далее можно установить нужные расширения:
(node.js v22.7.0)c96147@h49:~$ npm install mysql
Для отладки можно запустить любой скрипт, выполнив его напрямую:
(node.js v22.7.0)c96147@h49:~$ node app/hello.js
Connected!
Чтобы сайт был виден извне нужно прикрепиться (bind) на IP и порт, которые мы передаем в переменных окружения APP_IP и APP_PORT.
По умолчанию в app/hello.js
уже загружен пример использования переменных окружения APP_IP и APP_PORT. Само приложение просто открывает файл index.html в браузере.
При необходимости можно задать нужную версию Node.js в панели управления
Для уже работающего сайта смена версии Node.js может привести к неработоспособности сайта.
Причиной этого может быть то, что версии пакетов, установленных вами через npm
, никак не изменяются.
Возможно некоторые пакеты потребуется установить повторно, а некоторые пакеты вообще могут быть недоступны для выбранной вами версии Node.js.
MySQL доступен только через сокет /run/mysqld/mysqld.sock
и недоступен по сети.
Установим драйвер для работы с MySQL
npm install mysql
var mysql = require('mysql');
var con = mysql.createConnection({
socketPath: "/var/run/mysqld/mysqld.sock",
user: "c96147_mynodejs_ru",
password: "HeKriDapsonag31"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
Сохраним этот код в файл app/hello.js
. Далее перезапустим приложение.
Если после открытия этого сайта в браузере появляется сообщение Connected!
, то
подключение к MySQL прошло успешно.
На хостинге в 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 прошло успешно.
Для начала работы с 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
После подключения по SSH можно перезапустить сервис NodeJS выполнив команду
touch reload
Например
(node.js v22.7.0)c96147@h49:~$
Если при обращении к сайту вы видите ошибку 502 Bad Gateway
или аналогичную, то в первую
очередь стоит обратиться к логам ошибок.
Последние возникавшие ошибки можно найти в конце файла имясайта/log/node-runlog/current
.
Наблюдение за лог-файлом в реальном времени:
tail -f ~/имясайта/log/node-runlog/current