Bei der Nutzung von DDEV in der lokalen Entwicklung kann man MinIO als lokale S3-Alternative einbinden.

Dazu legen wir eine separate docker compose-Konfiguration unter .ddev/docker-compose.minio.yaml an:

services:
  minio:
    container_name: ddev-${DDEV_SITENAME}-minio
    image: quay.io/minio/minio:RELEASE.2024-04-06T05-26-02Z
    user: 1000:1000
    labels:
      com.ddev.site-name: ${DDEV_SITENAME}
      com.ddev.approot: ${DDEV_APPROOT}
    environment:
      - VIRTUAL_HOST=${DDEV_HOSTNAME}
      - HTTP_EXPOSE=9001
      - MINIO_ROOT_USER=minio_user
      - MINIO_ROOT_PASSWORD=minio_pass
      - MINIO_VOLUMES=/data/minio
    volumes:
      - ./.minio:/data/minio
    command: server --console-address ":9001" --anonymous

  minio-setup:
    container_name: ddev-${DDEV_SITENAME}-minio-setup
    image: quay.io/minio/mc:RELEASE.2024-03-30T15-29-52Z
    restart: no
    depends_on:
      - minio
    entrypoint: >
      /bin/sh -c "
      /usr/bin/mc alias set myserver http://minio:9000 minio_user minio_pass;
      /usr/bin/mc mb --ignore-existing myserver/mybucket;
      exit 0;
      "      

Als Speicherort ist in diesem Beispiel ./.minio definiert, welches wir noch manuell anlegen sollten, da sonst der Docker-Dienst es (wahrscheinlich) unter Benutzer root anlegen wird:

mkdir -p .ddev/.minio

Hier die Anmerkungen zu den wichtigsten Endpunkten:

  • Diese Konfiguration funktioniert mit den entsprechend fixierten Versions-Tags.
  • Die UI Console kann über http://<ddev-setup>:9001/ aufgerufen werden, Benutzer und Passwort sind hier beispielhaft auf minio_user und minio_pass gesetzt, da hier Mindestanforderungen an die Länge erfüllt werden müssen für die Zugangsdaten.
  • Die Direktive user: 1000:1000 ist hier beispielhaft für den ersten Linux-Benutzer zu sehen und sollte entsprechend angepasst werden, wenn die Instanz nicht mit dem root-Benutzer laufen soll.

Zusätzlich dazu gibt es noch einen Dienst minio-setup. Dieser startet als One-Shot und seine einzige Aufgabe ist es einen default-Bucket auf dem Server zu erzeugen, falls dieser noch nicht existiert. Damit muss der Entwickler keine manuellen Schritte für die Anlage erledigen.

Eine weitere Ergänzung könnte eine .gitignore für den Datenspeicher sein, damit dieser nicht im Git auftaucht. Dazu legen wir eine .ddev/.minio/.gitignore mit folgendem Inhalt an:

/*
!/.gitignore

Nach einem ddev start sollte der entsprechende Dienst zur Verfügung stehen.