在同一台服务器上升级2个Ghost博客,1作为服务运行时立即退出

我在数字海洋服务器上运行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 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细节。

博客#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的/启用的站点 – / {} 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的/启用的站点 – / {} 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 

我最终删除了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。

我根本不清楚为什么这个解决了这个问题,但我会接受。