Post

Proxmox VM minio Debian 13

Proxmox VM minio Debian 13

minio est une solution de stockage d’objets open source, compatible avec Amazon S3, qui permet de stocker des données non structurées telles que des photos, des vidéos, des fichiers de sauvegarde et bien plus encore. minio est conçu pour être simple à utiliser et à déployer, tout en offrant des performances élevées et une grande fiabilité. Voici comment vous pouvez installer minio sur un système Linux.

Proxmox MiniO serveur

Mise en place d’une instance MinIO en tant que machine virtuelle (VM) dans Proxmox pour donne une solution de stockage évolutive, fiable et compatible S3 directement dans votre home-lab.

VM - Serveur Debian 13

Machine virtuelle autonome pour séparer proprement MinIO des autres services.

  1. Connectez-vous à l’interface Web Proxmox.
  2. Créer une VM avec les spécifications suivantes:
    • Nom: serveur MinIO
    • Système d’exploitation: basé sur Debian
    • CPU: Au moins 2 vCPUs
    • RAM: 4 Go ou plus
    • Stockage: Au moins 50 Go * Télécharger l’ISO d’Ubuntu ou Debian sur le serveur Proxmox et l’affecter à la VM. * Démarre la machine virtuelle et installe le système d’exploitation selon les procédures standard.

Installation Debian 13

  • Machine: minio
  • root/rtyuiop
  • userminio/userminio49

Après l’installation, se connecter en “root” à la VM via la console noVNC et effectue quelques mises à jour et préparations de base:

1
2
apt update && apt upgrade -y 
apt install curl wget -y

Réseau statique
Passer en adresse IP statique: 192.168.0.217

Redémarrer le système réseau

1
systemctl restart networking

Vérifier

SSH
Générer une paire de clé sur l'ordinateur de bureau PC1
Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) pour une liaison SSH avec le serveur.

1
2
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/minio-server
chmod 600 /home/yann/.ssh/minio-server

Envoyer les clés publiques sur le serveur userminio

1
ssh-copy-id -i ~/.ssh/minio-server.pub userminio@192.168.0.218

On se connecte sur le serveur proxmox debian 13

1
ssh userminio@192.168.0.218

Installer sudo

1
2
3
4
su -
apt install sudo
# donner les droits sudo 
echo "userminio     ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/userminio

Créer la configuration serveur SSH pour userminio

1
nano /etc/ssh/sshd_config.d/userminio.conf

Ajouter

1
2
Port = 55218
PasswordAuthentication no

Relancer le serveur

1
systemctl restart sshd

Connexion Proxmox via SSH depuis poste PC1

1
ssh -p 55218 -i ~/.ssh/minio-server userminio@192.168.0.218

Motd
Création nouveau motd

1
2
sudo apt install jq figlet -y
sudo rm /etc/motd && sudo nano /etc/motd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 __   __ __  __   ___                                 
 \ \ / /|  \/  | | _ \ _ _  ___ __ __ _ __   ___ __ __
  \ V / | |\/| | |  _/| '_|/ _ \\ \ /| '  \ / _ \\ \ /
   \_/  |_|  |_| |_|  |_|  \___//_\_\|_|_|_|\___//_\_\
  __  __  _        _   ___                            
 |  \/  |(_) _ _  (_) / _ \                           
 | |\/| || || ' \ | || (_) |                          
 |_|  |_||_||_||_||_| \___/                           
  ___        _     _               _  ____            
 |   \  ___ | |__ (_) __ _  _ _   / ||__ /            
 | |) |/ -_)| '_ \| |/ _` || ' \  | | |_ \            
 |___/ \___||_.__/|_|\__,_||_||_| |_||___/            
  _  ___  ___     _   __  ___     __     ___  _  ___  
 / |/ _ \|_  )   / | / / ( _ )   /  \   |_  )/ |( _ ) 
 | |\_, / / /  _ | |/ _ \/ _ \ _| () |_  / / | |/ _ \ 
 |_| /_/ /___|(_)|_|\___/\___/(_)\__/(_)/___||_|\___/ 
                                                                                                                            

Parefeu UFW
Installation

1
sudo apt install ufw

Les règles

1
2
3
sudo ufw allow 55218/tcp  # port SSH
sudo ufw allow http       # port 80
sudo ufw allow https      # port 443

Activer le parefeu

1
sudo ufw enable

Alias fichier .bash_aliases

1
alias service='systemctl list-units --type=service --state=running'

OVH Domaine + Caddy

OVH domaine yick.eu

1
2
3
4
5
$TTL 3600
@	IN SOA dns200.anycast.me. tech.ovh.net. (2025102000 86400 3600 3600000 60)
        IN NS     dns200.anycast.me.
        IN NS     ns200.anycast.me.
