Обновите 2 блога-призрака на том же сервере, 1 немедленно завершает работу при запуске в качестве службы
У меня есть 2 блога Ghost на сервере Digital Ocean:
- Ubuntu 14.04.3 LTS
- Nginx 1.4.6 (Ubuntu)
- Узел v0.12.7
Я использовал инструкции, предоставленные Digital Ocean, для настройки блогов, и они отлично работали и пережили обновления до этого.
Прошлой ночью я обновил блог № 1 с Ghost v0.6.0 до 0.7.0 и не испытал никаких проблем. После обновления я побежал service ghost-{blog1} restart
и он пришел в сеть с помпой и триумфом.
Я сразу же попытался обновить блог № 2, выполнив те же действия, но когда я открыл его в своем браузере после перезапуска службы, я получил ошибку "502 Bad Gateway".
Я обнаружил, что npm не смог правильно установить SQLite3, и исправил это. Теперь я могу успешно запустить блог, запустив npm start --production
, Терминал показывает, что Ghost выполняет и перехватывает запросы, и я могу использовать приложение сайта и блогов в своем браузере.
Но когда я бегу service ghost-{blog2} start
, он продолжает терпеть неудачу, не представляя ошибку терминала. Я получаю следующее сообщение:
ghost-{blog2} start/running, process 1693
Но я все еще вижу ошибку "502 Bad Gateway" в моем браузере.
Изменить: я изменил мой скрипт запуска для запуска npm start --production > ghost-{blog2}.log
вместо npm start --production
и я вижу, что Ghost запускается, а затем сразу же завершает работу без ошибок:
> ghost@0.7.0 start /var/www/{blog2}/ghost
> node index
Это все, что есть в журнале, даже после нескольких посещений страницы. Nginx регистрирует запросы, а Ghost - нет.
Напротив, когда я начинаю блог, запустив npm start --production > ghost-{blog2}.log
с терминала журнал продолжается так:
> ghost@0.7.0 start /var/www/{blog2}/ghost
> node index
Migrations: Up to date at version 004
Ghost is running in production...
Your blog is now available on http://{blog2}
Ctrl+C to shut down
{{Requests}}
Может кто-нибудь предложить шаги, которые я могу предпринять, чтобы устранить эту проблему?
Изменить: Вот соответствующие подробности конфигурации для каждого блога.
Блог № 1: это тот, который работает
/var/www/{blog1}/config.js
production: {
url: 'http://{blog1}',
mail: {},
database: {
client: 'sqlite3',
connection: {
filename: path.join(__dirname, '/content/data/ghost.db')
},
debug: false
},
server: {
// Host to be passed to node's `net.Server#listen()`
host: '127.0.0.1',
// Port to be passed to node's `net.Server#listen()`, for iisnode set this to `process.env.PORT`
port: '2369'
}
},
/ И т.д. / Nginx/ сайты с поддержкой / {blog1}
server {
listen 80;
server_name {blog1};
root /usr/share/nginx/html;
index index.html index.htm;
client_max_body_size 10G;
location / {
proxy_pass http://localhost:2369;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
}
}
/etc/init/ghost-{blog1}.conf
# ghost-{blog1}
start on startup
script
cd /var/www/{blog1}
npm start --production
end script
Блог № 2: Этот работает, когда я начинаю использовать npm start --production, но не работает, когда я начинаю как сервис
/var/www/{blog2}/ghost/config.js
production: {
url: 'http://{blog2}',
mail: {},
database: {
client: 'sqlite3',
connection: {
filename: path.join(__dirname, '/content/data/ghost.db')
},
debug: false
},
server: {
// Host to be passed to node's `net.Server#listen()`
host: '127.0.0.1',
// Port to be passed to node's `net.Server#listen()`, for iisnode set this to `process.env.PORT`
port: '2777'
}
},
/ И т.д. / Nginx/ сайты с поддержкой / {blog2}
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name {blog2};
root /usr/share/nginx/html;
index index.html index.htm;
client_max_body_size 10G;
location / {
proxy_pass http://localhost:2777;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
}
}
/etc/init/ghost-{blog2}.conf
# ghost-{blog2}
start on startup
script
cd /var/www/{blog2}/ghost
npm start --production > ghost-{blog2}.log
end script
2 ответа
Я наконец-то решил эту проблему!
Ответ состоял в том, чтобы понизить Node.js до версии 0.10.40. Когда я писал выше, я работал на узле vv0.12.7.
В документации по установке Ghost написано, что она поддерживает v0.12.x, но, посмотрев сегодня снова, я заметил, что она рекомендует v0.10.40.
Мне совсем не понятно, почему это решает проблему, но я возьму это.
В итоге я удалил node_modules для ghost, а затем переустановил все.
rm -rf node_modules && npm cache clean
npm install --production
Sqlite3 не был установлен должным образом, поэтому мне пришлось также переустановить его.Это удалило мою базу данных, но у меня была резервная копия.
npm install sqlite3
После перезапуска сервисов все снова заработало.
service nginx restart && service ghost restart