Мне давно хотелось пощупать Node.js поближе, но все время не было повода для этого. В этой статье решил рассказать о первом опыте работы с этой платформой. Свое знакомство с работой Node.js мне пришлось начать с установки Ghost на Debian.
Хотелось бы упомянуть интересные факты из истории Ghost. Ghost был создан Джоном О’Ноланом, который в свое время выполнял функции заместителя руководителя разработки пользовательского интерфейса WordPress. Изначально Ghost создавался как альтернатива WordPress, но со временем он вырос из движка для блога и превратился в сложную CMS.
Если использовать Ghost в качестве блог-платформы, то его можно считать одним из основных конкурентов WordPress. Одно из преимуществ Ghost — его лаконичность, простота и скорость работы. Что касается функциональности этих CMS, Ghost сильно уступает возможностям WordPrees.
Как вариант, можно использовать Ghost вместе с Nginx. Веб-сервер Nginx будет прослушивать трафик, поступающий на порт 80, а затем передавать все запросы платформе Ghost. Благодаря разнообразию вариантов установки Ghost, вам нет необходимости обязательно устанавливать MySQL или Nginx.
Из недостатков Ghost, хочу отметить потребление ресурсов плаформой Node.js. В моем случае, на сервере Debian 8 х64, под виртуализацией KVM я увидел следующую картину:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 9135 root 20 0 1039856 120372 10348 S 0.0 23.8 0:05.46 node 9128 root 20 0 836588 28992 8792 S 0.0 5.7 0:00.32 npm
Под нагрузкой процесс Ghost создает сильную нагрузку на процессор. Этот недостаток устраняется кэшированием в Nginx. Потребление памяти должно компенсироваться за счет отсутствия необходимости держать в системе процессы PHP и MySQL, но это не устраняет проблем с ее утечками.
Как я уже говорил, чтобы установить Ghost в Debian, вам не нужно устанавливать PHP, MySQL и Nginx. Платформа Ghost выполняет функции движка и веб-сервера одновременно. За хранение данных по умолчанию отвечает SQLite, вы можете ее изменить на MySQL или PostgreSQL при необходимости.
Установить Ghost в Debian
Установить Ghost достаточно просто. Вам нужно установить пакеты nodejs, npm и их зависимости. Запустите в консоли команды ниже:
apt-get install nodejs npm # Необходимо для Node.js в Debian, подробнее /usr/share/doc/nodejs/README.Debian ln -s /usr/bin/nodejs /usr/bin/node
Чтобы установить Ghost на сервер, используйте npm:
cd /home npm install ghost cd node_modules/ghost npm install
После завершения установки Ghost, важно выполнить первый запуск, после чего можно переходить к изменению настроек.
npm start --production
Фрагмент результата выполнения команды:
Ghost is running in production... Your blog is now available on http://my-ghost-blog.com Ctrl+C to shut down
Остановите процесс при помощи клавиш Ctrl-C. Откройте файл:
nano config.js
Здесь необходимо изменить адрес и порт на котором Ghost будет принимать входящие соединения. Находим секцию и меняем значения параметров на свои:
production: {
url: 'http://test.codebeer.ru',
mail: {},
database: {
client: 'sqlite3',
connection: {
filename: path.join(__dirname, '/content/data/ghost.db')
},
debug: false
},
server: {
host: '95.213.199.106',
port: '80'
}
}
Повторно запускаем Ghost:
npm start --production
Автоматический запуск Ghost
После установки Ghost, необходимо добавить добавить запуск платформы в автозагрузку. Для контроля запуска и управления работой Ghost я буду использовать пакет supervisor:
apt-get install supervisor
Создадим файл с параметрами запуска Ghost:
nano /etc/supervisor/conf.d/ghost.conf
Добавьте в него следующие строки:
[program:ghost] command = node /home/node_modules/ghost/index.js directory = /home/node_modules/ghost user = ghost autostart = true autorestart = true stdout_logfile = /var/log/supervisor/ghost.log stderr_logfile = /var/log/supervisor/ghost_err.log environment = NODE_ENV="production"
В целях безопасности, создадим отдельного пользователя, под которым будем выполнять запуск Ghost:
useradd -r ghost -U
Дадим пользователю права на каталог установки Ghost:
chown -R ghost:ghost /home/node_modules/ghost/
После установки supervisor и изменения настроек, обязательно нужно перезагрузить сервер. Теперь для управления процессом Ghost вручную, можно использовать следующие команды:
supervisorctl start ghost supervisorctl stop ghost
Подробнее о различных способах управления процессом Ghost, можно прочитать на этой странице.
Установить Ghost вместе с Nginx
Когда Ghost установлен и работает, займемся оптимизацией работы сервера. В качестве примера я настрою Nginx в роли фронтенда. Веб-сервер Nginx, который запущен на внешнем интерфейсе, будет принимать и передавать соединения от клиентов к серверу Ghost. Затем в обход сервера Ghost, Nginx будет отдавать из кэша статику клиентам. Использование Nginx позволит нам более гибко настроить работу сервера.
Для начала меняем host и port в конфигурационном файле Ghost:
production: {
url: 'http://test.codebeer.ru',
mail: {},
database: {
client: 'sqlite3',
connection: {
filename: path.join(__dirname, '/content/data/ghost.db')
},
debug: false
},
server: {
host: '127.0.0.1',
port: '8080'
}
}
Устанавливаем веб-сервер Nginx:
apt-get install nginx
Создайте конфигурационный файл Nginx и добавьте в него следующие строки:
server {
listen 95.213.199.106:80;
server_name test.codebeer.ru;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
}
}
Чтобы применить настройки, выполните команду:
service nginx reload
После изменения настроек Nginx перестал запускаться:
2015/12/10 22:34:38 [emerg] 9714#0: bind() to 95.213.199.106:80 failed (98: Address already in use)
В качестве решения проблемы, мне помог перезапуск сервера.