Installation d'un serveur S3 local avec réplication
Mes serveurs :
-
Serveur 1 :
nas-01.nehemiebarkia.fr(192.168.1.69) -
Serveur 2 :
nas-02.nehemiebarkia.fr(192.168.1.70)
Sur le serveur 1
mkdir /etc/minio
mkdir /etc/minio/minio_certs
mkdir /var/lib/minio
/etc/minio/docker-compose.yml :
services:
minio:
image: quay.io/minio/minio:latest
container_name: minio-srv1
ports:
- "9000:9000"
- "9001:9001"
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: MDP01
MINIO_SERVER_URL: "https://nas-01.nehemiebarkia.fr:9000"
MINIO_BROWSER_REDIRECT_URL: "https://nas-01.nehemiebarkia.fr:9001"
MINIO_SERVER_INSECURE: "on"
volumes:
- /var/lib/minio:/data
- ./minio_certs:/root/.minio/certs
command: server /data --console-address ":9001" --address ":9000"
restart: always
Génération des certificats :
# 1. Création de l'arborescence propre
mkdir -p /etc/minio/minio_certs/CAs
cd /etc/minio/minio_certs
# 2. Génération de l'Autorité de Certification (CA) partagée
openssl genrsa -out shared-ca.key 4096
openssl req -x509 -new -nodes -key shared-ca.key -sha256 -days 3650 -out shared-ca.pem \
-subj "/CN=Minio-Shared-CA"
# 3. Génération du certificat pour NAS-01 (192.168.1.69)
openssl genrsa -out private.key 2048
cat > nas01.ext << EOF
subjectAltName = IP:192.168.1.69,DNS:nas-01.nehemiebarkia.fr
EOF
openssl req -new -key private.key -out nas01.csr -subj "/CN=nas-01.nehemiebarkia.fr"
openssl x509 -req -in nas01.csr -CA shared-ca.pem -CAkey shared-ca.key -CAcreateserial -out public.crt -days 3650 -extfile nas01.ext
# 4. Préparation du certificat pour NAS-02 (192.168.1.70)
# On crée un sous-dossier temporaire pour ne pas écraser les fichiers de nas-01
mkdir -p ./for_nas02
openssl genrsa -out ./for_nas02/private.key 2048
cat > nas02.ext << EOF
subjectAltName = IP:192.168.1.70,DNS:nas-02.nehemiebarkia.fr
EOF
openssl req -new -key ./for_nas02/private.key -out nas02.csr -subj "/CN=nas-02.nehemiebarkia.fr"
openssl x509 -req -in nas02.csr -CA shared-ca.pem -CAkey shared-ca.key -out ./for_nas02/public.crt -days 3650 -extfile nas02.ext
# 5. Mise en place de la confiance (CA) pour les deux
cp shared-ca.pem ./CAs/public.crt
cp shared-ca.pem ./for_nas02/public_ca.crt # On le garde sous le coude pour le transfert
# 6. Droits finaux sur NAS-01
chmod 644 public.crt && chmod 600 private.key && chmod 644 CAs/public.crt
echo "-----------------------------------------------------------------------"
echo "✅ GÉNÉRATION TERMINÉE SUR NAS-01"
echo "-----------------------------------------------------------------------"
echo "ÉTAPES POUR LE NAS-02 :"
echo "1. Créez le dossier : mkdir -p /etc/minio/minio_certs/CAs"
echo "2. Copiez les fichiers depuis NAS-01 vers NAS-02 :"
echo " - /etc/minio/minio_certs/for_nas02/public.crt -> /etc/minio/minio_certs/public.crt"
echo " - /etc/minio/minio_certs/for_nas02/private.key -> /etc/minio/minio_certs/private.key"
echo " - /etc/minio/minio_certs/for_nas02/public_ca.crt -> /etc/minio/minio_certs/CAs/public.crt"
echo "-----------------------------------------------------------------------"
docker compose up -d
Sur le serveur 2
mkdir /etc/minio
mkdir /etc/minio/minio_certs
mkdir /var/lib/minio
/etc/minio/docker-compose.yml :
services:
minio:
image: quay.io/minio/minio:latest
container_name: minio-srv2
ports:
- "9000:9000"
- "9001:9001"
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: MDP02
MINIO_SERVER_URL: "https://nas-02.nehemiebarkia.fr:9000"
MINIO_BROWSER_REDIRECT_URL: "https://nas-02.nehemiebarkia.fr:9001"
MINIO_SERVER_INSECURE: "on"
volumes:
- /var/lib/minio:/data
- ./minio_certs:/root/.minio/certs
command: server /data --console-address ":9001" --address ":9000"
restart: always
docker compose up -d
Réplication
Commandes à exécuter sur le serveur nas-01
Démarage du conteneur pour utiliser mc :
docker run -it --entrypoint=/bin/sh minio/mc
Authentification site 1 :
mc alias set site1 https://nas-01.nehemiebarkia.fr:9000 admin MDP01 --insecure
Authentification site 1 :
mc alias set site1 https://nas-02.nehemiebarkia.fr:9000 admin MDP02 --insecure
Activation de la réplication :
mc admin replicate add site1 site2 --insecure
Requested sites were configured for replication successfully.
Exposition du S3 :
Afin de permettre la lecture des contenus multimédias directement sur une Smart TV (ou tout équipement ne supportant pas nativement le protocole S3), nous mettons en place une passerelle de service. Celle-ci transforme un bucket S3 en partage réseau Samba (SMB) standard.
docker-compose.yml
services:
samba-bridge:
image: rclone/rclone:latest
container_name: minio-to-samba
network_mode: "host"
environment:
- RCLONE_CONFIG_MYMINIO_TYPE=s3
- RCLONE_CONFIG_MYMINIO_PROVIDER=Minio
- RCLONE_CONFIG_MYMINIO_ACCESS_KEY_ID=admin
- RCLONE_CONFIG_MYMINIO_SECRET_ACCESS_KEY=MPD01
- RCLONE_CONFIG_MYMINIO_ENDPOINT=https://nas-01.nehemiebarkia.fr:9000
entrypoint:
- rclone
- serve
- smb
- myminio:NOM_DU_BUCKET
- --read-only
- --addr=:445
- --no-auth
- --no-check-certificate
restart: always
docker compose up -d