DigitalOceanサーバーで2つのGhostブログを実行しています。
私は Digital Oceanが提供する指示 を使用してブログを設定しましたが、ブログは正常に機能し、以前はアップグレードを生き延びました。
昨夜、ブログ#1をGhost v0.6.0から0.7.0にアップグレードしましたが、問題は発生しませんでした。アップグレード後、service ghost-{blog1} restart
を実行すると、華やかで勝利を収めてオンラインになりました。
同じ手順ですぐにブログ#2をアップグレードしようとしましたが、サービスを再起動した後にブラウザでブログを開くと、「502BadGateway」エラーが発生しました。
NpmがSQLite3を正しくインストールできないことがわかり、それを修正しました。これで、npm start --production
を実行してブログを正常に開始できます。ターミナルは、Ghostが実行されてリクエストを傍受していることを示しており、ブラウザでサイトとブログアプリを使用できます。
しかし、service ghost-{blog2} start
を実行すると、ターミナルエラーが発生することなく失敗し続けます。次のメッセージが表示されます。
ghost-{blog2} start/running, process 1693
それでも、ブラウザに「502BadGateway」エラーが表示されます。
編集:起動スクリプトを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}}
誰かがこれをトラブルシューティングするために私が取ることができるステップを提案できますか?
編集:各ブログに関連する構成の詳細は次のとおりです。
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
私はついにこの問題を解決しました!
答えは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