Based on Varnish Cache. This started as the simplest CDN running on fly.io for changelog.com
You are welcome to fork this and build your own - OSS FTW 💚
🧢 Jerod Santo - March 29, 2024 - Changelog & Friends #38
- ✅ Static backend, 1 day stale, stale on error,
x
-headers - Initial commit - ✅ Dynamic backend,
cache-status
header - PR #1 - ✅ Add tests - PR #3
- ✅ Make it easy to develop locally - PR #7
- ✅ Add support for TLS backends, publish & deploy to production - PR #8
- ✅ Add Feeds backend - PR #10
- ✅ Add Assets backend - PR #11
- ✅ Send Varnish logs to Honeycomb.io - PR #12
- ✅ Enrich Varnish logs with GeoIP data - PR #13
- ✅ Supervisor restarts crashed processes - PR #14
- ✅ Auth
PURGE
requests - PR #16 - ✅ Add redirects from Fastly VCL - PR #19
- ✅ Send Varnish logs to S3 - PR #27
- ✅ All contributors review & clean-up
- Is the VCL as clean & efficient as it could be?
- Does everything work as expected?
- Anything that can be removed?
- How do we make this friendlier to new users?
- What would make this more contribution-friendly?
- How easy is this to use as your own deployment?
- ✅ Tag & ship
v1.0-rc.1
- ✅ Tag & ship
v1.0-rc.2
- ✅ Prepare for 20% of the production traffic - PR #30
- Route 20% of the production traffic through
- Observe cold cache behaviour
- ✅ Tag & ship
v1.0-rc.3
- ✅ Fix feeds URL rewrite - PR #31
- ✅ Increase instance size - PR #32 ](https://github.com/thechangelog/pipely/commit/355372334b602a0ad55a96a85a288409ad4b8d84)
- ✅ Tag & ship
v1.0-rc.4
- ✅ Limit Varnish memory to 66% (out of
3200M
out of4000M
) - [3553723
- ✅ Limit Varnish memory to 66% (out of
- ✅ Tag & ship
v1.0-rc.5
- ☑️ Tag & ship
v1.0
- ☑️ Route 100% of the production traffic through
v1.0
- Refactor VCL to use
include
- This will enable us to do reuse the same configs in the tests 💪 @mttjohnson
- Add logging acceptance tests
- Keep Dagger version in
.github/workflows/_namespace.yaml
in sync withjust/dagger.just
While it's fun watching other people experiment with digital resin (varnish 😂), it's a whole lot more fun when you can repeat those experiments yourself, understand more how it works, and make your own modifications.
And that's about it. Everything else is containerized with Dagger.
Note
For Windows Developers:
The project's toolchain is made for Linux-like systems. On a Windows machine you will need to have the Windows Subsystem for Linux (WSL) installed in addition to Docker. just
should be installed inside your WSL Linux operating system. You might be able to run Just natively from Windows, but there are some known bugs related to home directory filenames, so better to avoid that altogether and work directly in WSL.
just
Available recipes:
how-many-lines # How many lines of Varnish config?
how-many-lines-raw # How many lines of Varnish config?
http-profile url="https://pipedream.changelog.com/" # Observe all HTTP timings - https://blog.cloudflare.com/a-question-of-timing
local-debug # Debug container locally
local-run # Run container locally: available on http://localhost:9000
test # Test VTC + acceptance locally
test-acceptance-fastly *ARGS # Test CURRENT production
test-acceptance-local # Test local setup
test-reports # Open test reports
test-reports-rm # Clear test reports
test-vtc # Test VCL config
[team]
cert fqdn # Show cert $fqdn for app
cert-add fqdn # Add cert $fqdn to app
certs # Show app certs
deploy tag=_DEFAULT_TAG # Deploy container image
envrc-secrets # Create .envrc.secrets with credentials from 1Password
ips # Show app IPs
local-debug-production # Debug production container locally - assumes envrc-secrets has already run
local-run-production # Run production container locally - assumes envrc-secrets has already run - available on http://localhost:9000
machines # Show app machines
publish tag=_DEFAULT_TAG # Publish container image - assumes envrc-secrets was already run
restart # Restart ALL app machines, one-by-one
scale # Scale production app
secrets # Set app secrets - assumes envrc-secrets was already run
status # Show app status
tag tag sha discussion # Tag a new release
test-acceptance-pipedream *ARGS # Test NEW production - Pipedream, the Changelog variant of Pipely
# Run the tests
just test
If you have any ideas on how to improve this, please open an issue or go straight for a pull request. We make this as easy as possible:
- All commits emphasize good commit messages (more text for humans)
- This repository is kept small & simple (single purpose: build the simplest CDN on Fly.io)
- Slow & thoughtful approach - join our journey via audio with transcripts or written
See you in our Zulip Chat 👋
Note
Join from https://changelog.com/~ . It requires signing up and requesting an invite before you can Log in