Skip to main content

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. Nous allons utiliser le protocole DLNA

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=XXXXXXXXXXX
      - RCLONE_CONFIG_MYMINIO_ENDPOINT=https://nas-01.nehemiebarkia.fr:9000
    # Utilisation de la syntaxe de commande simplifiée
    command: >
      serve dlna myminio:
      --addr :8080
      --name "NAS-REPLICATED"
      --read-only
      --no-check-certificate
      --vfs-cache-mode full
    restart: always

Les buckets S3 sont exposés sans authentification en read only !

docker compose up -d