version: '3.9'

services:
  master:
    image: chrislusf/seaweedfs:local
    ports:
      - 9333:9333
      - 19333:19333
    command: "master -ip=master"
  volume:
    image: chrislusf/seaweedfs:local
    ports:
      - 8080:8080
      - 18080:18080
    command: "volume -mserver=master:9333 -port=8080 -ip=volume"
    depends_on:
      - master
  mysql:
    image: percona/percona-server:5.7
    ports:
      - 3306:3306
    volumes:
      - ./seaweedfs.sql:/docker-entrypoint-initdb.d/seaweedfs.sql
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_DATABASE=seaweedfs
      - MYSQL_PASSWORD=secret
      - MYSQL_USER=seaweedfs
  filer:
    image: chrislusf/seaweedfs:local
    ports:
      - 8888:8888
      - 18888:18888
    environment:
      - WEED_MYSQL_HOSTNAME=mysql
      - WEED_MYSQL_PORT=3306
      - WEED_MYSQL_DATABASE=seaweedfs
      - WEED_MYSQL_USERNAME=seaweedfs
      - WEED_MYSQL_PASSWORD=secret
      - WEED_MYSQL_ENABLED=true
      - WEED_MYSQL_CONNECTION_MAX_IDLE=5
      - WEED_MYSQL_CONNECTION_MAX_OPEN=75
      # "refresh" connection every 10 minutes, eliminating mysql closing "old" connections
      - WEED_MYSQL_CONNECTION_MAX_LIFETIME_SECONDS=600
      # enable usage of memsql as filer backend
      - WEED_MYSQL_INTERPOLATEPARAMS=true
      - WEED_LEVELDB2_ENABLED=false
    command: '-v 9 filer -master="master:9333"'
    depends_on:
      - master
      - volume
      - mysql
  ingress:
    image: jwilder/nginx-proxy:alpine
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./nginx/proxy.conf:/etc/nginx/proxy.conf
  s3:
    image: chrislusf/seaweedfs:local
    ports:
      - 8333:8333
    command: '-v 9 s3 -filer="filer:8888"'
    depends_on:
      - master
      - volume
      - filer
    environment:
      - VIRTUAL_HOST=ingress
      - VIRTUAL_PORT=8333
  registry:
    image: registry:2
    environment:
      REGISTRY_HTTP_ADDR: "0.0.0.0:5001" # seaweedfs s3
      REGISTRY_LOG_LEVEL: "debug"
      REGISTRY_STORAGE: "s3"
      REGISTRY_STORAGE_S3_REGION: "us-east-1"
      REGISTRY_STORAGE_S3_REGIONENDPOINT: "http://ingress"
      REGISTRY_STORAGE_S3_BUCKET: "registry"
      REGISTRY_STORAGE_S3_ACCESSKEY: "some_access_key1"
      REGISTRY_STORAGE_S3_SECRETKEY: "some_secret_key1"
      REGISTRY_STORAGE_S3_V4AUTH: "true"
      REGISTRY_STORAGE_S3_SECURE: "false"
      REGISTRY_STORAGE_S3_SKIPVERIFY: "true"
      REGISTRY_STORAGE_S3_ROOTDIRECTORY: "/"
      REGISTRY_STORAGE_DELETE_ENABLED: "true"
      REGISTRY_STORAGE_REDIRECT_DISABLE: "true"
      REGISTRY_VALIDATION_DISABLED: "true"
    ports:
      - 5001:5001
    depends_on:
      - s3
      - ingress