S3 w środowisku lokalnym

W niedawnym projekcie postanowiłem użyć S3 zamiast NFS do przechowywania danych dzielonych przez wszystkie instancje aplikacji. Co za tym idzie musiałem przygotować serwer S3 w środowisku lokalnym wykorzystującym Dockera. Poniżej zamieszczam fragment pliku compose.yml.

services:
   rustfs:
       image: rustfs/rustfs
       ports:
           - "33900:9000" # API port
           - "33901:9001" # Console port
       networks:
           default:
               aliases:
                   - admin.rustfs
                   - asset-cache.rustfs
                   - asset.rustfs
                   - recycle-bin.rustfs
                   - thumbnail.rustfs
                   - version.rustfs
                   - temp.rustfs
       environment:
           RUSTFS_VOLUMES: /data
           RUSTFS_ADDRESS: ":9000"
           RUSTFS_ACCESS_KEY: ${S3_ACCESS_KEY}
           RUSTFS_SECRET_KEY: ${S3_SECRET_KEY}
           RUSTFS_CONSOLE_ENABLE: true
           RUSTFS_CONSOLE_ADDRESS: ":9001"
       healthcheck:
           test:
             [
                 "CMD",
                 "sh", "-c",
                 "curl -f http://localhost:9000/health && curl -f http://localhost:9001/rustfs/console/health"
             ]
           interval: 30s
           timeout: 10s
           retries: 3
           start_period: 40s
       volumes:
           - rustfs-data:/data

   rustfs-init:
       image: minio/mc
       entrypoint: [ "/bin/sh", "-c" ]
       command: >
           '
           until mc alias set rustfs http://rustfs:9000 ${S3_ACCESS_KEY} ${S3_SECRET_KEY}; do
               echo "Waiting for RustFS..."
               sleep 2
           done;
           mc mb --ignore-existing rustfs/admin;
           mc mb --ignore-existing rustfs/asset-cache;
           mc mb --ignore-existing rustfs/asset;
           mc mb --ignore-existing rustfs/recycle-bin;
           mc mb --ignore-existing rustfs/thumbnail;
           mc mb --ignore-existing rustfs/version;
           mc mb --ignore-existing rustfs/temp;
           mc anonymous set public rustfs/admin;
           mc anonymous set public rustfs/asset;
           mc anonymous set public rustfs/thumbnail;
           '
       depends_on:
           rustfs:
               condition: service_healthy

volumes:
   rustfs-data:

Serwis rustfs to serwer S3 wykorzystujący RustFS. Pierwotnie planowałem użyć MinIO, ale po rozważeniu kontrowersyjnych opinii postanowiłem poszukać czegoś innego. Brałem pod uwagę Garage, ale ten projekt chyba bardziej nadaje się do środowiska produkcyjnego niż lojalnego. RustFS jest prostszy i ma wbudowaną konsolę administracyjną dostępną przez HTTP, co przydaje się w środowisku lokalnym. W sekcji networks zdefiniowałem dodatkowe aliasy domenowe ponieważ paczka league/flysystem-aws-s3-v3 spodziewa się nazwy wiaderka w domenie. Serwis rustfs ma healtcheck, dzięki czemu serwisy, które korzystają z S3 (w tym rustfs-init) są uruchamiane dopiero kiedy serwer jest gotowy.

Drugi serwis rustfs-init automatycznie tworzy wiaderka, których spodziewa się aplikacja oraz ustawia niektóre z nich jako widoczne publicznie.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *