Add comprehensive Scaleway deployment documentation
This commit is contained in:
266
docs/SCALEWAY_DEPLOYMENT.md
Normal file
266
docs/SCALEWAY_DEPLOYMENT.md
Normal file
@@ -0,0 +1,266 @@
|
|||||||
|
# Scaleway Deployment Guide for notebook.arnodo.fr
|
||||||
|
|
||||||
|
This guide explains how to deploy your Hugo website to Scaleway using Gitea Actions and serve it at `notebook.arnodo.fr`.
|
||||||
|
|
||||||
|
## Architecture Overview
|
||||||
|
|
||||||
|
```
|
||||||
|
Gitea (gitea.arnodo.fr) → Gitea Actions → Build Hugo → Deploy to Scaleway Object Storage → Served via notebook.arnodo.fr
|
||||||
|
```
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Scaleway account
|
||||||
|
- Scaleway CLI installed (optional but recommended)
|
||||||
|
- Domain `arnodo.fr` with DNS control
|
||||||
|
- Gitea Actions enabled on your Gitea instance
|
||||||
|
|
||||||
|
## Step 1: Create Scaleway Object Storage Bucket
|
||||||
|
|
||||||
|
### Via Scaleway Console:
|
||||||
|
1. Go to **Object Storage** in Scaleway console
|
||||||
|
2. Click **Create a bucket**
|
||||||
|
3. Name: `notebook-arnodo-fr` (or your choice)
|
||||||
|
4. Region: `fr-par` (Paris) - recommended for France
|
||||||
|
5. Click **Create bucket**
|
||||||
|
|
||||||
|
### Via Scaleway CLI:
|
||||||
|
```bash
|
||||||
|
scw object bucket create name=notebook-arnodo-fr region=fr-par
|
||||||
|
```
|
||||||
|
|
||||||
|
## Step 2: Configure Bucket for Static Website Hosting
|
||||||
|
|
||||||
|
### Via Console:
|
||||||
|
1. Go to your bucket
|
||||||
|
2. Click **Bucket settings**
|
||||||
|
3. Enable **Website configuration**
|
||||||
|
4. Set index document: `index.html`
|
||||||
|
5. Set error document: `404.html`
|
||||||
|
|
||||||
|
### Via CLI:
|
||||||
|
```bash
|
||||||
|
scw object bucket update notebook-arnodo-fr website-enable=true website-index=index.html website-error=404.html region=fr-par
|
||||||
|
```
|
||||||
|
|
||||||
|
## Step 3: Create Scaleway API Keys
|
||||||
|
|
||||||
|
1. Go to **IAM** → **API Keys**
|
||||||
|
2. Click **Generate API key**
|
||||||
|
3. Name it: `gitea-ci-deployment`
|
||||||
|
4. Save both:
|
||||||
|
- **Access Key ID**
|
||||||
|
- **Secret Access Key**
|
||||||
|
|
||||||
|
## Step 4: Configure Bucket Policy for Public Read
|
||||||
|
|
||||||
|
Create a bucket policy to allow public read access:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"Version": "2023-04-17",
|
||||||
|
"Id": "PublicRead",
|
||||||
|
"Statement": [
|
||||||
|
{
|
||||||
|
"Sid": "PublicReadGetObject",
|
||||||
|
"Effect": "Allow",
|
||||||
|
"Principal": "*",
|
||||||
|
"Action": "s3:GetObject",
|
||||||
|
"Resource": "notebook-arnodo-fr/*"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Apply via CLI:
|
||||||
|
```bash
|
||||||
|
cat > policy.json << EOF
|
||||||
|
{
|
||||||
|
"Version": "2023-04-17",
|
||||||
|
"Id": "PublicRead",
|
||||||
|
"Statement": [
|
||||||
|
{
|
||||||
|
"Sid": "PublicReadGetObject",
|
||||||
|
"Effect": "Allow",
|
||||||
|
"Principal": "*",
|
||||||
|
"Action": "s3:GetObject",
|
||||||
|
"Resource": "notebook-arnodo-fr/*"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
scw object bucket update notebook-arnodo-fr --policy=@policy.json region=fr-par
|
||||||
|
```
|
||||||
|
|
||||||
|
## Step 5: Configure Gitea Secrets
|
||||||
|
|
||||||
|
Add these secrets to your Gitea repository:
|
||||||
|
|
||||||
|
1. Go to your Notebook repository in Gitea
|
||||||
|
2. Navigate to **Settings** → **Secrets**
|
||||||
|
3. Add the following secrets:
|
||||||
|
- `SCW_ACCESS_KEY`: Your Scaleway Access Key
|
||||||
|
- `SCW_SECRET_KEY`: Your Scaleway Secret Key
|
||||||
|
- `SCW_BUCKET_NAME`: `notebook-arnodo-fr`
|
||||||
|
|
||||||
|
## Step 6: DNS Configuration
|
||||||
|
|
||||||
|
### Option A: Direct S3 Bucket Access (Simple)
|
||||||
|
|
||||||
|
Add a CNAME record:
|
||||||
|
```
|
||||||
|
notebook.arnodo.fr CNAME notebook-arnodo-fr.s3-website.fr-par.scw.cloud.
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note**: The bucket URL will be: `http://notebook-arnodo-fr.s3-website.fr-par.scw.cloud`
|
||||||
|
|
||||||
|
### Option B: Using Scaleway CDN (Recommended for Production)
|
||||||
|
|
||||||
|
1. Go to **Scaleway CDN** in console
|
||||||
|
2. Create a new CDN endpoint
|
||||||
|
3. Origin: Your bucket endpoint
|
||||||
|
4. Custom domain: `notebook.arnodo.fr`
|
||||||
|
5. Enable SSL/TLS
|
||||||
|
6. Add CNAME record as provided by Scaleway
|
||||||
|
|
||||||
|
### Option C: Using Nginx Reverse Proxy on Scaleway Instance
|
||||||
|
|
||||||
|
If you want more control:
|
||||||
|
|
||||||
|
1. Create a Scaleway Instance (smallest one: DEV1-S)
|
||||||
|
2. Install Nginx
|
||||||
|
3. Configure Nginx to proxy to your S3 bucket
|
||||||
|
|
||||||
|
Nginx config example:
|
||||||
|
```nginx
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name notebook.arnodo.fr;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://notebook-arnodo-fr.s3-website.fr-par.scw.cloud;
|
||||||
|
proxy_set_header Host notebook-arnodo-fr.s3-website.fr-par.scw.cloud;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Set up Let's Encrypt for HTTPS:
|
||||||
|
```bash
|
||||||
|
sudo apt install certbot python3-certbot-nginx
|
||||||
|
sudo certbot --nginx -d notebook.arnodo.fr
|
||||||
|
```
|
||||||
|
|
||||||
|
## Step 7: Test the Deployment
|
||||||
|
|
||||||
|
1. Commit and push to the `main` branch
|
||||||
|
2. Check Gitea Actions for build status
|
||||||
|
3. Verify files are uploaded to Scaleway bucket
|
||||||
|
4. Access your site at `notebook.arnodo.fr`
|
||||||
|
|
||||||
|
## Verification Commands
|
||||||
|
|
||||||
|
Check bucket contents:
|
||||||
|
```bash
|
||||||
|
s3cmd ls s3://notebook-arnodo-fr/
|
||||||
|
```
|
||||||
|
|
||||||
|
Test website endpoint:
|
||||||
|
```bash
|
||||||
|
curl -I http://notebook-arnodo-fr.s3-website.fr-par.scw.cloud
|
||||||
|
```
|
||||||
|
|
||||||
|
## Cost Estimation (Scaleway)
|
||||||
|
|
||||||
|
### Object Storage:
|
||||||
|
- Storage: €0.01 per GB/month
|
||||||
|
- Outbound traffic: First 75 GB free, then €0.01 per GB
|
||||||
|
- Typical blog (1 GB): ~€0.01/month + traffic
|
||||||
|
|
||||||
|
### Optional Instance (if using reverse proxy):
|
||||||
|
- DEV1-S: ~€0.01/hour (~€7/month)
|
||||||
|
- With 100% uptime SLA: ~€10/month
|
||||||
|
|
||||||
|
### CDN (if needed):
|
||||||
|
- €1/month base + traffic costs
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Build fails in Gitea Actions
|
||||||
|
- Check Hugo version compatibility
|
||||||
|
- Verify theme submodules are properly checked out
|
||||||
|
- Check build logs in Gitea Actions tab
|
||||||
|
|
||||||
|
### Files not accessible
|
||||||
|
- Verify bucket policy allows public read
|
||||||
|
- Check bucket website configuration
|
||||||
|
- Ensure files were uploaded (check s3cmd output)
|
||||||
|
|
||||||
|
### DNS not resolving
|
||||||
|
- Wait for DNS propagation (up to 48 hours, usually minutes)
|
||||||
|
- Verify CNAME record with: `dig notebook.arnodo.fr`
|
||||||
|
- Check TTL settings
|
||||||
|
|
||||||
|
### SSL Certificate Issues
|
||||||
|
- If using reverse proxy, ensure Certbot ran successfully
|
||||||
|
- If using CDN, verify SSL certificate provisioning in Scaleway console
|
||||||
|
|
||||||
|
## Migration from GitHub Pages
|
||||||
|
|
||||||
|
1. Remove GitHub Actions workflow (or keep both temporarily)
|
||||||
|
2. Update any hardcoded URLs in your Hugo config
|
||||||
|
3. Verify all functionality works on Scaleway
|
||||||
|
4. Update DNS from GitHub Pages to Scaleway
|
||||||
|
5. Remove GitHub Pages when satisfied
|
||||||
|
|
||||||
|
## Advanced: Cache Invalidation
|
||||||
|
|
||||||
|
If using Scaleway CDN, add cache invalidation to workflow:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install Scaleway CLI in workflow
|
||||||
|
- name: Install Scaleway CLI
|
||||||
|
run: |
|
||||||
|
curl -o /usr/local/bin/scw -L "https://github.com/scaleway/scaleway-cli/releases/latest/download/scaleway-cli_$(uname -s)_$(uname -m)"
|
||||||
|
chmod +x /usr/local/bin/scw
|
||||||
|
|
||||||
|
- name: Invalidate CDN cache
|
||||||
|
run: |
|
||||||
|
scw edge invalidate path=/* zone=fr-par
|
||||||
|
env:
|
||||||
|
SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY }}
|
||||||
|
SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY }}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Monitoring
|
||||||
|
|
||||||
|
Set up Scaleway monitoring:
|
||||||
|
1. Enable bucket metrics in Scaleway console
|
||||||
|
2. Configure alerts for:
|
||||||
|
- High traffic usage
|
||||||
|
- Failed requests
|
||||||
|
- Storage size
|
||||||
|
|
||||||
|
## Backup Strategy
|
||||||
|
|
||||||
|
While Object Storage is highly durable, consider:
|
||||||
|
1. Git repository is your source of truth
|
||||||
|
2. Enable Object Storage versioning
|
||||||
|
3. Consider cross-region replication for critical sites
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
1. Enable HTTPS (via CDN or reverse proxy)
|
||||||
|
2. Configure custom error pages
|
||||||
|
3. Set up monitoring and alerts
|
||||||
|
4. Optimize images and assets
|
||||||
|
5. Consider adding a CDN for global performance
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
For questions or issues, refer to:
|
||||||
|
- [Scaleway Object Storage Docs](https://www.scaleway.com/en/docs/storage/object/)
|
||||||
|
- [Hugo Documentation](https://gohugo.io/documentation/)
|
||||||
|
- [Gitea Actions Documentation](https://docs.gitea.com/usage/actions)
|
||||||
Reference in New Issue
Block a user