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

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

我在 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。

我完全不清楚为什么这能解决问题,但我会接受它。

相关内容