Skip to content

Serving Front-End Assets from a CDN

Available Since: preview (This feature isn't available in a released version yet.)

Serving front-end assets (JavaScript bundles, CSS files, and default images) from a Content Delivery Network (CDN) can help with scalability and performance especially when dealing with a large request volume.

Pilcrow will rewrite asset requests to point to the CDN server.

NOTE

Configuring a CDN is not for the faint of heart. CORS problems, crossorigin issues and cache busting are all things that have to be addressed for a production deployment. For most self-hosted deployments, configuring a CDN is almost certainly not worth the effort.

Configure CDN

You'll need to upload the client bundle files to your CDN of choice. This example uses Digitalocean Spaces, but any push-type CDN will work similarly. We're only covering the steps needed to configure the application. You'll need to configure the CDN itself.

1. Build the front-end assets

bash
yarn #Install build dependencies
yarn build #Build the client application

2. Push to CDN

Once the build finishes, the bundled application files will be located in the dist/spa folder. We need to copy these files to our CDN. For Digitalocean, we upload the files to a spaces bucket.

bash
s3cmd -Pr --no-mime-magic --guess-mime-type dist/spa s3://pilcrow-cdn

The -P flag sets the ACL to public. The needed flags may be different for your CDN setup.

3. Configure app to use CDN

Update your environment to set the CDN_BASE environment var to the URL of your CDN.

env
#inside .env
CDN_BASE=https://cdn.pilcrow.dev/  #Set this to your CDN base url.

If using docker-compose, restart the application with the new configuration:

bash
docker-compose up -d

Since the index.html template is cached, you will likely need to update the view cache.

bash
docker-compose exec phpfpm ./artisan view:cache

4. Confirm

Use the browser's inspector to confirm that front-end files are being loaded from the CDN rather than locally.

Chrome inspector network tab