# 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 :

```yaml
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 :

```bash
# 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

```bash
mkdir /etc/minio
mkdir /etc/minio/minio_certs
mkdir /var/lib/minio
```

/etc/minio/docker-compose.yml :

```yaml
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 

<p class="callout info">Commandes à exécuter sur le serveur nas-01</p>

Démarage du conteneur pour utiliser mc :

```bash
docker run -it --entrypoint=/bin/sh minio/mc
```

Authentification site 1 :

```bash
mc alias set site1 https://nas-01.nehemiebarkia.fr:9000 admin MDP01 --insecure
```

Authentification site 1 :

```bash
mc alias set site1 https://nas-02.nehemiebarkia.fr:9000 admin MDP02 --insecure
```

Activation de la réplication :

```bash
mc admin replicate add site1 site2 --insecure
```

<p class="callout success">Requested sites were configured for replication successfully.</p>

#### 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

```yaml
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
```

<p class="callout danger">Les buckets S3 sont exposés sans authentification en read only !</p>

```
docker compose up -d
```