*        IN AAAA     2a01:e0a:9c8:2080:be24:11ff:fe4f:bda4

Caddy
Serveur web : installation et configuration de Caddy sur Debian 12

Caddy, serveur web avec HTTPS automatique, installation et configuration

1
2
3
4
5
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl gnupg2
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

En mode texte, la configuration de Caddy passe par l’édition du fichier “/etc/caddy/Caddyfile”. Dans ce fichier, un ou plusieurs sites web peuvent être déclarés et configurés.

1
sudo nano /etc/caddy/Caddyfile
1
2
3
4
5
6
7
8
9
10
minio.yick.eu {
        # Racine du site web
        root * /var/www/minio

        # Activer la compression Zstandard et Gzip
        encode zstd gzip

        # Activer la distribution de fichiers statiques
        file_server
}

Avant de redémarrer Caddy, créez le dossier du site web et attribuez l’utilisateur “caddy” comme propriétaire :

1
2
sudo mkdir -p /var/www/minio
sudo chown caddy:caddy /var/www/minio

Puis, créez une page web à la racine du site, le fichier “/var/www/minio/index.html”

1
sudo -u caddy /var/www/minio/index.html

avec le contenu suivant :

1
2
3
4
5
6
7
<html>
<head>
</head>
<body>
<h1>Caddy - MinIO</h1>
</body>
</html>

Redémarrez Caddy :

1
sudo systemctl restart caddy

Installation de MinIO

En mode su

1
2
3
4
5
6
7
8
9
10
11
# Téléchargeement dernière version directement depuis la source officielle
wget https://dl.min.io/server/minio/release/linux-amd64/minio -O /usr/local/bin/minio 
chmod +x /usr/local/bin/minio 
#Créer un utilisateur et un groupe pour Minio
groupadd -r minio-user
useradd -M -r -g minio-user minio-user
mkdir -p /mnt/minio/data 
chown -R minio-user:minio-user /mnt/minio
# Créer un fichier de configuration pour Minio
mkdir -p /etc/default/minio
chown minio-user:minio-user /etc/default/minio

La configuration

1
nano /etc/default/minio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Définir le volume utilisé par MinIO au démarrage
#
# Ce qui suit spécifie le chemin du lecteur ou du dossier
MINIO_VOLUMES="/mnt/minio/data"

# Définir toutes les options de ligne de commande du serveur MinIO
#
# Ce qui suit définit explicitement l'adresse d'écoute de MinIO Console à
# port 9001 sur toutes les interfaces réseau.
# Le comportement par défaut est la sélection dynamique du port.
# MINIO_OPTS="--console-address :9001 --certs-dir /opt/minio/certs"
MINIO_OPTS="--console-address :9001"

# Définir le nom d'utilisateur racine.
# Cet utilisateur a des permissions illimitées pour exécuter S3 et
# opérations d'API administratives sur n'importe quelle ressource dans le déploiement.
#
# Reportez-vous aux exigences de votre organisation pour le nom d'utilisateur superadmin.
MINIO_ROOT_USER=minio-user

# Définir le mot de passe racine
#
# Utilisez une chaîne longue, aléatoire, unique qui rencontre vos organisations
# exigences relatives aux mots de passe.
MINIO_ROOT_PASSWORD=xxxxxxxxxxxxxxxxxxxxxxxxx

Pour que MinIO fonctionne de manière fiable, le configurer comme un service système

1
sudo nano /etc/systemd/system/minio.service

Contenu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[Unit]
Description=MinIO Object Storage
After=network.target 

[Service]
User=minio-user
Group=minio-user

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
Restart=always

# Spécifie le nombre maximal de descripteur de fichier
# qui peut être ouvert par ce processus
LimitNOFILE=65536

# Spécifie le nombre maximum de threads 
# que ce processus peut créer
TasksMax=infinity

# Désactiver la logique de délai
# attendre que le processus soit arrêté
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

Après avoir enregistré (CTRL+X, Y, ENTER), activé et démarré le service:

1
2
sudo systemctl daemon-reload 
sudo systemctl enable --now minio

Configurer le pare-feu et le réseau

Pour que MinIO soit accessible, des ports doivent être ouverts:

1
2
sudo ufw allow 9000/tcp 
sudo ufw allow 9001/tcp

Accès minio web
Pour accéder à Minio, ouvrez votre navigateur et accédez à l’adresse http://<votre_ip>:9000 Utilisez les identifiants configurés (MINIO_ROOT_USER et MINIO_ROOT_PASSWORD) pour vous connecter.

Accès à l’interface Web MinIO via un navigateur: http://192.168.0.218:9001

Première opération, créer un bucket nommé data

Pour une utilisation en production, il est recommandé de sécuriser l’accès à Minio avec HTTPS.

