name: portabase-dev services: db: image: postgres:17-alpine ports: - "5433:5432" volumes: - postgres-data:/var/lib/postgresql/data environment: - POSTGRES_DB=devdb - POSTGRES_USER=devuser - POSTGRES_PASSWORD=changeme healthcheck: test: [ "CMD-SHELL", "pg_isready -U devuser -d devdb" ] interval: 10s timeout: 5s retries: 5 tusd: image: tusproject/tusd:v2.8.0 ports: - "1080:8080" command: > -upload-dir /data/uploads/tmp -hooks-http http://localhost:8887/api/tus/hooks -max-size 21474836480 -base-path /tus/files/ extra_hosts: - "localhost:host-gateway" volumes: - ./private/uploads/tmp:/data/uploads/tmp user: "1000:1000" mailpit: image: axllent/mailpit:latest container_name: portabase-mailpit-dev hostname: mailpit restart: unless-stopped ports: - "8025:8025" - "1025:1025" azurite: image: mcr.microsoft.com/azure-storage/azurite command: azurite --blobHost 0.0.0.0 --skipApiVersionCheck ports: - "10000:10000" volumes: - azurite-data:/data extra_hosts: - "localhost:host-gateway" networks: - portabase # DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1; gcs: image: fsouza/fake-gcs-server:latest container_name: fake-gcs ports: - "4443:4443" command: - "-scheme" - "http" - "-port" - "4443" - "-public-host" - "localhost:4443" - "-external-url" - "http://localhost:4443" - "-backend" - "filesystem" - "-filesystem-root" - "/storage" volumes: - gcs-data:/data - gcs-storage:/storage networks: - portabase gcs-init: image: curlimages/curl:latest depends_on: - gcs entrypoint: ["/bin/sh", "-c"] command: > 'until curl -fsS http://gcs:4443/storage/v1/b >/dev/null; do sleep 1; done; curl -fsS http://gcs:4443/storage/v1/b/portabase >/dev/null || curl -fsS -X POST "http://gcs:4443/storage/v1/b?project=local" -H "Content-Type: application/json" -d "{\"name\":\"portabase\"}"' networks: - portabase # curl http://localhost:4443/storage/v1/b # projectId: "test-project", # bucketName: "portabase", # clientEmail: "fake@test.iam.gserviceaccount.com", # privateKey: "unused-when-emulated", rustfs: image: rustfs/rustfs:latest container_name: rustfs environment: - RUSTFS_ROOT_USER=admin - RUSTFS_ROOT_PASSWORD=root-password - RUSTFS_ACCESS_KEY=access-key - RUSTFS_SECRET_KEY=secret-key - RUSTFS_VOLUMES=/data - RUSTFS_ADDRESS=:9000 - RUSTFS_CONSOLE_ENABLE=true - RUSTFS_CONSOLE_ADDRESS=:9001 volumes: - rustfs-data:/data healthcheck: test: [ "CMD", "curl", "-sf", "http://localhost:9000/health" ] interval: 10s timeout: 5s retries: 5 start_period: 10s ports: - "9001:9001" - "9000:9000" extra_hosts: - "localhost:host-gateway" networks: - portabase rustfs-init: image: rustfs/rc:latest container_name: rustfs-init depends_on: rustfs: condition: service_healthy entrypoint: > /bin/sh -c " until (/usr/bin/rc alias set rustfs http://rustfs:9000 access-key secret-key) do echo '...waiting...' && sleep 1; done; /usr/bin/rc mb rustfs/portabase; echo 'RustFS initialization complete'; tail -f /dev/null " networks: - portabase volumes: postgres-data: azurite-data: gcs-data: gcs-storage: rustfs-data: networks: portabase: name: portabase_network external: true