在同一台伺服器上升級 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 Bad Gateway”錯誤。
我發現 npm 無法正確安裝 SQLite3,並修復了它。現在,我可以通過執行成功啟動部落格了
npm start --production
。終端顯示 Ghost 正在執行並攔截請求,我可以在瀏覽器中使用該站點和部落格應用程序。但是當我執行時
service ghost-{blog2} start
,它會繼續失敗而不會出現終端錯誤。我收到以下消息:ghost-{blog2} start/running, process 1693
但我仍然在瀏覽器中看到“502 Bad Gateway”錯誤。
編輯:我將啟動腳本更改為 run
npm 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