diff --git a/docs/DEPLOYMENT_COMPARISON.md b/docs/DEPLOYMENT_COMPARISON.md new file mode 100644 index 0000000..75b39b6 --- /dev/null +++ b/docs/DEPLOYMENT_COMPARISON.md @@ -0,0 +1,273 @@ +# Deployment Options Comparison + +## Quick Decision Guide + +Choose based on your priorities: + +| Factor | Object Storage | Docker Instance | GitHub Pages (current) | +|--------|---------------|-----------------|------------------------| +| **Cost** | ~€1-2/month | ~€10/month | Free | +| **Setup Complexity** | Low | Medium | Very Low | +| **Control** | Limited | Full | Limited | +| **SSL/TLS** | Via CDN | Let's Encrypt | Automatic | +| **Custom Domain** | ✅ | ✅ | ✅ | +| **Scalability** | Excellent | Limited | Excellent | +| **Maintenance** | None | Regular updates | None | + +## Deployment Methods Overview + +### 1. Object Storage (S3-compatible) + +**Best for**: Low-traffic blogs, simple hosting needs + +**Pros**: +- Very low cost +- No server maintenance +- Highly scalable +- Built-in redundancy +- Pay only for what you use + +**Cons**: +- Limited server-side features +- HTTPS requires CDN or custom setup +- Less control over caching +- No server-side redirects + +**Setup time**: 30 minutes + +**Files needed**: +- `.gitea/workflows/deploy.yml` +- Scaleway API credentials + +**Documentation**: [SCALEWAY_DEPLOYMENT.md](./SCALEWAY_DEPLOYMENT.md) + +--- + +### 2. Docker on Scaleway Instance + +**Best for**: Sites needing more control, custom configurations + +**Pros**: +- Full server control +- Easy SSL with Let's Encrypt +- Custom Nginx configuration +- Server-side redirects/rewrites +- Better caching control +- No per-request costs + +**Cons**: +- Higher fixed cost +- Requires server maintenance +- Need to manage updates +- Single point of failure (without HA) + +**Setup time**: 1-2 hours + +**Files needed**: +- `.gitea/workflows/deploy-docker.yml` +- SSH key pair +- Docker Compose configuration + +**Documentation**: [SCALEWAY_DEPLOYMENT_DOCKER.md](./SCALEWAY_DEPLOYMENT_DOCKER.md) + +--- + +## Cost Breakdown + +### Object Storage +``` +Storage: 1 GB × €0.01 = €0.01/month +Traffic: 50 GB/month (first 75 GB free) +Total: €0.01-0.50/month +``` + +### Object Storage + CDN +``` +CDN base: €1/month +Storage: €0.01/month +Traffic: Reduced origin traffic +SSL: Included +Total: €1-3/month +``` + +### Docker Instance (DEV1-S) +``` +Instance: €7-10/month +Traffic: 100 GB included +SSL: Free (Let's Encrypt) +Total: €10/month (predictable) +``` + +### GitHub Pages (Current) +``` +Free for public repositories +Custom domain: ✅ +SSL: Automatic +Limits: 100 GB bandwidth/month, 1 GB storage +``` + +--- + +## Traffic Threshold Analysis + +When to choose each option: + +### Stay with GitHub Pages if: +- Traffic < 100 GB/month +- No special requirements +- Happy with current setup + +### Choose Object Storage if: +- Want French hosting +- Traffic 100-500 GB/month +- Need cost optimization +- Minimal configuration needs + +### Choose Docker Instance if: +- Need custom server config +- Traffic > 500 GB/month +- Want full control +- Need advanced features (auth, API endpoints, etc.) + +--- + +## Migration Path + +### Phase 1: Parallel Deployment +1. Keep GitHub Pages active +2. Set up Scaleway (either method) +3. Test thoroughly + +### Phase 2: DNS Switch +``` +notebook.arnodo.fr → Scaleway +netlify/pages subdomain → keep as backup +``` + +### Phase 3: Complete Migration +- Update all links +- Verify analytics +- Monitor for 30 days +- Decommission old setup + +--- + +## Performance Comparison + +| Metric | GitHub Pages | Object Storage | Docker Instance | +|--------|-------------|----------------|-----------------| +| **TTFB** | ~50-100ms | ~30-50ms | ~20-40ms | +| **Global CDN** | ✅ | Optional | No (single region) | +| **HTTP/2** | ✅ | ✅ | ✅ | +| **Brotli** | ✅ | ❌ | ✅ (configurable) | +| **Caching** | Good | Basic | Full control | + +--- + +## Recommended Approach + +### For Your Use Case (Network Engineer Blog): + +I recommend **Object Storage** initially because: + +1. **Cost-effective**: ~€1/month vs €10/month +2. **Low maintenance**: No server to manage +3. **Scalable**: Can handle traffic spikes +4. **French hosting**: Data sovereignty if needed +5. **Easy rollback**: Keep GitHub Pages as backup + +### Upgrade path: +``` +Object Storage → Add CDN if needed → Docker instance only if traffic justifies it +``` + +--- + +## Implementation Checklist + +### Object Storage Setup +- [ ] Create Scaleway account +- [ ] Create Object Storage bucket +- [ ] Configure bucket for static hosting +- [ ] Generate API keys +- [ ] Add secrets to Gitea +- [ ] Update DNS +- [ ] Test deployment +- [ ] Monitor costs + +### Docker Instance Setup +- [ ] Create Scaleway instance +- [ ] Install Docker and dependencies +- [ ] Configure Nginx +- [ ] Set up SSL certificate +- [ ] Create deployment user +- [ ] Configure SSH keys +- [ ] Update Gitea workflow +- [ ] Set up monitoring +- [ ] Configure backups + +--- + +## Maintenance Requirements + +### Object Storage +- **Daily**: None +- **Weekly**: None +- **Monthly**: Review costs +- **Yearly**: Review retention policy + +### Docker Instance +- **Daily**: Check monitoring +- **Weekly**: Review logs +- **Monthly**: Apply security updates +- **Quarterly**: Review backups, update SSL + +--- + +## Support & Resources + +### Scaleway +- Docs: https://www.scaleway.com/en/docs/ +- Support: Via console ticket system +- Community: Discord, Forum + +### Hugo +- Docs: https://gohugo.io/documentation/ +- Community: Forum, Discord + +### Gitea +- Docs: https://docs.gitea.com/ +- Actions: https://docs.gitea.com/usage/actions + +--- + +## Emergency Rollback Plan + +If Scaleway deployment fails: + +1. **Keep GitHub Pages active** during testing +2. **DNS TTL**: Set to 300s (5 min) during migration +3. **Rollback**: Change DNS back to GitHub Pages +4. **Monitoring**: Set up uptime monitoring (UptimeRobot, etc.) + +--- + +## Next Steps + +1. ✅ Review both deployment options +2. ⬜ Choose deployment method +3. ⬜ Run setup script (`scripts/setup-scaleway.sh`) +4. ⬜ Configure DNS +5. ⬜ Add secrets to Gitea +6. ⬜ Merge deployment branch +7. ⬜ Test deployment +8. ⬜ Monitor for issues +9. ⬜ Update documentation + +--- + +Need help deciding? Consider: +- **Budget**: Object Storage +- **Control**: Docker Instance +- **Simplicity**: Object Storage +- **Features**: Docker Instance