Migration de fichiers de MinIO vers Cloudflare R2 via PostgreSQL
Publié le 27 mai 2024 - par Andy Cinquin
MigrationMinIOCloudflare R2PostgreSQLStockage de fichiersBase de donnéesConfigurationURL
Introduction
Dans ce tutoriel, nous allons voir comment migrer des fichiers stockés sur un serveur MinIO vers Cloudflare R2 en mettant à jour les URL et les paramètres de configuration dans une base de données PostgreSQL. Cette migration peut être nécessaire lorsque vous décidez de changer de fournisseur de stockage pour des raisons de performance, de coût ou de fonctionnalités.
Prérequis
- Une base de données PostgreSQL contenant des références à des fichiers stockés sur MinIO.
- Les informations de connexion à votre base de données PostgreSQL (nom d'hôte, port, nom d'utilisateur, mot de passe, nom de la base de données).
- Un compte Cloudflare avec R2 activé et un bucket créé pour stocker vos fichiers.
- Avoir déjà effectuer une copie de vos données vers R2 (j'ai fais un tuto à ce propos déjà !)
Étape 1 : Mise à jour de la table "files"
La première étape consiste à mettre à jour les URL des fichiers dans la table "files". Nous allons remplacer l'URL de MinIO par celle de Cloudflare R2.
UPDATE files
SET formats = regexp_replace(
formats::text,
'https://minio.example.com/bucket/',
'https://r2.example.com/',
'g'
)::jsonb
WHERE formats::text LIKE '%https://minio.example.com/bucket/%';
Cette requête utilise la fonction
regexp_replace
pour remplacer toutes les occurrences de l'URL MinIO (https://minio.example.com/bucket/
) par l'URL Cloudflare R2 (https://r2.example.com/
) dans la colonne formats
de la table "files". La clause WHERE
filtre les lignes où la colonne formats
contient l'URL MinIO.Étape 2 : Mise à jour du provider dans la table "files"
Ensuite, nous allons mettre à jour le champ "provider" dans la table "files" pour refléter le changement de fournisseur de stockage.
UPDATE files
SET formats = regexp_replace(
formats::text,
'"provider":"minio-provider"',
'"provider":"cloudflare-r2-provider"',
'g'
)::jsonb
WHERE formats::text LIKE '%"provider":"minio-provider"%';
Cette requête remplace toutes les occurrences de
"provider":"minio-provider"
par "provider":"cloudflare-r2-provider"
dans la colonne formats
de la table "files".Étape 3 : Mise à jour de la table "settings"
Si vous avez des paramètres de configuration stockés dans une table "settings", vous devez également mettre à jour les références à MinIO dans cette table.
UPDATE settings
SET value = regexp_replace(
value::text,
'"provider":"minio-provider"',
'"provider":"cloudflare-r2-provider"',
'g'
)::jsonb
WHERE value::text LIKE '%"provider":"minio-provider"%';
UPDATE settings
SET value = regexp_replace(
value::text,
'https://minio.example.com/bucket/',
'https://r2.example.com/',
'g'
)::jsonb
WHERE value::text LIKE '%https://minio.example.com/bucket/%';
Ces requêtes mettent à jour le provider et l'URL dans la colonne
value
de la table "settings".Étape 4 : Mise à jour des tables de contenu
Si vous avez des tables de contenu (par exemple, "articles" ou "pages") qui contiennent des références aux fichiers stockés sur MinIO, vous devez mettre à jour ces références.
UPDATE articles
SET content = REGEXP_REPLACE(
content,
'https://minio.example.com/bucket/(.[^)]+)',
'https://r2.example.com/\1',
'g'
);
Cette requête met à jour les URL des fichiers dans la colonne
content
de la table "articles". Elle utilise une expression régulière pour capturer le chemin du fichier après l'URL de base et le remplace par l'URL Cloudflare R2 correspondante.Étape 5 : Mise à jour combinée de l'URL et du provider
Enfin, vous pouvez combiner la mise à jour de l'URL et du provider dans une seule requête pour la table "files".
UPDATE files
SET
url = REGEXP_REPLACE(
url,
'https://minio.example.com/bucket/([^>]+)',
'https://r2.example.com/\1',
'g'
),
provider = REPLACE(provider, 'minio-provider', 'cloudflare-r2-provider')
WHERE
url LIKE 'https://minio.example.com/bucket/%'
AND provider = 'minio-provider';
Cette requête met à jour à la fois la colonne
url
et la colonne provider
de la table "files" en une seule opération.Conclusion
En suivant les étapes de ce tutoriel, vous pouvez migrer avec succès vos fichiers de MinIO vers Cloudflare R2 en mettant à jour les références dans votre base de données PostgreSQL. Assurez-vous de remplacer les URL et les noms de provider par les valeurs appropriées pour votre environnement.
Avant d'exécuter ces requêtes sur votre base de données de production, il est fortement recommandé de tester la migration sur une base de données de développement ou de staging pour vous assurer que tout fonctionne comme prévu. N'oubliez pas de sauvegarder votre base de données avant d'effectuer des modifications.
Une fois la migration terminée, vous pouvez profiter des avantages offerts par Cloudflare R2, tels que les performances, l'évolutivité et l'intégration avec d'autres services Cloudflare.
En vous remerciant de votre visite, n'hésitez pas à me
contacter pour toute demande de renseignements, devis ou
proposition de collaboration. Je me ferai un plaisir de
vous répondre dans les plus brefs délais.
Vous avez aimé cet article ? N'hésitez pas à le partager !