Nginx

在同一台伺服器上升級 2 個 Ghost 部落格,1 個在作為服務執行時立即退出

  • March 31, 2017

我在 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 Bad Gateway”錯誤。

我發現 npm 無法正確安裝 SQLite3,並修復了它。現在,我可以通過執行成功啟動部落格了npm start --production。終端顯示 Ghost 正在執行並攔截請求,我可以在瀏覽器中使用該站點和部落格應用程序。

但是當我執行時service ghost-{blog2} start,它會繼續失敗而不會出現終端錯誤。我收到以下消息:

ghost-{blog2} start/running, process 1693

但我仍然在瀏覽器中看到“502 Bad Gateway”錯誤。

編輯:我將啟動腳本更改為 runnpm 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'
   }
},

/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

我終於解決了這個問題!

**答案是將 Node.js降級到 0.10.40 版本。**當我寫以上內容時,我正在執行節點 vv0.12.7。

Ghost的安裝文件說它支持v0.12.x,但是今天再次查看時,發現它推薦v0.10.40。

我完全不清楚為什麼這可以解決問題,但我會接受的。

我最終刪除了 ghost 的 node_modules,然後重新安裝了所有東西。

rm -rf node_modules && npm cache clean
npm install --production

Sqlite3 沒有正確安裝,所以我也不得不重新安裝它。 這刪除了我的數據庫,但我有一個備份。

npm install sqlite3

重新啟動服務後,一切都恢復了。

service nginx restart && service ghost restart

引用自:https://serverfault.com/questions/720509