我在 Digital Ocean 服务器上运行着 2 个 Ghost 博客:
- 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 错误网关”错误。
我发现 npm 无法正确安装 SQLite3,并修复了这个问题。现在,我可以通过运行 成功启动博客npm start --production
。终端显示 Ghost 正在运行并拦截请求,我可以在浏览器中使用站点和博客应用程序。
但是当我运行 时service ghost-{blog2} start
,它继续失败,没有出现终端错误。我收到以下消息:
ghost-{blog2} start/running, process 1693
但我仍然在浏览器中看到“502 错误网关”错误。
编辑:我将启动脚本改为运行npm start --production > ghost-{blog2}.log
而不是npm start --production
,我可以看到 Ghost 启动了,然后立即退出而没有出现错误:
> [email protected] start /var/www/{blog2}/ghost
> node index
即使多次访问该页面,日志中也只记录这些内容。Nginx 会记录请求,但 Ghost 不会。
相比之下,当我通过npm start --production > ghost-{blog2}.log
从终端运行来启动博客时,日志继续如下:
> [email protected] 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'
}
},
/etc/nginx/sites-enabled/{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'
}
},
/etc/nginx/sites-enabled/{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
答案1
我最终删除了 ghost 的 node_modules,然后重新安装了所有内容。
rm -rf node_modules && npm cache clean
npm install --production
Sqlite3 未正确安装,所以我必须重新安装它。 这删除了我的数据库,但我有一个备份。
npm install sqlite3
重新启动服务后,一切恢复正常。
service nginx restart && service ghost restart
答案2
我终于解决了这个问题!
答案是降级Node.js 至版本 0.10.40。当我写上述内容时,我正在运行节点 vv0.12.7。
Ghost 的安装文档说它支持 v0.12.x,但是今天再次查看时,我注意到它推荐 v0.10.40。
我完全不清楚为什么这能解决问题,但我会接受它。