CI / test (pull_request) Successful in 3s
This adds typed asset APIs to the geo client, covers the 3D/image upload-share flow in integration tests, and introduces a simple Leaflet web demo that places objects on map features and manages sharing visibility via backend links. Made-with: Cursor
1.9 KiB
1.9 KiB
Docker MinIO Local Development
Local object storage is provided by MinIO in docker-compose.yml.
Port policy
- MinIO S3 API (
9000) is internal-only (not published on host). - MinIO admin UI is exposed on
8774.
Services
minio: object storageminio-init: one-shot bucket bootstrap usingmcapi/api-dev: use MinIO via internal DNS endpointminio:9000
Environment variables
S3_ENDPOINT(defaultminio:9000)S3_BUCKET(defaultmomswap-assets)S3_REGION(defaultus-east-1)S3_ACCESS_KEY(defaultmomswap)S3_SECRET_KEY(defaultmomswap-secret)S3_USE_PATH_STYLE(defaulttrue)S3_USE_TLS(defaultfalse)
Start stack
./bin/gen-server-keys.sh
docker compose up --build -d
Verify storage setup
- Confirm only MinIO UI is published:
docker compose ps - Open MinIO admin console:
http://localhost:8774
- Confirm bucket exists (
momswap-assetsby default). - Use API flow:
- create asset and get signed upload URL
- upload file with PUT
- request
/v1/assets/{id}/download
Quick verification script
Use this as a smoke-check after startup:
# 1) check API and MinIO UI reachability
curl -fsS http://localhost:8122/healthz
curl -I http://localhost:8774
# 2) ensure MinIO S3 API is not exposed on host
if curl -fsS http://localhost:9000/minio/health/live >/dev/null 2>&1; then
echo "Unexpected: MinIO S3 API is exposed on host"
else
echo "OK: MinIO S3 API is internal-only"
fi
Troubleshooting
- If
apifails with storage config errors, verifyS3_*variables in compose environment. - If bucket bootstrap fails, inspect:
docker compose logs miniodocker compose logs minio-init
- If signed URLs are generated but upload fails, check:
- object key path style (
S3_USE_PATH_STYLE=truefor MinIO) - MinIO credentials (
S3_ACCESS_KEY,S3_SECRET_KEY)
- object key path style (