infra: migrate deployment to Coolify with Garage S3
Some checks failed
CI / ci (push) Failing after 19s
CI / deploy (push) Has been skipped
CI / e2e (push) Has been skipped

- Remove docker-compose files (Coolify manages services individually)
- Replace MinIO with Garage (S3-compatible, actively maintained)
- Add CI deploy job: build+push :develop image on every green Develop push
- Add Coolify webhook trigger for automatic redeployment
- Update README, .env.example, and storage references
- Rename migrate script to provider-agnostic name

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-07 15:28:43 +02:00
parent 41e58d0153
commit d519a83cc4
11 changed files with 107 additions and 272 deletions

View File

@@ -1,23 +1,22 @@
# PostgreSQL
POSTGRES_PASSWORD=changeme
DATABASE_URL=postgresql://gearbox:changeme@localhost:5432/gearbox
# Logto OIDC (get from Logto Admin Console at http://localhost:3002)
# S3-compatible Object Storage (Garage, R2, AWS S3)
S3_ENDPOINT=http://localhost:3900
S3_ACCESS_KEY=your-access-key
S3_SECRET_KEY=your-secret-key
S3_BUCKET=gearbox-images
S3_REGION=garage
# S3_PRESIGN_EXPIRY=3600 # Presigned URL expiry in seconds (default: 1 hour)
# Logto OIDC
LOGTO_ENDPOINT=http://localhost:3001
LOGTO_ADMIN_ENDPOINT=http://localhost:3002
LOGTO_CLIENT_ID=your-app-client-id
LOGTO_CLIENT_SECRET=your-app-client-secret
OIDC_AUTH_SECRET=generate-a-random-32-char-string-here
# Derived (set in docker-compose.yml, not needed here):
# OIDC_ISSUER=${LOGTO_ENDPOINT}/oidc
OIDC_ISSUER=http://localhost:3001/oidc
OIDC_CLIENT_ID=your-app-client-id
OIDC_CLIENT_SECRET=your-app-client-secret
OIDC_AUTH_SECRET=generate-a-random-32-char-string
OIDC_SCOPES=openid profile email
OIDC_REDIRECT_URI=http://localhost:5173/callback
# GearBox
GEARBOX_URL=http://localhost:3000
# S3-compatible Object Storage (MinIO)
S3_ENDPOINT=http://localhost:9000
S3_ACCESS_KEY=minioadmin
S3_SECRET_KEY=minioadmin
S3_BUCKET=gearbox-images
S3_REGION=us-east-1
# S3_PRESIGN_EXPIRY=3600 # Presigned URL expiry in seconds (default: 1 hour)