Caddy - https://minio.yick.eu

Ajouter la ligne suivante au fichier enviironnement /etc/default/minio

1
MINIO_BROWSER_REDIRECT_URL='https://minio.yick.eu/minio/ui/'

Redémarrer le service

1
sudo systemctl restart minio

Le fichier /etc/caddy/Caddyfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Refer to the Caddy docs for more information:
# https://caddyserver.com/docs/caddyfile
minio.yick.eu {
	handle /minio/ui/* {
		uri strip_prefix /minio/ui
		reverse_proxy localhost:9001
	}

	handle /robots.txt {
		respond "User-agent: *
Disallow: /"
	}

	handle /favicon.ico {
		respond 404
	}

	handle /* {
		reverse_proxy localhost:9000
	}
}

Redémarrer le service caddy

1
sudo systemctl restart caddy

Intégration dans les outils de sauvegarde

MinIO est maintenant prêt comme une mémoire compatible S3- et peut par ex. B. utilisé pour le Restic. Si vous avez lu mon article précédent, vous vous souvenez peut-être que j’ai configuré MinIO comme destination de sauvegarde pour Restic. Maintenant, nous faisons juste cela:

1
2
3
export RESTIC_REPOSITORY=s3:http://<IP>:9000/backups 
export AWS_ACCESS_KEY_ID=admin 
export AWS_SECRET_ACCESS_KEY=geheimes-passwort 

Proxmox MiniO client

Installation du client en ligne de commande qui peut servir en local pour administrer le s3,

on va installer le client Minio Admin Client:

1
2
3
curl https://dl.min.io/client/mc/release/linux-amd64/mc   --create-dirs   -o $HOME/minio-binaries/mc
sudo mv minio-binaries/mc /usr/local/bin
sudo chmod +x /usr/local/bin/mc

On crée un alias pour les commandes minio :

1
mc alias set myminio http://localhost:9000 myminioadmin myniadpass

Création d’un bucket

1
mc mb myminio/test1

Lister les buckets :

1
mc ls myminio

Annexe

Rappel des commandes MinIO <% highlight text%> --> Configuration de base Définir un alias vers un serveur MinIO : mc alias set myminio http://localhost:9000 Lister les buckets et les dossiers : mc ls myminio mc ls myminio/bucket/folder --> Opérations de fichiers Copier des fichiers vers/depuis MinIO : mc cp source-path myminio/bucket/destination-path mc cp myminio/bucket/source-path destination-path Miroir (synchronisation) de dossiers : mc mirror source-dir myminio/bucket mc mirror myminio/bucket destination-dir Supprimer des objets ou des buckets : mc rm myminio/bucket/object mc rb myminio/bucket Déplacer des objets : mc mv myminio/bucket/source-object myminio/bucket/destination-object --> Gestion des buckets et objets Créer un nouveau bucket : mc mb myminio/new-bucket Afficher les informations sur un objet : mc stat myminio/bucket/object Définir la politique d’un bucket : mc policy set myminio/bucket Obtenir la politique d’un bucket ou d’un objet : mc policy get myminio/bucket mc policy get myminio/bucket/folder --> Gestion des utilisateurs et des politiques (administrateur) Lister les politiques : mc admin policy list myminio Ajouter une politique : mc admin policy add myminio policy-name /path/to/policy.json Lister les utilisateurs : mc admin user list myminio Ajouter un utilisateur : mc admin user add myminio newuser newuser123 Attribuer une politique à un utilisateur : mc admin policy set myminio policy-name user=newuser Désactiver un utilisateur : mc admin user disable myminio newuser Supprimer un utilisateur : mc admin user remove myminio newuser --> Cycle de vie et versioning Définir le cycle de vie d’un bucket : mc ilm import myminio/bucket-name < ./path/to/lifecycle.json Lister les cycles de vie d’un bucket : mc ilm ls myminio/bucket-name --> Autres commandes utiles Résumé de l’utilisation du disque : mc du myminio/bucket Aperçu arborescent d’un bucket : mc tree myminio/bucket Surveillance des événements : mc watch myminio/bucket Générer une URL signée : mc share download myminio/bucket/object mc share upload myminio/bucket/object --> Options globales Utiliser --json pour obtenir une sortie au format JSON : mc --json ls myminio Utiliser --insecure pour ignorer la vérification du certificat TLS (non recommandé en production) : mc --insecure ls myminio --> Correspondance de motifs Utiliser * et ? comme caractères sauvetage pour correspondre à plusieurs objets ou préfixes. Par exemple : mc ls myminio/bucket/*.jpg mc rm myminio/bucket/file-?.txt <% endhighlight%>
Cet article est sous licence CC BY 4.0 par l'auteur.