2025-06-18 18:03:37 +00:00
|
|
|
# documentation: https://cap.so
|
|
|
|
|
# slogan: Cap is the open source alternative to Loom. Lightweight, powerful, and cross-platform. Record and share in seconds.
|
|
|
|
|
# tags: cap,loom,open,source,low,code
|
|
|
|
|
# logo: svgs/cap.svg
|
|
|
|
|
# port: 5679
|
|
|
|
|
|
2025-08-18 20:42:27 +00:00
|
|
|
# Storage Configuration:
|
|
|
|
|
# Option 1: Remote S3-compatible storage (AWS S3, Cloudflare R2, etc.)
|
|
|
|
|
# Set these environment variables:
|
|
|
|
|
# - CAP_AWS_ACCESS_KEY: Your S3/R2 access key
|
|
|
|
|
# - CAP_AWS_SECRET_KEY: Your S3/R2 secret key
|
|
|
|
|
# - CAP_AWS_BUCKET: Your S3/R2 bucket name
|
|
|
|
|
# - CAP_AWS_REGION: Your S3/R2 region (e.g., us-east-1, auto for R2)
|
|
|
|
|
# - CAP_AWS_ENDPOINT: Your S3/R2 endpoint URL
|
|
|
|
|
# - S3_PUBLIC_ENDPOINT: Public endpoint for your bucket (same as CAP_AWS_ENDPOINT for most cases)
|
|
|
|
|
# - S3_INTERNAL_ENDPOINT: Internal endpoint (same as CAP_AWS_ENDPOINT for most cases)
|
|
|
|
|
# - S3_PATH_STYLE: true for R2/most S3-compatible, false for AWS S3 virtual-hosted style
|
|
|
|
|
#
|
|
|
|
|
# Option 2: Local MinIO storage
|
|
|
|
|
# Deploy MinIO as a separate service in the same network and set:
|
|
|
|
|
# - CAP_AWS_ACCESS_KEY: MinIO root user
|
|
|
|
|
# - CAP_AWS_SECRET_KEY: MinIO root password
|
|
|
|
|
# - CAP_AWS_BUCKET: Your bucket name (e.g., capso)
|
|
|
|
|
# - CAP_AWS_REGION: us-east-1 (or any region)
|
|
|
|
|
# - CAP_AWS_ENDPOINT: http://minio:9000 (internal MinIO endpoint)
|
|
|
|
|
# - S3_PUBLIC_ENDPOINT: http://your-minio-domain:9000 (public MinIO endpoint)
|
|
|
|
|
# - S3_INTERNAL_ENDPOINT: http://minio:9000 (internal MinIO endpoint)
|
|
|
|
|
# - S3_PATH_STYLE: true
|
2025-08-13 20:12:59 +00:00
|
|
|
|
2025-06-18 18:03:37 +00:00
|
|
|
services:
|
|
|
|
|
cap-web:
|
2025-06-23 23:43:03 +00:00
|
|
|
image: 'ghcr.io/capsoftware/cap-web:latest'
|
2025-06-18 18:03:37 +00:00
|
|
|
environment:
|
2025-09-01 11:02:07 +00:00
|
|
|
- SERVICE_URL_CAP_3000
|
2025-06-23 23:43:03 +00:00
|
|
|
- 'DATABASE_URL=mysql://$SERVICE_USER_MYSQL:$SERVICE_PASSWORD_MYSQL@cap-db:3306/${MYSQL_DATABASE:-planetscale}'
|
2025-10-14 21:42:45 +00:00
|
|
|
- 'WEB_URL=${SERVICE_URL_CAP}'
|
|
|
|
|
- 'NEXTAUTH_URL=${SERVICE_URL_CAP}'
|
2025-06-23 23:43:03 +00:00
|
|
|
- 'DATABASE_ENCRYPTION_KEY=${SERVICE_PASSWORD_64_DATABASEENCRYPTIONKEY}'
|
|
|
|
|
- 'NEXTAUTH_SECRET=${SERVICE_PASSWORD_64_NEXTAUTHSECRET}'
|
2025-09-01 11:16:10 +00:00
|
|
|
- 'CAP_AWS_ACCESS_KEY=${CAP_AWS_ACCESS_KEY:?}'
|
|
|
|
|
- 'CAP_AWS_SECRET_KEY=${CAP_AWS_SECRET_KEY:?}'
|
|
|
|
|
- 'CAP_AWS_BUCKET=${CAP_AWS_BUCKET:?}'
|
|
|
|
|
- 'CAP_AWS_REGION=${CAP_AWS_REGION:?}'
|
|
|
|
|
- 'S3_PUBLIC_ENDPOINT=${S3_PUBLIC_ENDPOINT:?}'
|
|
|
|
|
- 'S3_INTERNAL_ENDPOINT=${S3_INTERNAL_ENDPOINT:?}'
|
2025-08-12 21:15:18 +00:00
|
|
|
- 'NEXT_RUNTIME=nodejs'
|
2025-08-13 20:12:59 +00:00
|
|
|
- 'S3_PATH_STYLE=${S3_PATH_STYLE:-true}'
|
2025-09-01 11:16:10 +00:00
|
|
|
- 'CAP_AWS_ENDPOINT=${CAP_AWS_ENDPOINT:?}'
|
2025-06-23 23:43:03 +00:00
|
|
|
depends_on:
|
|
|
|
|
cap-db:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
|
|
|
|
|
cap-db:
|
|
|
|
|
image: 'mysql:8.0'
|
2025-06-18 18:03:37 +00:00
|
|
|
environment:
|
2025-06-23 23:43:03 +00:00
|
|
|
- 'MYSQL_USER=${SERVICE_USER_MYSQL}'
|
|
|
|
|
- 'MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL}'
|
|
|
|
|
- 'MYSQL_DATABASE=${MYSQL_DATABASE:-planetscale}'
|
|
|
|
|
- 'MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT}'
|
|
|
|
|
- 'MYSQL_ALLOW_EMPTY_PASSWORD=${MYSQL_ALLOW_EMPTY_PASSWORD:-yes}'
|
2025-06-18 18:03:37 +00:00
|
|
|
command:
|
2025-06-23 23:43:03 +00:00
|
|
|
- '--max_connections=1000'
|
|
|
|
|
- '--default-authentication-plugin=mysql_native_password'
|
|
|
|
|
healthcheck:
|
|
|
|
|
test:
|
|
|
|
|
- CMD
|
|
|
|
|
- mysqladmin
|
|
|
|
|
- ping
|
|
|
|
|
- '-h'
|
|
|
|
|
- 127.0.0.1
|
|
|
|
|
interval: 10s
|
|
|
|
|
timeout: 10s
|
|
|
|
|
retries: 5
|
2025-06-18 18:03:37 +00:00
|
|
|
volumes:
|
2025-08-18 20:42:27 +00:00
|
|
|
- 'cap_db:/var/lib/mysql'
|