我在数字海洋服务器上运行2个Ghost博客:
我使用了Digital Ocean提供的说明来设置博客,他们工作良好,并在以前升级。
昨天晚上,我把博客#1从Ghost v0.6.0升级到0.7.0,并没有遇到任何问题。 升级后,我运行service ghost-{blog1} restart
,它来到了盛况和胜利。
我立即尝试按照相同的步骤升级博客#2,但是当我重新启动服务后在浏览器中打开它时,出现“502 Bad Gateway”错误。
我发现npm无法正确安装SQLite3,并修复了这个问题。 现在,我可以通过运行npm start --production
成功启动博客。 terminal显示Ghost正在运行并拦截请求,我可以在浏览器中使用该网站和博客应用程序。
但是当我运行service ghost-{blog2} start
,它会继续失败,不会出现terminal错误。 我收到以下消息:
ghost-{blog2} start/running, process 1693
但是我仍然在浏览器中看到“502 Bad Gateway”错误。
编辑:我改变了我的启动脚本运行npm start --production > ghost-{blog2}.log
而不是npm start --production
,我可以看到Ghost启动,然后立即退出,没有错误:
> [email protected] start /var/www/{blog2}/ghost > node index
这就是日志中的所有内容,即使是在浏览页面几次之后。 Nginx会logging请求,但是Ghost不会。
相比之下,当我通过从terminal运行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}}
任何人都可以build议我可以采取的步骤来解决这个问题?
编辑:这里是每个博客的相关configuration细节。
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' } },
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; } }
# ghost-{blog1} start on startup script cd /var/www/{blog1} npm start --production end script
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' } },
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; } }
# ghost-{blog2} start on startup script cd /var/www/{blog2}/ghost npm start --production > ghost-{blog2}.log end script
我最终删除了ghost的node_modules,然后重新安装了所有东西。
rm -rf node_modules && npm cache clean npm install --production
Sqlite3没有正确安装,所以我不得不重新安装。 这删除了我的数据库,但我有一个备份。
npm install sqlite3
重新启动服务后,所有事情都重新开始了。
service nginx restart && service ghost restart
我终于解决了这个问题!
答案是将 Node.js 降级到版本0.10.40。 当我写上面的时候,我正在运行节点vv0.12.7。
Ghost的安装文档说它支持v0.12.x,但今天再看一遍,我注意到它推荐v0.10.40。
我根本不清楚为什么这个解决了这个问题,但我会接受。