Discourse のために CDN を有効にする

Discourse フォーラムで一般的なアセットへの世界中のアクセスを高速化するために CDN を使用したいということですね? その場合は、すべてを投入して Set up file and image uploads to S3 (Configure an S3 compatible object storage provider for uploads も参照) を利用することを検討するとよいでしょう。

S3 の追加の複雑さや2つの CDN を持つことなく CDN を利用したい場合は、このガイドが役立ちます。CDN は、サーバーがアセットを提供する必要をなくすことで、サーバーの負荷を軽減できます。また、エンドユーザーに近い場所からファイルを配信することで、高速化することもできます。

選択した CDN にサインアップしてください。CDCK/discourse.org は Fastly を使用しており、強く推奨しています。

設定は次のようになります。

注目すべきは主に 3 つの設定です。

  1. オリジンアドレス: 現在フォーラムがある URL、discourse.example.com です。CDN は、最初の要求時にすべてのオリジナルコンテンツをここから取得します。

  2. CNAME: DNS で設定する CDN の「フレンドリーな」名前です。例: discourse-cdn.example.com

  3. CDN URL: キャッシュされた CDN アセットが CDN の世界中に分散されたサーバーのネットワーク経由で配信される場所の「アンフレンドリーな」名前です。637763234.cdn-provider.com のようになります。

次のように、CNAME を CDN URL にマッピングするように DNS を編集する必要があります。

discourse-cdn.example.com IN CNAME 637763234.cdn-provider.com

(DNS を編集したら、伝播にしばらく時間をかけてください。)

Discourse 側の設定はかなり簡単です。app.yml の CDN 行のコメントを解除し、DNS で設定した CNAME で更新します。

    ## この Discourse インスタンスの http または https CDN アドレス (プル用に設定)
    DISCOURSE_CDN_URL: https://discourse-cdn.example.com

:warning: CDN URL にはプロトコル (https:// または http://) を含める必要があります。 プロトコル相対 URL ( // で始まるもの) はサポートされなくなり、コンテナのビルドが中止されます。

(この行が app.yml にない場合は、他の DISCOURSE_ 変数の下に挿入してください)

app.yml の他の変更と同様に、変更を反映するためにコンテナを再構築する必要があります。

./launcher rebuild app

再構築が完了したら、ブラウザで Discourse インスタンスを参照してください。ソースを表示して「cdn」を検索すると、ウェブサイトのアセットが CDN から配信されていることが確認できます。

<script src="https://discourse-cdn.codinghorror.com/assets/preload_store-4ea79c2f435becca86ac97a9c038f9c7.js"></script>
<script src="https://discourse-cdn.codinghorror.com/assets/locales/en-7084a68855205a9128245d2d0ce94ed9.js"></script>

このトピックでは、静的アセットのアクセラレーションというより一般的なシナリオについて説明しています。動的アセットと静的アセットの両方のサイト全体の CDN アクセラレーション (Cloudflare によって提供されるようなもの) については、こちらのトピックを参照してください。Cloudflare は従来の CDN とは異なる動作をするため、Cloudflare の議論にはこのトピックは適していません。

動作が報告されているその他の CDN には次のようなものがあります。

「いいね!」 43

I’m sorry guys, I’m trying to figure out how to do this, and I’m drawing a blank. I’ve tried to follow your instructions, but I think the Fastly site must have changed since you created the screenshot, because I can’t find where to enter in the details you’ve presented.

:confused: :confounded:

Minor update - this is the screen I get when I trying to use the service

It doesn’t match up with your example, so I don’t know what goes where.

Fastly is more sophisticated than the general CDN it supports accelerating both dynamic and static content.

To configure.

  1. Plug in the IP address of your Discourse web server in “Server Address”
  2. Plug in your desired domain name in “Domain name”
  3. Point your DNS CNAME for your domain at global.prod.fastly.net per: http://docs.fastly.com/guides/getting-started/cname-instructions-for-most-providers

That is it you should be done, no changes needed on Discourse side.

「いいね!」 7

I wonder how to deal with CDN provider does not support https…

There is a cloud storage provider can just acted as CDN. But their spider don’t like SSL. There are APIs for upload assets. I would think the easiest way is to write a plugin to monitor public folder and upload them instantly…

That sounds like a push CDN to me, which was supported in the past but not currently.

This should also work with other CDNs? Like S3?

S3 is not a CDN, but it should work with Amazon CloudFront and any other Pull compatible CDN.

「いいね!」 5

If you want an inexpensive CDN, I think MaxCDN might be what you’re looking for. It is a pull-compatible CDN.

However, going to Fastly’s website from a quick google search led me to Fastly’s pricing page in a snap.

MaxCDN goes by a somewhat different pay model (as far as I can see in comparing with Fastly) which is easier to budget with.

「いいね!」 1

I’m new to Discourse and I’ve been trying to configure it with Cloudflare. This tutorial focuses on fastly. I have used Cloudflare on my Wordpress sites in the past and it was quite simple. Typically, Cloudflare scans your website and all you have to do is change your DNS to what Cloudflare provides. My question is… do the same steps I just mentioned apply to discourse? If yes… what so I do with the CDN URL in app.yml? Thanks guys.

「いいね!」 1

You do not have to spend time designating which files to cache. CloudFlare’s technology builds the cache for you based on your traffic and what objects on your site are safe to serve from the edge.

Just be sure you do not enable any JavaScript weirdness / modifications in CloudFlare, as it will break the crap out of Discourse if you do.

「いいね!」 8

Anyone have any experience with Cachefly?

They’re running a pay-as-you-go plan with no minimum spend, which seems to be the only one of their peers, since Fastly has a minimum $50/mo spend requirement. https://www.cachefly.com/plans-pricing/pay-as-you-go-cdn/

I’ve heard their name often before and I think they’re up there in the top tier CDN? Just checking others’ experience first…

Cachefly are good, have never used them but heard plenty good things

「いいね!」 2

Does anyone have any experience in using KeyCDN with Discourse?

They support HTTP/2, have 22 PoPs, and are amongst the cheapest CDN on the market (starting $0.04/GB). If all works well with Discourse it would definitely be something worth looking into.

Yes, I using KeyCDN on my discourse: http://reactvn.org/. It’s working perfectly.

These are the steps to use KEYCDN:

  1. Register [KEYCDN] 1 account: Fill in your e-mail can register, you can using without having to recharge.

  2. Create a pull zone: https://www.keycdn.com/support/create-a-pull-zone/

  3. Create a Zonealias: https://www.keycdn.com/support/create-a-zonealias/

  4. Config Discourse: Modify app.yml, DISCOURSE_CDN_URL point to your CDN URL or an alias. Enable a CDN for your Discourse

「いいね!」 7

Any one knows how to configure with http://www.coralcdn.org/ ?

Is there any way to change the CDN url without having to rebuild the Docker container or is updating the app.yml and rebuilding currently the only way?

No, that is the only way.

「いいね!」 1

Why not use CloudFlare? They don’t charge for bandwidth at all. (Plus a bunch of other features, like free SSL).

「いいね!」 3

You can use Cloudflare along with another CDN. You don’t get full CDN advantages with Cloudflare unless you pay, and for serving up lots of images, attachments, or other media you’ll want a dedicated CDN to reduce the server load.

after enable CDN, i can not visit my site any more.

I have this error in my log:

nginx: [emerg] host not found in upstream "avatars.discourse.org" in /etc/nginx/conf.d/discourse.conf:247