So you’d like to use a CDN to speed up worldwide access to common assets on your Discourse forum? You might want to go all-in and Set up file and image uploads to S3 (see also Configure an S3 compatible object storage provider for uploads).
If you want a CDN without the added complexity of S3 and having two CDNs, this is the guide for you. The CDN will reduce some load on your server by letting the CDN serve those assets so that the server doesn’t have to. It also can speed things up by delivering the files from a location closer to the end user.
Sign up with the CDN of your choice – CDCK/discourse.org has used and strongly recommends Fastly.
The configuration will look something like this:
What you’re looking for is three main settings:
-
The origin address, which is the URL where your forum is currently located
discourse.example.com
. This is where the CDN will draw all its original content from on first request. -
The CNAME, which is the “friendly” name for your CDN that you’ll set up in your DNS, e.g.
discourse-cdn.example.com
-
The CDN URL, which is the “unfriendly” name for where the cached CDN assets will be coming from via the CDN’s worldwide network of distributed servers. It will look like
637763234.cdn-provider.com
You’ll need to edit your DNS to map the CNAME to the CDN URL, like so:
discourse-cdn.example.com IN CNAME 637763234.cdn-provider.com
(Once you’ve edited the DNS, give it a little bit of time to propagate.)
The actual Discourse part of the setup is fairly simple. Uncomment the CDN line in your app.yml
and update it with the CNAME you just set up in your DNS:
## the origin pull CDN address for this Discourse instance
DISCOURSE_CDN_URL: //discourse-cdn.example.com
(If you do not see this line in your app.yml, add it below the other DISCOURSE_ variables)
As with any other changes to your app.yml
, you need to rebuild the container to reflect changes:
./launcher rebuild app
Once you’ve rebuilt, browse to your Discourse instance in the browser. View source and search for “cdn”. You’ll see that websites assets are now coming from your CDN:
<script src="http://discourse-cdn.codinghorror.com/assets/preload_store-4ea79c2f435becca86ac97a9c038f9c7.js"></script>
<script src="http://discourse-cdn.codinghorror.com/assets/locales/en-7084a68855205a9128245d2d0ce94ed9.js"></script>
This topic covers the more common scenario of static asset acceleration. See this topic for full site (both dyamic and static asset) CDN acceleration (like provided by Cloudflare). Cloudflare works differently from a traditional CDN, so this isn’t a good topic for discussing Cloudflare.
Other CDNs reported to work include:
- https://www.keycdn.com/ (CDCK from the early days)
- MaxCDN (@sam: “reliable CDN” Jan 2017)
- StackPath (@Victor_Ashiedu Jun 2022)
- Bunny.net (@pfaffman 2023)
- Cloudfront (@pfaffman thinks CDCK uses them at least for S3 assets)
- gcore.com? (@pfaffman signed up, but has not tested April 2023)