Files
Notebook/docs/DEPLOYMENT_COMPARISON.md

274 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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