Avant-propos
Dans le paysage actuel du développement web, le choix de l'infrastructure de stockage est une décision stratégique qui impacte directement la performance, la sécurité, la scalabilité et les coûts opérationnels de votre application.
Ce guide détaillé vous accompagne à travers l'ensemble du processus de configuration d'une solution de stockage d'objets professionnelle utilisant Scaleway Object Storage couplé à Dokploy, la plateforme de déploiement open-source. Nous aborderons non seulement les aspects techniques, mais également les enjeux stratégiques qui justifient ce choix.
Contexte du projet
Notre architecture repose sur :
Laravel pour l'API backend, exploitant les dernières fonctionnalités du framework
Nuxt / Vue.js pour le frontend, offrant une expérience utilisateur réactive et moderne
PostgreSQL comme système de gestion de base de données relationnelle
FrankenPHP comme serveur applicatif haute performance
Dokploy comme plateforme de déploiement et d'orchestration
Hostinger VPS KVM2 comme infrastructure de base (Ubuntu)
Scaleway Object Storage comme solution de stockage de médias et de sauvegardes
Sommaire détaillé
Contexte et enjeux stratégiques
Analyse comparative des solutions de stockage cloud
Pourquoi Scaleway Object Storage ?
Architecture de la solution
Prérequis et préparation
Création du bucket Object Storage
Génération et gestion des clés API
Configuration des permissions IAM
Configuration de la destination S3 dans Dokploy
Résolution détaillée des erreurs courantes
Intégration avec Laravel
Configuration des sauvegardes automatiques
Sécurité et bonnes pratiques
Performances et optimisation
Surveillance et monitoring
Conclusion et perspectives
Contexte et enjeux stratégiques
La problématique du stockage dans les applications web modernes
Une application web moderne manipule une quantité croissante de données non structurées :
Images et vidéos uploadées par les utilisateurs
Fichiers générés par l'application (exports, rapports)
Sauvegardes de bases de données
Logs et traces d'activité
Assets statiques (CSS, JavaScript, polices)
Ces données doivent être :
Accessibles : à faible latence depuis n'importe quel point du globe
Durables : protégées contre la perte et la corruption
Scalables : capables d'absorber une croissance exponentielle
Sécurisées : avec des contrôles d'accès granulaires
Économiques : avec un coût total de possession maîtrisé
Les spécificités du contexte camerounais
Notre application cible une audience principalement basée au Cameroun et en Afrique de l'Ouest. Cette particularité géographique impose des contraintes spécifiques :
Latence réseau : Les infrastructures cloud américaines (AWS us-east-1, us-west-2) génèrent des temps de réponse élevés (>200ms) pour les utilisateurs africains
Coûts de transfert : Les frais de sortie de données (egress) des fournisseurs américains sont particulièrement onéreux pour les pays en développement
Souveraineté des données : Les réglementations locales et le RGPD imposent parfois un hébergement des données dans des juridictions spécifiques
Pourquoi Dokploy ?
Dokploy s'impose comme une alternative open-source mature aux solutions propriétaires :
Critère | Dokploy | Vercel | Netlify | Heroku |
|---|---|---|---|---|
Open-source | ✅ Oui | ❌ Non | ❌ Non | ❌ Non |
Auto-hébergement | ✅ Oui | ❌ Non | ❌ Non | ❌ Non |
Pricing | Gratuit | Payant | Payant | Payant |
Contrôle total | ✅ Oui | ❌ Non | ❌ Non | ❌ Non |
Backups S3 intégrés | ✅ Oui | ❌ Non | ❌ Non | ❌ Non |
Multi-environnements | ✅ Oui | ✅ Oui | ✅ Oui | ✅ Oui |
Rollbacks | ✅ Oui | ✅ Oui | ✅ Oui | ✅ Oui |
Dokploy offre une flexibilité inégalée tout en conservant une interface utilisateur intuitive et une documentation exhaustive.
Analyse comparative des solutions de stockage cloud
Le marché du stockage objet en 2026
Le stockage objet (Object Storage) est devenu la norme pour les applications cloud-native. Les principaux acteurs du marché sont :
AWS S3 : Leader historique, référence en matière de fiabilité
Google Cloud Storage : Excellente intégration avec l'écosystème GCP
Azure Blob Storage : Forte présence dans les environnements hybrides
Scaleway Object Storage : Acteur européen en pleine croissance
Backblaze B2 : Focus sur le rapport qualité-prix
Cloudflare R2 : Innovation sur la gratuité des egress
Wasabi : Simplification de la tarification
DigitalOcean Spaces : Simplicité d'utilisation
Comparaison détaillée des prix (estimation pour 1 To stocké + 500 Go téléchargés/mois)
Fournisseur | Stockage | Egress (500 Go) | Requêtes API | Total estimé |
|---|---|---|---|---|
AWS S3 (Standard) | $23.00 | $36.00 | $0.50 | ~$59.50 |
Scaleway (One Zone) | €8.03 | €4.25 | Inclus | ~€12.28 |
Backblaze B2 | $6.00 | $0.00* | $0.00 | ~$6.00 |
Cloudflare R2 | $15.00 | $0.00 | $0.00 | ~$15.00 |
Wasabi | $6.99 | $0.00 | $0.00 | ~$6.99 |
DigitalOcean Spaces | $5.00 | $0.00* | $0.00 | ~$5.00 |
Backblaze B2 offre 3x le volume de stockage en egress gratuit. DigitalOcean Spaces inclut 1 To d'egress dans l'abonnement.
Analyse des performances réseau
Fournisseur | Latence (Afrique Ouest) | Points de présence (CDN) | Performance petits fichiers |
|---|---|---|---|
AWS S3 | Élevée (>200ms) | Global (CloudFront) | Bonne |
Scaleway | Moyenne (~120ms) | Europe uniquement | Très bonne |
Cloudflare R2 | Faible (<80ms) | Global (Cloudflare CDN) | Excellente |
Backblaze B2 | Élevée (>180ms) | Partenariat Cloudflare | Bonne |
Analyse de la souveraineté des données
Fournisseur | Juridiction | Conforme RGPD | Datacenters en Afrique |
|---|---|---|---|
AWS S3 | USA | Oui (avec accord) | Le Cap (Afrique du Sud) |
Scaleway | France | Oui | Non |
Cloudflare R2 | USA | Oui | Non |
Backblaze B2 | USA | Oui | Non |
OVHcloud | France | Oui | Non |
Pourquoi Scaleway Object Storage ?
Des arguments solides en faveur de Scaleway
1. Une économie significative
Le coût total de possession (TCO) avec Scaleway est jusqu'à 5 fois inférieur à celui d'AWS S3 pour un usage web standard. Prenons un exemple concret :
Scénario d'un site e-commerce avec 500 000 images (taille moyenne : 200 Ko, soit 100 Go de stockage, 200 Go d'egress/mois) :
Poste | AWS S3 | Scaleway |
|---|---|---|
Stockage (100 Go) | $2.30 | €0.80 |
Egress (200 Go) | $14.40 | €1.25 |
Requêtes API | $0.15 | €0.00 |
Total mensuel | ~$16.85 | ~€2.05 |
Économie annuelle : ~$180
2. Une latence optimisée
Les datacenters Scaleway sont situés à Paris, Amsterdam et Varsovie
La distance Paris-Abuja est d'environ 4 500 km, contre 9 000 km pour New York
La latence moyenne est inférieure de 30-40% par rapport aux fournisseurs américains
Pour les utilisateurs camerounais, cela se traduit par des temps de chargement réduits de plusieurs centaines de millisecondes
3. Une transparence tarifaire
Pas de frais cachés pour les requêtes API
75 Go d'egress offerts chaque mois (contre 100 Go chez AWS)
Tarification à la seconde pour le stockage
Crédits de 100€ offerts à l'inscription
4. Une infrastructure écoresponsable
Datacenters alimentés à 100% par des énergies renouvelables
Indice d'efficacité énergétique (PUE) très bas
Initiative "Scaleway Green" avec compensation carbone
5. Une compatibilité S3 parfaite
Scaleway implémente l'API S3 dans son intégralité :
100% des méthodes S3 standard supportées
Compatible avec tous les clients S3 existants (AWS CLI, rclone, etc.)
Aucune modification de code nécessaire par rapport à AWS S3
Support des fonctionnalités avancées (presigned URLs, CORS, lifecycle policies)
Architecture de la solution
Vue d'ensemble
text
┌─────────────────────────────────────────────────────────────┐
│ Utilisateurs finaux │
│ (Cameroun / Afrique Ouest) │
└─────────────────────────┬───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Application Web (Nuxt) │
│ Vue.js / Interface utilisateur │
└─────────────────────────┬───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ API (Laravel / PHP) │
│ FrankenPHP Server │
└─────────┬─────────────────────────────┬───────────────────┘
│ │
▼ ▼
┌─────────────────────┐ ┌─────────────────────────────────┐
│ PostgreSQL (VPS) │ │ Object Storage (Scaleway) │
│ Données structurées│ │ name-media-bucket │
└─────────────────────┘ └─────────────────────────────────┘
│ ▲
│ │
▼ │
┌─────────────────────────────────────────────────────────────┐
│ Dokploy (VPS) │
│ - Orchestration des conteneurs │
│ - Sauvegardes automatisées PostgreSQL → Scaleway │
│ - Gestion des déploiements │
│ - Monitoring et supervision │
└─────────────────────────────────────────────────────────────┘Flux de données
Médias (upload) : Utilisateur → Laravel → Scaleway Object Storage
Médias (download) : Utilisateur → Scaleway Object Storage (lecture directe ou via CDN)
Sauvegardes PostgreSQL : PostgreSQL → Dokploy → Scaleway Object Storage
Assets statiques : Déploiement Laravel → Scaleway Object Storage
Prérequis et préparation
Liste des prérequis
Élément | Spécification |
|---|---|
Compte Scaleway | Organisation validée, moyen de paiement ajouté |
VPS | Vps |
Système d'exploitation | Ubuntu |
Dokploy | Version |
Accès SSH | Connexion root ou utilisateur avec sudo |
Domaine |
|
Bucket | Créé dans la région Paris (FR-PAR) |
Préparation du serveur
bash
# Mise à jour du système
sudo apt update && sudo apt upgrade -y
# Installation des outils essentiels
sudo apt install -y curl wget git unzip htop net-tools
# Vérification de Docker
docker --version
docker-compose --version
# Vérification du pare-feu
sudo ufw statusCréation du bucket Object Storage
Étape 1 : Accès à la console Scaleway
Connectez-vous à
https://console.scaleway.comDans le menu de gauche, développez "Storage"
Cliquez sur "Object Storage"
Étape 2 : Création du bucket
Cliquez sur "+ Create bucket" et remplissez le formulaire :
Champ | Valeur recommandée | Explication |
|---|---|---|
Bucket name |
| Doit être unique globalement |
Région | Paris (FR-PAR) | Plus proche de l'Afrique de l'Ouest |
Bucket visibility | Private | Sécurité par défaut, gestion des accès via IAM |
Storage class | Standard One Zone | Idéal pour un usage web standard |
Étape 3 : Options avancées
Option | Statut | Justification |
|---|---|---|
Encryption | Désactivé | Chiffrement par défaut chez Scaleway |
Versioning | Désactivé | Évite les coûts inutiles (doublon des objets) |
Object Lock | Désactivé | Non nécessaire pour des médias standards |
Free trial | Activé | 750 Go offerts pendant 90 jours |
Étape 4 : Finalisation
Cochez "I have read and accept Scaleway Storage specific conditions"
Sélectionnez "Web application" comme cas d'usage
Cliquez sur "Create bucket"
Génération et gestion des clés API
Pourquoi des clés API ?
Les clés API sont le mécanisme d'authentification qui permet à Dokploy et à Laravel d'interagir avec Scaleway Object Storage. Elles remplacent les mots de passe traditionnels et offrent :
Une granularité fine des permissions
La possibilité de révoquer des clés sans impacter d'autres services
Un traçage des actions par clé
Des politiques d'expiration configurables
Génération d'une clé API
Dans la console Scaleway, cliquez sur votre nom d'organisation en haut à droite
Sélectionnez "API keys" ou "IAM & API keys"
Cliquez sur "+ Generate API key"
Configuration de la clé :
Champ | Sélection | Explication |
|---|---|---|
Bearer | Application | Une clé dédiée à un usage automatisé |
Application |
| L'application qui utilisera cette clé |
Expiration | 1 an | Renouvellement annuel recommandé |
Object Storage | "Yes, set up preferred Project" | Attribue automatiquement les bons droits |
Project | Sélectionnez votre projet | Assure l'accès au bucket |
Stockage sécurisé des clés
bash
# Ne jamais commiter les clés dans le code source !
# Utiliser un fichier .env local ou un gestionnaire de mots de passe
echo "SCW_ACCESS_KEY=SCWXXXXXXXXXXXXXXXXX" >> .env.local
echo "SCW_SECRET_KEY=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" >> .env.localConfiguration des permissions IAM
Le modèle IAM de Scaleway
IAM (Identity and Access Management) est un framework qui permet de contrôler précisément qui peut faire quoi sur quelles ressources. Il repose sur trois concepts :
Principals : Les entités qui effectuent des actions (utilisateurs, applications)
Policies : Les ensembles de permissions attribués aux principals
Resources : Les objets sur lesquels les actions sont effectuées (buckets, objets)
Création de la politique
Allez dans IAM → Policies
Cliquez sur "Create policy"
Règle #1 :
Paramètre | Valeur |
|---|---|
Permissions |
|
Scope | Tous les projets |
Principal | Application |
Vérification de la politique
Une fois créée, vérifiez que :
La politique apparaît dans la liste des politiques attachées à votre application
Le bucket est bien accessible depuis la console Scaleway
La clé API est associée à l'application qui possède la politique
Configuration de la destination S3 dans Dokploy
Accès à la configuration
Connectez-vous à Dokploy (
https://dokploy.entreprise.com)Menu de gauche → Settings → S3 Destinations
Cliquez sur "Add S3 Destination"
Formulaire de configuration
Champ | Valeur | Notes |
|---|---|---|
Name |
| Nom descriptif pour l'interface Dokploy |
Provider | Scaleway Object Storage | Sélectionnez le provider correspondant |
Access Key |
| Copié depuis la console Scaleway |
Secret Key |
| Copié depuis la console Scaleway |
Bucket |
| Nom exact du bucket |
Region |
| Région du bucket |
Endpoint |
| Endpoint S3 de Scaleway |
Flag supplémentaire essentiel
Ajoutez le flag suivant :
text
--s3-force-path-style=falsePourquoi ce flag est indispensable ?
Sans ce flag, Dokploy utilise le mode "path-style" (URL en /bucket/object) alors que Scaleway attend le mode "virtual-hosted" (URL en bucket.s3.region.scw.cloud/object). Le flag force le bon format.
Test de connexion
Cliquez sur "Test connection"
Vérifiez que le résultat est vert (succès)
Si le test échoue, consultez la section Résolution des erreurs
Résolution détaillée des erreurs courantes
Erreur 1 : Access Denied (403)
Message : api error AccessDenied: Access Denied
Causes possibles :
La clé API n'a pas les droits sur le bucket
La politique IAM n'est pas correctement attachée
La clé API a été générée sans option Object Storage
Solution pas à pas :
bash
# 1. Vérifier la politique attachée
# Console Scaleway → IAM → Applications → Votre application → Policies
# 2. Régénérer la clé API avec la bonne option
# Console Scaleway → IAM → API Keys → Generate API key
# ✅ Sélectionner "An application"
# ✅ "Yes, set up preferred Project"
# ✅ Sélectionner le bon projet
# 3. Tester avec la CLI Scaleway
export SCW_ACCESS_KEY=VOTRE_ACCESS_KEY
export SCW_SECRET_KEY=VOTRE_SECRET_KEY
scw s3 ls entreprise-media-prodErreur 2 : TLS Certificate Error
Message : x509: certificate is valid for *.s3.fr-par.scw.cloud, not bucket.bucket.s3...
Cause : L'endpoint contient le nom du bucket (construction d'URL incorrecte)
Solution :
Champ | Valeur incorrecte | Valeur correcte |
|---|---|---|
Endpoint |
|
|
Flag | Manquant ou mal configuré |
|
Erreur 3 : Bucket Not Found
Message : The specified bucket does not exist
Causes possibles :
Faute de frappe dans le nom du bucket
Le bucket n'existe pas dans la région spécifiée
Solution :
bash
# Vérifier le nom exact du bucket dans la console Scaleway
# Vérifier la région : PAR = fr-parErreur 4 : Region Mismatch
Message : The bucket is in a different region
Solution :
bash
# La région de votre bucket est PAR (Paris)
# Utilisez fr-par dans Dokploy
Region: fr-parErreur 5 : Rate Limiting
Message : SlowDown ou Request limit exceeded
Solution :
bash
# Ajouter un flag pour réduire le débit si nécessaire
--s3-upload-concurrency=2
--s3-chunk-size=64MIntégration avec Laravel
Configuration des variables d'environnement
env
# .env
SCALEWAY_ACCESS_KEY=SCWXXXXXXXXXXXXXXXXX
SCALEWAY_SECRET_KEY=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
SCALEWAY_REGION=fr-par
SCALEWAY_BUCKET=entreprise-media-prod
SCALEWAY_ENDPOINT=https://s3.fr-par.scw.cloud
SCALEWAY_USE_PATH_STYLE=falseConfiguration du service de stockage
php
// config/filesystems.php
'disks' => [
'scaleway' => [
'driver' => 's3',
'key' => env('SCALEWAY_ACCESS_KEY'),
'secret' => env('SCALEWAY_SECRET_KEY'),
'region' => env('SCALEWAY_REGION'),
'bucket' => env('SCALEWAY_BUCKET'),
'endpoint' => env('SCALEWAY_ENDPOINT'),
'use_path_style_endpoint' => env('SCALEWAY_USE_PATH_STYLE', false),
'throw' => true,
'visibility' => 'public',
'options' => [
'CacheControl' => 'max-age=31536000, public',
'ContentDisposition' => 'inline',
],
],
],Upload d'images avec optimisation
php
<?php
namespace App\Services;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Intervention\Image\Facades\Image;
class MediaService
{
public function uploadMedia(UploadedFile $file, string $path): array
{
$originalName = $file->getClientOriginalName();
$extension = $file->getClientOriginalExtension();
$filename = uniqid() . '.' . $extension;
$fullPath = $path . '/' . $filename;
// Optimisation de l'image
$optimized = Image::make($file)
->resize(1200, null, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
})
->encode($extension, 80)
->stream();
// Upload vers Scaleway
$uploaded = Storage::disk('scaleway')->put(
$fullPath,
$optimized,
'public'
);
// Génération des URLs
$url = Storage::disk('scaleway')->url($fullPath);
$thumbnail = $this->generateThumbnail($file, $path . '/thumbnails');
return [
'path' => $fullPath,
'url' => $url,
'thumbnail' => $thumbnail,
'size' => $file->getSize(),
];
}
public function generatePresignedUrl(string $path, int $expiration = 3600): string
{
$client = Storage::disk('scaleway')->getDriver()->getAdapter()->getClient();
$command = $client->getCommand('GetObject', [
'Bucket' => env('SCALEWAY_BUCKET'),
'Key' => $path,
]);
$request = $client->createPresignedRequest($command, "+{$expiration} seconds");
return (string) $request->getUri();
}
}Gestion des médias dans les modèles
php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Media extends Model
{
protected $fillable = [
'filename',
'path',
'url',
'thumbnail_url',
'size',
'mime_type',
'disk',
'user_id',
];
protected $casts = [
'size' => 'integer',
];
public function getFullUrlAttribute(): string
{
return $this->url;
}
public function delete()
{
Storage::disk($this->disk)->delete($this->path);
if ($this->thumbnail_url) {
Storage::disk($this->disk)->delete($this->thumbnail_url);
}
return parent::delete();
}
}Configuration des sauvegardes automatiques
Sauvegarde de PostgreSQL
yaml
# Dans Dokploy, configuration du service PostgreSQL
version: '3.8'
services:
postgres:
image: postgres:17-alpine
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_NAME}
volumes:
- postgres_data:/var/lib/postgresql/data
- ./backups:/backups
backup:
schedule: "0 2 * * *" # Tous les jours à 2h
destination: "s3:entreprise-media-prod/backups/postgres"
retention: 7 # 7 jours de rétention
compress: true # Compression gzipScript de sauvegarde personnalisé
bash
#!/bin/bash
# /usr/local/bin/backup-postgres.sh
BACKUP_NAME="postgres_$(date +%Y%m%d_%H%M%S).sql.gz"
BACKUP_PATH="/tmp/${BACKUP_NAME}"
# Export de la base de données
pg_dump -U ${POSTGRES_USER} -d ${POSTGRES_DB} | gzip > ${BACKUP_PATH}
# Upload vers Scaleway
rclone copy ${BACKUP_PATH} scaleway:entreprise-media-prod/backups/postgres/
# Nettoyage local
rm ${BACKUP_PATH}
# Suppression des backups de plus de 30 jours
rclone delete --min-age 30d scaleway:entreprise-media-prod/backups/postgres/Planification dans Dokploy
Dans l'interface Dokploy, allez dans Schedules
Créez un nouveau schedule avec :
Name :
PostgreSQL BackupCommand :
/usr/local/bin/backup-postgres.shSchedule :
0 2 * * *
Sécurité et bonnes pratiques
Gestion des secrets
bash
# Ne jamais stocker les clés en clair dans le code
# Utiliser un fichier .env ou un gestionnaire de secrets
# Docker Compose avec secrets
secrets:
scaleway_access_key:
external: true
scaleway_secret_key:
external: truePolitiques de rotation des clés
Période | Action |
|---|---|
Tous les 90 jours | Vérification de l'expiration des clés |
Tous les 6 mois | Rotation des clés API |
Immédiat | Révocation en cas de soupçon de compromission |
Chiffrement des données
php
// Chiffrement des données sensibles avant upload
use Illuminate\Support\Facades\Crypt;
public function encryptAndUpload($data, $path)
{
$encrypted = Crypt::encryptString($data);
Storage::disk('scaleway')->put($path, $encrypted);
}
// Déchiffrement
public function downloadAndDecrypt($path)
{
$encrypted = Storage::disk('scaleway')->get($path);
return Crypt::decryptString($encrypted);
}CORS Configuration
json
{
"CORSRules": [
{
"AllowedOrigins": ["https://app.entreprise.com"],
"AllowedMethods": ["GET", "HEAD", "PUT", "POST"],
"AllowedHeaders": ["*"],
"ExposeHeaders": ["ETag"],
"MaxAgeSeconds": 3000
}
]
}Performances et optimisation
Optimisation des images à la volée
php
use Intervention\Image\Facades\Image;
public function getOptimizedImage($path, $width = 800, $height = null)
{
$cacheKey = md5($path . $width . $height);
return Cache::remember($cacheKey, 3600, function () use ($path, $width, $height) {
$image = Image::make(Storage::disk('scaleway')->get($path));
if ($height) {
$image->fit($width, $height);
} else {
$image->resize($width, null, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
});
}
return $image->encode('webp', 80)->__toString();
});
}Configuration du CDN
nginx
# Configuration Nginx pour servir les médias via CDN
location /media/ {
proxy_pass https://entreprise-media-prod.s3.fr-par.scw.cloud/;
proxy_set_header Host entreprise-media-prod.s3.fr-par.scw.cloud;
# Cache des fichiers statiques
expires 365d;
add_header Cache-Control "public, immutable";
# Compression
gzip on;
gzip_types image/webp image/jpeg image/png;
}Mise en cache des presigned URLs
php
public function getCachedPresignedUrl($path, $expiration = 3600)
{
$cacheKey = 'presigned_url_' . md5($path . $expiration);
return Cache::remember($cacheKey, 300, function () use ($path, $expiration) {
return Storage::disk('scaleway')
->temporaryUrl($path, now()->addSeconds($expiration));
});
}Surveillance et monitoring
Métriques à surveiller
Métrique | Seuil critique | Action |
|---|---|---|
Taille du bucket | > 80% du free trial | Vérifier l'usage |
Nombre de requêtes | > 100k/jour | Optimiser le cache |
Egress mensuel | > 50% du quota | Vérifier la facturation |
Temps de réponse | > 500ms | Vérifier la connexion |
Taux d'erreur | > 1% | Analyser les logs |
Monitoring avec Laravel Telescope
php
// config/telescope.php
'storage' => 'scaleway',
'storage_dir' => 'telescope',Alertes dans Dokploy
Dokploy permet de configurer des alertes :
yaml
# Règles d'alerte
alerts:
- name: "Bucket Usage High"
condition: "bucket_size > 750GB"
action: "email"
recipient: "admin@entreprise.com"Conclusion et perspectives
Récapitulatif des bénéfices
Bénéfice | Impact pour votre projet |
|---|---|
Économies substantielles | Jusqu'à 80% de réduction sur les coûts de stockage |
Performance optimisée | Latence réduite de 30-40% pour les utilisateurs africains |
Souveraineté renforcée | Hébergement des données dans l'UE (RGPD compliant) |
Scalabilité infinie | Capacité de stockage illimitée |
Fiabilité | Durabilité des données à 99.999999999% |
Intégration transparente | 100% compatible S3, sans modification de code |
Prochaines étapes potentielles
Mise en place d'un CDN : Cloudflare ou Scaleway CDN pour accélérer la distribution des médias
Migration vers Multi-AZ : Pour une haute disponibilité accrue
Automatisation des backups : Tests de restauration réguliers
Optimisation des images : WebP, AVIF, lazy loading
Monitoring avancé : Intégration avec Prometheus/Grafana
Annexes
A. Commandes utiles pour la CLI Scaleway
bash
# Installation de la CLI
curl -sL https://scw-cli.install.scaleway.com | bash
# Configuration
scw init
# Lister les buckets
scw s3 ls
# Upload d'un fichier
scw s3 cp file.txt s3://entreprise-media-prod/path/
# Téléchargement
scw s3 cp s3://entreprise-media-prod/file.txt ./file.txt
# Suppression
scw s3 rm s3://entreprise-media-prod/file.txtB. Variables d'environnement recommandées
env
# .env.laravel
SCALEWAY_ACCESS_KEY=SCWXXXXXXXXXXXXXXXXX
SCALEWAY_SECRET_KEY=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
SCALEWAY_REGION=fr-par
SCALEWAY_BUCKET=entreprise-media-prod
SCALEWAY_ENDPOINT=https://s3.fr-par.scw.cloud
SCALEWAY_USE_PATH_STYLE=false
SCALEWAY_CACHE_TTL=31536000C. Script de déploiement avec Dokploy
bash
#!/bin/bash
# deploy.sh
# Variables
APP_NAME="entreprise-app"
ENVIRONMENT=$1 # production ou staging
IMAGE_TAG=$(git rev-parse --short HEAD)
# Déploiement
dokploy deploy \
--app ${APP_NAME} \
--env ${ENVIRONMENT} \
--tag ${IMAGE_TAG} \
--scale 2 \
--rollback trueRessources et références
Ce guide a été rédigé pour accompagner le déploiement d'une application Laravel / Nuxt 4avec Dokploy sur un VPS X, en utilisant Scaleway Object Storage comme solution de stockage primaire.
Dernière mise à jour : Juillet 2026




