diff --git a/blueprints/capso/capso.png b/blueprints/capso/capso.png new file mode 100644 index 00000000..81a7775e Binary files /dev/null and b/blueprints/capso/capso.png differ diff --git a/blueprints/capso/docker-compose.yml b/blueprints/capso/docker-compose.yml new file mode 100644 index 00000000..637b1ded --- /dev/null +++ b/blueprints/capso/docker-compose.yml @@ -0,0 +1,57 @@ +version: "3.8" +services: + cap-web: + image: ghcr.io/capsoftware/cap-web:latest + restart: unless-stopped + environment: + DATABASE_URL: 'mysql://${MYSQL_USER}:${MYSQL_PASSWORD}@ps-mysql:3306/${MYSQL_DATABASE}?ssl={"rejectUnauthorized":false}' + WEB_URL: "http://${DOMAIN}:3000" + NEXTAUTH_URL: "http://${DOMAIN}:3000" + DATABASE_ENCRYPTION_KEY: ${DATABASE_ENCRYPTION_KEY} + NEXTAUTH_SECRET: ${NEXTAUTH_SECRET} + 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: "http://${DOMAIN}:3902" + S3_INTERNAL_ENDPOINT: "http://minio:3902" + expose: + - 3000 + + ps-mysql: + image: mysql:8.0 + restart: unless-stopped + environment: + MYSQL_DATABASE: ${MYSQL_DATABASE} + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} + MYSQL_ROOT_HOST: "%" + command: + - --max_connections=1000 + - --default-authentication-plugin=mysql_native_password + expose: + - 3306 + volumes: + - ps-mysql:/var/lib/mysql + + minio: + image: bitnami/minio:latest + restart: unless-stopped + environment: + MINIO_API_PORT_NUMBER: 3902 + MINIO_CONSOLE_PORT_NUMBER: 3903 + MINIO_ROOT_USER: ${MINIO_ROOT_USER} + MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} + expose: + - 3902 + - 3903 + volumes: + - minio-data:/bitnami/minio/data + - minio-certs:/certs + +volumes: + ps-mysql: + driver: local + minio-data: + driver: local + minio-certs: + driver: local diff --git a/blueprints/capso/template.toml b/blueprints/capso/template.toml new file mode 100644 index 00000000..48800f4a --- /dev/null +++ b/blueprints/capso/template.toml @@ -0,0 +1,46 @@ + [variables] +main_domain = "${domain}" +minio_domain_1 = "${domain}" +minio_domain_2 = "${domain}" +mysql_database = "planetscale" +mysql_user = "root" +cap_aws_bucket = "capso" +cap_aws_region = "us-east-1" + +[config] +[[config.domains]] +serviceName = "cap-web" +port = 3000 +host = "${main_domain}" +path = "/" + +[[config.domains]] +serviceName = "minio" +port = 3902 +host = "minio_domain_1" +path = "/" + +[[config.domains]] +serviceName = "minio" +port = 3903 +host = "minio_domain_2" +path = "/" + +[config.env] +DOMAIN = "${main_domain}" +MYSQL_DATABASE = "${mysql_database}" +MYSQL_USER = "${mysql_user}" +MYSQL_PASSWORD = "${password:32}" # Password for MySQL user +MYSQL_ROOT_PASSWORD = "${password:32}" # Password for MySQL root user +DATABASE_ENCRYPTION_KEY = "${password:32}" # Encryption key for database +NEXTAUTH_SECRET = "${password:32}" # Secret for NextAuth authentication +CAP_AWS_ACCESS_KEY = "${password:16}" # Access key for S3/MinIO +CAP_AWS_SECRET_KEY = "${password:16}" # Secret key for S3/MinIO +CAP_AWS_BUCKET = "${cap_aws_bucket}" +CAP_AWS_REGION = "${cap_aws_region}" +MINIO_ROOT_USER = "${password:16}" # MinIO root user +MINIO_ROOT_PASSWORD = "${password:16}" # MinIO root password + +[[config.mounts]] +filePath = "/certs" +content = "" \ No newline at end of file diff --git a/meta.json b/meta.json index 834707b8..f0ab0f0b 100644 --- a/meta.json +++ b/meta.json @@ -13,6 +13,19 @@ "tags": ["database", "postgres", "self-hosted", "server"] }, { + "id": "capso", + "name": "Cap.so", + "version": "latest", + "description": "Cap.so is a platform for web and desktop applications with MySQL and S3 storage. It provides a complete development environment with database and file storage capabilities.", + "links": { + "github": "https://github.com/CapSoftware/Cap", + "website": "https://cap.so/", + "docs": "https://cap.so/docs/" + }, + "logo": "capso.png", + "tags": ["web", "s3", "mysql", "development", "self-hosted"] +}, +{ "id": "authentik", "name": "Authentik", "version": "2025.6.3",