画像フォルダをシンボリックリンクフォルダに変更

上記のリンクから、画像と添付ファイルはDocker内ではなく、Discourseのインストール内のより深い共有フォルダに保存されていることがわかります。これを踏まえて、セカンドストレージからNFSマウントした画像フォルダを別のサーバーにシンボリックリンクしたいと考えています。そして、セカンダリサーバーでDiscourseのDockerコンテナを実行し、負荷分散/フェイルオーバーの手段として使用したいと考えています。そして、同じ画像フォルダをNFSマウントから使用したいと考えています。念のため、別のネットワークサーバーからDBもすでに持っています。

設定をテストしてみましたが、結果は良くありませんでした。すべての画像ファイルを /var/discourse/shared/standalone/uploads から /var/www/image/uploads にコピーしました。
その後、

  • NFSマウントされた画像フォルダへのシンボリックリンクを作成しました。
  • /uploads フォルダに対して chmodchownwww-data:www-data755 で設定しました。

画像フォルダがネイティブにマウントされているプライマリサーバーでは画像が見えますが、NFSマウントされたセカンダリサーバーではそうではありません。画像がコンテナのサイズで欠落しています。

さらに、プライマリサーバーでさえ、画像は見えますがダウンロードできなくなりました。

ファイル権限の問題だと思います。理想的な設定は何でしょうか?

バニラなのか、数十回の再構築によるものなのかわかりませんが、デフォルトフォルダの画像は755/644(フォルダ/ファイル)で、私のサーバーでは main_id:www-data です。私も同じ戦略を試しましたが、うまくいきませんでした。シンボリックリンクまたはNFS固有の問題かもしれませんが、もう追跡できません。

画像をCDN(コンテンツ配信ネットワーク)にしてみたらどうですか?

@NateDhaliwal アイデアをありがとうございます。

S3のようなCDNサービスはとっくに利用をやめました。Cloudflareしか使っていませんが、これは実際には画像を保存しません。

私が間違っていたら訂正してください。しかし、あなたは、NginxのドメインマッピングのようなローカライズされたCDNを参照していて、DiscourseのCDN拡張機能を使用している (Enable a CDN for your Discourse - Documentation / Self-Hosting - Discourse Meta) と思われます。

他に解決策がない場合は、そのようにします。ファイル権限の方が簡単な解決策だと思っていました。

「いいね!」 1

シンボリックリンクではなく、dockerマウントをnfsマウントを指すように変更してください。

しかし、コンテナ内、コンテナ外、およびリモートnfsサーバーでのパーミッションを同期させることは、確かに難しい場合があります。

「いいね!」 1

それが私の最初の試みでした。Docker の内部で、以前見つけたファイルシステムがひどく壊れていることに気づきました。/default/ が見える前に、/uploads/uploads/uploads のようにネストされていました。何が起こったのかよくわかりませんが、内部のすべてのファイルをイメージマウントにコピーし、マウントフォルダーをボリュームとして追加しました。

ここでは、状況はシンボリックリンクとそれほど変わりませんでした。ファイルパーミッションは実際に同じ問題を引き起こしました。ファイルが実際には Docker コンテナの外に保存されていることを理解した後、シンボリックリンクがはるかに簡単な解決策になると思いました。

どちらの場合も、ファイルパーミッションが原因であることはほぼ確実ですが、シンボリックリンクが機能しない限り、Nginx サーバーブロックによるカスタム CDN の方が Docker ボリュームよりもはるかに簡単な解決策のように思えます。

シンボリックリンクを使用することから良い結果が得られるとは確信していません。1つの問題は、コンテナの内側と外側でシンボリックリンクを同じにすることが難しいことであり、おそらくネストされたアップロードの問題はそれに関連していると思われます。シンボリックリンクを使用しないことが推奨されているのを見たことがあり、これがその理由だと思います。

Discourse はカスタム CNAME ベースの CDN をサポートしていますか?管理画面で S3 の設定を見たことがあるのを覚えていますし、Fastly に関するメタ投稿もありましたが、カスタム CDN の設定についてはよく覚えていません。

投稿を見つけました。S3互換のCDNのセルフホスト版を設定する必要があるようです。単なるNginx画像サーバーでは不十分です。