Logo Cinquin Andy Signature

Migration de fichiers de MinIO vers Cloudflare R2 via PostgreSQL

Développeur Freelance - Logo

Les sites et les ressources associées

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 !

DÉVELOPPONS ENSEMBLE VOS PROJETS

Une idée, un projet ? Je suis là pour répondre à vos demandes et vous accompagner.
N’hésitez pas, je serais ravi d’échanger avec vous sur votre projet !
© 2024 Andy Cinquin - Tous droits réservés - Developed & Designed with ❤️ 🐝 ForHives co-founders