Le stockage d'objets est le stockage et la récupération de blobs non structurés de données et de métadonnées à l'aide d'une API HTTP. Au lieu de stocker des fichiers de manière conventionnelle en les divisant en blocs pour les stocker sur disque à l'aide d'un système de fichiers, nous traitons des objets entiers stockés sur le réseau. Ces objets peuvent être une image, une vidéo, des journaux, des fichiers HTML, des sauvegardes, des images de conteneur ou tout blob d'octets autonome. Ils ne sont pas structurés car ils ne suivent aucun schéma ou format spécifique.
Minio est un serveur de stockage d'objets open source, auto-hébergé et compatible avec Amazon S3. Minio est écrit en Go, est livré avec des clients indépendants du système d'exploitation et une interface de navigateur. Dans ce didacticiel, vous allez installer le serveur Minio sur un serveur Ubuntu 20.04, le protéger à l'aide d'un certificat SSL de Let's Encrypt et y accéder à l'aide d'un client en ligne de commande.
Prérequis
- Un serveur Ubuntu 20.04 avec un utilisateur non root avec des privilèges sudo.
- Un nom de domaine entièrement enregistré,
minio.example.com
. - Une machine Ubuntu 20.04 pour agir en tant que client.
-
Le système est mis à jour.
$ sudo apt update
-
Peu de packages dont votre système a besoin.
$ sudo apt install wget curl nano ufw software-properties-common apt-transport-https ca-certificates -y
Certains de ces packages sont peut-être déjà installés sur votre système.
Étape 1 - Installer le serveur Minio
Minio, écrit en Go, est livré sous la forme d'un simple fichier binaire. Téléchargez le fichier binaire sur le site officiel de Minio.
$ wget https://dl.min.io/server/minio/release/linux-amd64/minio
Rendre le fichier exécutable.
$ chmod +x minio
Déplacez le binaire vers /usr/local/bin
répertoire.
$ sudo mv minio /usr/local/bin
Vérifiez l'installation.
$ minio --version minio version RELEASE.2022-01-28T02-28-16Z
Étape 2 - Préparer le disque de stockage d'objets
Nous devons préparer un périphérique de bloc dédié pour stocker des objets. Le chemin de stockage peut être soit sur votre disque, soit sur un second disque connecté à votre serveur. Pour notre tutoriel, nous utilisons un disque secondaire.
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ??sda1 8:1 0 50G 0 part / sdb 8:16 0 50G 0 disk
Installer parted
application pour créer et modifier des partitions de disque.
$ sudo apt install parted
Exécutez les commandes suivantes pour monter le disque secondaire sur /data
répertoire.
$ sudo parted -s -a optimal -- /dev/sdb mklabel gpt $ sudo parted -s -a optimal -- /dev/sdb mkpart primary 0% 100% $ sudo parted -s -- /dev/sdb align-check optimal 1 $ sudo mkfs.ext4 /dev/sdb1 $ echo "/dev/sdb1 /data ext4 defaults 0 0" | sudo tee -a /etc/fstab $ sudo mkdir /data $ sudo mount -a
Étape 3 - Configurer Minio
Le serveur Minio ne doit jamais être exécuté en tant que root pour éviter tout dommage. Par conséquent, nous allons créer un utilisateur et un groupe appelé minio-user
.
$ sudo useradd -r minio-user -s /sbin/nologin
Le -s
flag définit le shell du compte utilisateur sur /sbin/nologin
, qui n'autorise pas la connexion de l'utilisateur.
Modifiez le propriétaire du fichier binaire Minio.
$ sudo chown minio-user:minio-user /usr/local/bin/minio
Donner la propriété des /data
répertoire vers minio-user
.
$ sudo chown minio-user:minio-user /data -R
L'étape suivante consiste à créer un fichier de configuration pour Minio. Créez un répertoire pour stocker le fichier de configuration.
$ sudo mkdir /etc/minio
Donnez la propriété du répertoire au minio-user
utilisateur.
$ sudo chown minio-user:minio-user /etc/minio
Créez le fichier d'environnement pour stocker la configuration par défaut. Ce fichier est à stocker dans le répertoire /etc/default
répertoire.
$ sudo nano /etc/default/minio
Collez le code suivant avec les variables d'environnement pour définir Minio.
MINIO_ROOT_USER="minio" MINIO_VOLUMES="/data" MINIO_OPTS="-C /etc/minio --address your_server_ip:9000 --console-address :9001" MINIO_ROOT_PASSWORD="miniostorage"
Vérifions toutes les variables et ce qu'elles font.
- MINIO_ROOT_USER :définit la clé d'accès/l'utilisateur pour accéder à l'interface utilisateur Minio. Il doit comporter au moins 3 caractères.
- MINIO_VOLUMES :spécifie le répertoire de stockage des données.
- MINIO_OPTS :définit diverses options pour le serveur Minio. Le
-C
flag spécifie le répertoire de configuration créé précédemment. Le--address
flag spécifie l'adresse IP et le port auquel se lier. Si vous ne spécifiez pas l'adresse IP, Minio se liera à chaque adresse IP sur le serveur, y compris localhost ou toute adresse IP liée à Docker. Le port par défaut est 9000. Le--console-address
flag définit le port 9001 pour la console Web de Minio. - MINIO_ROOT_PASSWORD :définit la clé privée/le mot de passe pour accéder à l'interface Minio. Il doit comporter au moins 8 caractères. Choisissez une clé secrète forte et compliquée.
Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.
Étape 4 - Installer le service Minio
Téléchargez le fichier de service Minio depuis le référentiel officiel Github.
$ curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service
Ouvrez le fichier avec l'éditeur Nano.
$ nano minio.service
Vous trouverez le code suivant.
[Unit] Description=MinIO Documentation=https://docs.min.io Wants=network-online.target After=network-online.target AssertFileIsExecutable=/usr/local/bin/minio [Service] WorkingDirectory=/usr/local/ User=minio-user Group=minio-user ProtectProc=invisible EnvironmentFile=/etc/default/minio ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi" ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES # Let systemd restart this service always Restart=always # Specifies the maximum file descriptor number that can be opened by this process LimitNOFILE=1048576 # Specifies the maximum number of threads this process can create TasksMax=infinity # Disable timeout logic and wait until process is stopped TimeoutStopSec=infinity SendSIGKILL=no [Install] WantedBy=multi-user.target # Built for ${project.name}-${project.version} (${project.name})
Ce service démarre Minio en utilisant le minio-user
utilisateur que nous avons créé précédemment. Il utilise /etc/default/minio
comme fichier d'environnement que nous avons configuré à l'étape 3. Une fois satisfait, fermez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.
Déplacez le fichier de service vers /etc/systemd/system
répertoire.
$ sudo mv minio.service /etc/systemd/system
Rechargez le démon de service.
$ sudo systemctl daemon-reload
Activez le service Minio.
$ sudo systemctl enable minio Created symlink from /etc/systemd/system/multi-user.target.wants/minio.service to /etc/systemd/system/minio.service.
Étape 5 - Démarrer le serveur Minio
Démarrez le serveur Minio.
$ sudo systemctl start minio
Vérifiez le statut.
$ sudo systemctl status minio ? minio.service - MinIO Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2022-02-01 13:30:44 UTC; 5s ago Docs: https://docs.min.io Process: 26068 ExecStartPre=/bin/bash -c if [ -z "${MINIO_VOLUMES}" ]; then echo "Variable MINIO_VOLUMES not set in /etc/default/minio"; exi> Main PID: 26076 (minio) Tasks: 6 Memory: 55.3M CGroup: /system.slice/minio.service ??26076 /usr/local/bin/minio server -C /etc/minio --address 209.208.26.129:9000 --console-address :9001 /data
Autoriser les ports 9000 et 9001 à l'aide du pare-feu non compliqué (UFW).
$ sudo ufw allow 9000 $ sudo ufw allow 9001
Activez le pare-feu.
$ sudo ufw enable
Ouvrez l'URL http://your_server_ip:9001
dans le navigateur, et vous verrez l'écran suivant.
Étape 6 - Sécuriser Minio à l'aide de SSL
Nous utiliserons Let's Encrypt pour sécuriser Minio. Pour obtenir un certificat SSL gratuit, nous devons télécharger l'outil Certbot. Nous utiliserons le programme d'installation du package Snapd pour cela.
Installez le programme d'installation de Snap.
$ sudo apt install snapd
Assurez-vous que votre version de Snapd est à jour.
$ sudo snap install core $ sudo snap refresh core
Installez Certbot.
$ sudo snap install --classic certbot
Utilisez la commande suivante pour vous assurer que la commande Certbot s'exécute en créant un lien symbolique vers /usr/bin
répertoire.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Générez un certificat SSL.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d minio.example.com
La commande ci-dessus téléchargera un certificat dans /etc/letsencrypt/live/minio.example.com
répertoire sur votre serveur.
Copiez les fichiers privkey.pem
et fullchain.pem
dans les certs
répertoire sous le dossier de configuration de Minio.
$ sudo cp /etc/letsencrypt/live/minio.example.com/privkey.pem /etc/minio/certs/private.key $ sudo cp /etc/letsencrypt/live/minio.example.com/fullchain.pem /etc/minio/certs/public.crt
Modifiez le propriétaire des certificats copiés.
$ sudo chown minio-user:minio-user /etc/minio/certs/private.key $ sudo chown minio-user:minio-user /etc/minio/certs/public.crt
Autoriser les ports HTTP et HTTPS via le pare-feu.
$ sudo ufw allow 80 $ sudo ufw allow 443
Ouvrez le fichier de configuration Minio.
$ sudo nano /etc/default/minio
Ajoutez la ligne suivante en bas.
MINIO_SERVER_URL="https://minio.example.com:9000"
Même si la console est accessible via le port 9001, l'URL du serveur SSL utilise le port 9000 pour accéder à l'API Minio.
Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.
Redémarrez le serveur Minio.
$ sudo systemctl restart minio
Vous pouvez accéder à la console Minio via l'URL https://minio.example.com:9001
dans votre navigateur.
Étape 7 - Se connecter à Minio et configurer les buckets
Connectez-vous à la console Minio en utilisant l'utilisateur et le mot de passe définis précédemment pour accéder au tableau de bord Minio.
Cliquez sur Créer un compartiment bouton pour créer votre premier compartiment.
Étant donné que nous installons Minio sur un seul serveur/disque, certaines fonctionnalités sont désactivées. Saisissez le nom du compartiment et cliquez sur Créer un compartiment bouton pour continuer. Vous obtiendrez l'écran suivant une fois terminé.
Pour télécharger des fichiers, cliquez sur Parcourir bouton, et la page suivante apparaîtra.
Cliquez sur Télécharger des fichiers et sélectionnez Télécharger des fichiers à nouveau pour ouvrir le navigateur de fichiers sur votre PC. Vous pouvez sélectionner plusieurs fichiers à la fois à télécharger.
Cliquez sur le bouton de la corbeille pour vider la file d'attente de téléchargement une fois terminé.
C'est tout pour le moment. Vous avez créé votre premier compartiment et téléchargé des fichiers. Ensuite, nous allons nous connecter au serveur à l'aide d'un client, accéder à ce compartiment. et gérez-le.
Étape 8 - Installer le client Minio et accéder aux fichiers
Nous allons installer le client de ligne de commande de Minio sur une autre machine basée sur Ubuntu 20.04 pour notre objectif. Vous pouvez également télécharger les clients de bureau à partir de la page de téléchargement officielle de Minio.
Téléchargez le binaire Minio officiel.
$ wget https://dl.min.io/client/mc/release/linux-amd64/mc
Rendre le fichier binaire exécutable.
$ chmod +x mc
Déplacez le binaire vers /usr/local/bin
répertoire.
$ sudo mv mc /usr/local/bin
Vérifiez l'installation.
$ mc --version mc version RELEASE.2022-02-02T02-03-24Z
Définissez un alias pour votre serveur Minio afin de pouvoir y accéder en utilisant un nom facilement identifiable. Remplacer minio
et miniostorage
avec le nom d'utilisateur et le mot de passe que vous avez choisis pour le serveur.
$ mc alias set howtoforge https://minio.example.com:9000 minio miniostorage mc: Configuration written to `/home/<user>/.mc/config.json`. Please update your access credentials. mc: Successfully created `/home/<user>/.mc/share`. mc: Initialized share uploads `/home/<user>/.mc/share/uploads.json` file. mc: Initialized share downloads `/home/<user>/.mc/share/downloads.json` file. Added `howtoforge` successfully.
Le client Minio stocke toutes les configurations dans le /home/user/.mc
répertoire.
Obtenez les informations du serveur Minio. Nous utilisons l'admin
sous-commande pour cela.
$ mc admin info howtoforge ? minio.example.com:9000 Uptime: 2 minutes Version: 2022-01-28T02:28:16Z Network: 1/1 OK 9.6 MiB Used, 1 Bucket, 5 Objects
Pour lister tous les compartiments sous votre serveur Minio, utilisez la commande suivante.
$ mc ls howtoforge [2022-02-01 16:59:46 UTC] 0B howtoforge/
Pour répertorier tous les objets/fichiers d'un compartiment donné, utilisez la commande suivante.
$ mc ls howtoforge/howtoforge [2022-02-02 05:32:28 UTC] 2.9MiB STANDARD IMG_20160717_184947_HDR.jpg [2022-02-02 05:32:00 UTC] 2.2MiB STANDARD IMG_20160903_220639_HDR.jpg [2022-02-02 05:28:25 UTC] 2.4MiB STANDARD IMG_20161006_213936_HDR.jpg [2022-02-02 05:28:07 UTC] 2.2MiB STANDARD IMG_20161015_194409_HDR.jpg [2022-02-02 03:33:28 UTC] 25KiB STANDARD quarantine.jpg
Vous pouvez créer un nouveau compartiment à l'aide de la commande suivante.
$ mc mb howtoforge/bucket2 Bucket created successfully `howtoforge/bucket2`.
Créons un nouveau fichier à copier dans ce compartiment.
$ touch test.txt
Pour copier un fichier dans le compartiment nouvellement créé, utilisez la commande suivante.
$ mc cp test.txt howtoforge/bucket2 /home/nspeaks/test.txt: 0 B / ? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????
Lister le fichier nouvellement copié.
$ mc ls howtoforge/bucket2 [2022-02-02 07:06:44 UTC] 0B STANDARD test.txt
Vous pouvez vérifier toutes les commandes en utilisant le --help
arguments.
$ mc --help NAME: mc - MinIO Client for cloud storage and filesystems. USAGE: mc [FLAGS] COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...] COMMANDS: alias set, remove and list aliases in configuration file ls list buckets and objects mb make a bucket rb remove a bucket cp copy objects mirror synchronize object(s) to a remote site cat display object contents head display first 'n' lines of an object pipe stream STDIN to an object share generate URL for temporary access to an object find search for objects sql run sql queries on objects stat show object metadata mv move objects tree list buckets and objects in a tree format du summarize disk usage recursively retention set retention for object(s) legalhold manage legal hold for object(s) diff list differences in object name, size, and date between two buckets rm remove object(s) version manage bucket versioning ilm manage bucket lifecycle encrypt manage bucket encryption config event manage object notifications watch listen for object notification events undo undo PUT/DELETE operations anonymous manage anonymous access to buckets and objects tag manage tags for bucket and object(s) replicate configure server side bucket replication admin manage MinIO servers update update mc to latest release support Support related commands GLOBAL FLAGS: --autocompletion install auto-completion for your shell --config-dir value, -C value path to configuration folder (default: "/home/<user>/.mc") --quiet, -q disable progress bar display --no-color disable color theme --json enable JSON lines formatted output --debug enable debug output --insecure disable SSL certificate verification --help, -h show help --version, -v print the version TIP: Use 'mc --autocompletion' to enable shell autocompletion VERSION: RELEASE.2022-02-02T02-03-24Z
Conclusion
Ceci conclut notre tutoriel où vous avez installé le serveur de stockage d'objets Minio sur un serveur basé sur Ubuntu 20.04. Il est accessible via une console web protégée par un certificat SSL Let's Encrypt. Vous avez également installé le client de ligne de commande Minio sur une autre machine Ubuntu pour gérer et accéder au serveur Minio.
Si vous avez des questions, postez-les dans les commentaires ci-dessous.