Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Generate static sites from Markdown files with Caddy (2018) (thomaspuppe.de)
106 points by indigodaddy on Jan 31, 2022 | hide | past | favorite | 29 comments


This is a cool article. Unfortunately the described syntax only covers Caddy V1. Caddy has been on V2 since early 2020, and the V1 examples won't work on V2 for markdown usage.

These links can help with Caddy V2 Markdown usage:

https://caddyserver.com/docs/caddyfile/directives/templates

https://github.com/caddyserver/website/blob/master/src/docs/...

https://caddy.community/t/markdown-support-in-v2/6984

Thanks to the Caddy team for such an excellent program!


Fantastic idea, I needed something like this last year to generate a coding blog from markdown.

What's your take on code formatting and syntax highlighting?

I only ask as I got so frustrated installing and using Jekyll on Azure that I ended up rolling my own markdown-to-webpage script that would format code snippets nicely.

There's a definitely gap in the market for something that's not quite WordPress, but better than Jekyll. Would be interested to see what you think.


Directly went to look at the source.

What is really really nice, is that the templates[0] is written as a Caddy module. It means that you should be able to "clone" and extend it easily to experiment with complex modules.

You could definitely use it as a basis to have your CMS based on this module.

[0]: https://github.com/caddyserver/caddy/tree/master/modules/cad...


I think so too. I had to roll my own (which was half the fun) and slowly add new features as I go.

Compiled with Crystal-lang and SQLite; you just drop in a single binary and away you go.


Caddy is getting more and more interesting every day. I've been long time Apache user since 1999 or something and I can (mostly) bend its configuration to my liking to do what I need so I've sat out this whole Nginx brouhaha because for my use cases it provides close to zero added value.

But Caddy just might've convinced me to install it on my server for pet projects and giving it a test drive.


I've used all three of those for both hobby and professional services deployed to production (going apache -> nginx -> caddy). The only major difference is the configuration syntax, that has gotten easier and easier moving from them.

What difference do you see between apache and caddy that makes the move more worth it compared to apache and nginx? I guess the added value is much more going from apache to caddy but not apache to nginx, what added value is that for you?


I haven't used Caddy for this use case, but as a simple proxy and file server it's just great. IMO it's largely what Traefik promises but fails to keep. An actual production Caddy configuration with HTTPS set up, web sockets and everything fits on a single line (or 3 if you want multiple hosts).

I can see myself checking this out (but for v2, of course). It looks to be just as nice in this area as in the others.

More software should strive to be this user friendly.


I would argue against this being “static” in the pure sense of the word (since Caddy is still going to parse the markup, etc.), but it is an extremely neat trick.


Wouldn't this more properly be classified as a static site server?


If you have one file format (markdown in this case) and transforms it to another format (html and css in this case) on every request, I wouldn't call it a static site (server) anymore. I'd only call it a static site server if it serves static files without modifications on request, and if you need to generate those static files from other files, that process is decoupled from incoming requests to the server.


I guess it's kind a spectrum:

1. Wordpress in a default install, definitely not static

2. Wordpress with a caching plugin, wherein the cache is generated on request is only expired on page update. Still not really static

3. Wordpress with a caching plugin, where the cache is created on page edit but still served by the PHP code

4. Wordpress with a caching plugin, where the cache is created on page edit but pushed to another server to serve (i.e. using it as a headless CMS)

5. Your standard markdown -> html static site tool

To me step 4 is when the resulting site crosses over to a static site.


6. Write your pages in html and save them in ~/public/www on your university’s server.


I really like the Caddyfile and template syntax. Is where a way to use this just to generate static HTML, without the server part? I kind of want to stick with OpenBSDs plain old httpd as it comes ootb and fullfills basically all the needs I have quite fine.

Currently, I do all my HTML manually. I looked into static site generators recently but didn't really like anything I've seen, from Jekyll/Hugo to smaller projects like blogc…


You could use Gomplate: https://docs.gomplate.ca/


I thought about it. Why do you even need static site generators when all you have to do is throw up a CDN with your dynamic site being the origin server? Same thing pretty much as the static site generator. You can even "generate" the static pages by visiting them yourself.

Oh yeah, and when something on a page changes, you tell the cache to invalidate some tags.


There is some advantage in security, deployment is easier, performance can be better if page generation is intensive, and backend data stores can be avoided completely. None of these are major reasons though and it’s mostly just popular tech stacks from the rise of javascript frameworks and UI.

Most static hosting providers are just a basic file/web server with a CDN in front. It’s especially interesting as they now have come full circle with generate-on-demand pages, which is basically a dynamic backend.


Because then you have to run a dynamic site. Static site hosts are much easier to come by for free.



This is basically what people used to do with server-side frameworks long before the frontend framework SPA/SSG/SSR craziness wiped out people's memories.


Is there a webserver that can take org-mode emacs files and display them as html?

Or ask another way something like Caddy but with .org files instead of .md?

Ps: I Kno about org-publish but I want a webserver that executes org-publish without my involvement.


Not a webserver, but maybe if the Nikola-SSG [0] is automated with some folder-watching-tool to re-generate the files? Or writing your own Caddy-module that does exactly that?

[0] https://getnikola.com


I always liked Caddy for its simple config and automation around TLS certificate management. I hope it doesn’t go down the path of feature bloat. Markdown rendering seems innocent enough, but what will be next?


This is not new, it's been in Caddy for over 4 years.

Caddy is very modular by design, so anyone can write plugins to augment its capabilities. The "templates" directive is in the standard distribution, because it's simple and generally useful.


Caddy looks great. I'm used to:

1. generate html from markdown 2. copy the generated html to /var/www 3. Let nginx serve (and cache) it

Would caddy fulfil these requirements as well? Is it as performant as nginx?


Yes, this would work with Caddy without you needing to generate the markdown yourself or copy the generated html to /var/www. You simply edit the .md files and Caddy automatically generates the HTML on the fly. I don't have any benchmarks compared to nginx but I'm using Caddy on multiple personal projects and I don't have any complaints about Caddy's performance.


Does Caddy support generating HTML files? I use Hugo for a few websites that I host on S3 + CloudFront and am very happy with AWS handling the back-end part this stack, and wouldn't want to switch to a server that I would now need to manage.


Caddy doesn't emit static files in this case, instead it on-the-fly transforms your .md files on disk into HTML output that it serves directly to the client. Caddy is a server first, which includes a template engine for convenience.

If your workflow with static files cached by a CDN already works for you, then this is probably not going to help you.


Note: article hails from 2018.


Caddy it's the best thing ever. Having SSL out of the box it's amazing. I tried ngnix etc and was a pain.

I can have a dedicated server and host a ton of stuff with docker and use caddy to direct to each domain. I know nothing new, but config is easy compared to rest. And again, I can't stress enough how easy is to setup the SSL.

I'm going to donate some money because it really saved me a ton of time.

For static files the best setup I think it's cloudflare workers with kv and fallback on s3 bucket for huge files. S3 is much cheaper compared to kv storage. (Backblaze + cloudflare bandwidth it's also free. Caveat: if you host non website stuff like 3d assets or raw images you might be banned by cloudflare)

I'm hosting many websites for clients with this setup and it's very very reliable and can reach around 99 on Google page speed.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: