6.5 KiB
title, description, navigation
| title | description | navigation | ||
|---|---|---|---|---|
| Blog - Lightning-Fast Static Site Delivery | Speed is my middle name |
|
"Speed is my middle name" - Static Web Server
What's This All About?
This stack serves your static blog with the speed of a caffeinated cheetah! It's a blazing-fast static web server written in Rust :icon{name="simple-icons:rust"}, serving pre-built HTML, CSS, and JavaScript files without any server-side processing overhead.
The Speed Demon
:icon{name="lucide:zap"} Static Web Server
Container: blog_app
Image: joseluisq/static-web-server:latest
Home: https://pivoine.art
Think of this as nginx's cooler, faster cousin who runs marathons in their spare time:
- :icon{name="lucide:rocket"} Blazing Fast: Written in Rust for maximum performance
- :icon{name="lucide:package"} Tiny Footprint: Minimal resource usage
- :icon{name="lucide:target"} Simple: Does one thing really, really well
- :icon{name="lucide:lock"} Secure: No dynamic code execution means fewer attack vectors
- :icon{name="lucide:bar-chart"} HTTP/2: Modern protocol support for faster loading
Architecture
User Request
↓
Traefik (SSL + Routing)
↓
Static Web Server
↓
/var/www/pivoine.art (Your beautiful content!)
Configuration Breakdown
Volume Mapping
Your blog content lives at:
Host: /var/www/pivoine.art
Container: /public
This means you can update your blog by just replacing files on the host! No container restart needed (usually).
No Health Check? No Problem!
Static web servers are so simple and reliable that Docker health checks aren't really necessary. Traefik can tell if it's alive by checking the port - if it responds, it's healthy!
Traefik Magic :icon{name="lucide:hat"}:icon
All the routing is handled by Traefik labels:
- HTTP → HTTPS: Automatic redirect for security
- Domain:
pivoine.art(your main domain!) - Compression: Enabled for faster page loads
- SSL: Handled by Traefik with Let's Encrypt
Typical Workflow
Publishing New Content
-
Build your static site (Hugo, Jekyll, Gatsby, etc.):
hugo build # or whatever your generator uses -
Copy files to the server:
rsync -avz public/ user@server:/var/www/pivoine.art/ -
That's it! The server automatically serves the new content
No restarts, no cache clearing, no drama! :icon{name="lucide:drama"}
What Makes Static Sites Awesome
Speed :icon
- No database queries
- No server-side rendering
- Just pure file serving
- CDN-friendly
Security :icon
- No SQL injection
- No XSS vulnerabilities (from server)
- No admin panel to hack
- No WordPress updates to forget
Cost :icon
- Minimal server resources
- Can handle huge traffic spikes
- No expensive database servers
- Can run on a potato (almost)
Reliability :icon
- Nothing to break
- Nothing to update constantly
- No dependency conflicts
- Rock solid uptime
Ports & Networking
- Internal Port: 80
- External Access: Via Traefik at https://pivoine.art
- Network:
kompose(the usual gang)
Common Static Site Generators
Hugo :icon
The speed champion, written in Go
hugo new site myblog
hugo new posts/my-first-post.md
hugo server -D
hugo build
Jekyll :icon
The Ruby classic, GitHub Pages favorite
jekyll new myblog
jekyll serve
jekyll build
Gatsby :icon
React-based, GraphQL-powered
gatsby new myblog
gatsby develop
gatsby build
11ty (Eleventy) :icon
Simple, JavaScript-based
npx @11ty/eleventy
Performance Tips :icon
- Image Optimization: Use WebP or AVIF formats
- Minification: Compress CSS, JS, HTML
- Lazy Loading: Don't load images until needed
- CDN: Put Cloudflare in front (optional but awesome)
- HTTP/2: Already supported by the server!
Maintenance Tasks
View Logs
docker logs blog_app -f
Check What's Being Served
docker exec blog_app ls -lah /public
Restart Container
docker compose restart
Update Content
Just copy new files to /var/www/pivoine.art - no restart needed!
Troubleshooting
Q: Getting 404 errors?
A: Check if files exist at /var/www/pivoine.art and paths match URLs
Q: Changes not showing up?
A: Clear browser cache (Ctrl+Shift+R) or check if files were actually copied
Q: Slow loading?
A: Static sites are rarely slow - check your image sizes and network
Q: Can't access the site?
A: Verify Traefik is running and DNS points to your server
Security Considerations :icon
✅ Good News: Static sites are inherently secure
✅ HTTPS: Handled by Traefik with automatic certificates
✅ No Backend: No server-side code to exploit
✅ Headers: Can add security headers via Traefik
❌ Watch Out For:
- XSS in JavaScript if you're doing client-side stuff
- CORS issues if loading from other domains
- File permissions on the host volume
Advanced: Custom 404 Pages
Create a 404.html in your static site root:
<!DOCTYPE html>
<html>
<head>
<title>Page Not Found</title>
</head>
<body>
<h1>Oops! 404</h1>
<p>That page doesn't exist. Maybe it never did. 🤔</p>
</body>
</html>
The server will automatically use it for missing pages!
Content Ideas for Your Blog :icon
- :icon{name="lucide:laptop"} Tech tutorials and guides
- :icon{name="lucide:palette"} Design showcases and portfolios
- :icon{name="lucide:file-text"} Personal thoughts and experiences
- :icon{name="lucide:wrench"} Project documentation
- :icon{name="lucide:target"} Case studies and success stories
- 🌟 Whatever makes your heart sing!
Fun Facts
- Rust makes this server crazy efficient (like, really crazy)
- Can handle thousands of requests per second
- Used by developers worldwide who value speed
- Open source and actively maintained
- Probably faster than most dynamic CMSs on their best day
Resources
"The fastest code is the code that doesn't run. The fastest server is the one that just serves files." - Ancient DevOps Wisdom :icon{name="lucide:scroll"}