From 5f1c2dc186a060da95b38617e8f82350e60dcaeb Mon Sep 17 00:00:00 2001 From: trfi Date: Wed, 25 Mar 2026 11:41:08 +0700 Subject: [PATCH] feat: add Sim Studio template --- blueprints/simstudio/docker-compose.yml | 96 +++++++++++++++++++++++++ blueprints/simstudio/simstudio.svg | 1 + blueprints/simstudio/template.toml | 30 ++++++++ meta.json | 37 +++++----- 4 files changed, 146 insertions(+), 18 deletions(-) create mode 100644 blueprints/simstudio/docker-compose.yml create mode 100644 blueprints/simstudio/simstudio.svg create mode 100644 blueprints/simstudio/template.toml diff --git a/blueprints/simstudio/docker-compose.yml b/blueprints/simstudio/docker-compose.yml new file mode 100644 index 000000000..410b0475d --- /dev/null +++ b/blueprints/simstudio/docker-compose.yml @@ -0,0 +1,96 @@ +version: "3.8" + +services: + simstudio: + image: ghcr.io/simstudioai/simstudio:v0.6.10 + restart: unless-stopped + expose: + - 3000 + deploy: + resources: + limits: + memory: 8G + environment: + - NODE_ENV=production + - DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB} + - BETTER_AUTH_URL + - NEXT_PUBLIC_APP_URL + - BETTER_AUTH_SECRET + - ENCRYPTION_KEY + - API_ENCRYPTION_KEY + - INTERNAL_API_SECRET + - REDIS_URL + - COPILOT_API_KEY + - SIM_AGENT_API_URL + - OLLAMA_URL + - SOCKET_SERVER_URL=http://realtime:3002 + - NEXT_PUBLIC_SOCKET_URL + depends_on: + db: + condition: service_healthy + migrations: + condition: service_completed_successfully + realtime: + condition: service_healthy + healthcheck: + test: ['CMD', 'wget', '--spider', '--quiet', 'http://127.0.0.1:3000'] + interval: 90s + timeout: 5s + retries: 3 + start_period: 10s + + realtime: + image: ghcr.io/simstudioai/realtime:v0.6.10 + restart: unless-stopped + expose: + - 3002 + deploy: + resources: + limits: + memory: 1G + environment: + - NODE_ENV=production + - DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB} + - NEXT_PUBLIC_APP_URL + - BETTER_AUTH_URL + - BETTER_AUTH_SECRET + - INTERNAL_API_SECRET + - REDIS_URL + depends_on: + db: + condition: service_healthy + healthcheck: + test: ['CMD', 'wget', '--spider', '--quiet', 'http://127.0.0.1:3002/health'] + interval: 90s + timeout: 5s + retries: 3 + start_period: 10s + + migrations: + image: ghcr.io/simstudioai/migrations:v0.6.10 + working_dir: /app/packages/db + environment: + - DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB} + depends_on: + db: + condition: service_healthy + command: ['bun', 'run', 'db:migrate'] + restart: 'no' + + db: + image: pgvector/pgvector:pg17 + restart: unless-stopped + environment: + - POSTGRES_USER + - POSTGRES_PASSWORD + - POSTGRES_DB + volumes: + - simstudio_postgres_data:/var/lib/postgresql/data + healthcheck: + test: ['CMD-SHELL', 'pg_isready -U ${POSTGRES_USER:-postgres}'] + interval: 5s + timeout: 5s + retries: 5 + +volumes: + simstudio_postgres_data: diff --git a/blueprints/simstudio/simstudio.svg b/blueprints/simstudio/simstudio.svg new file mode 100644 index 000000000..cca94fe3d --- /dev/null +++ b/blueprints/simstudio/simstudio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/blueprints/simstudio/template.toml b/blueprints/simstudio/template.toml new file mode 100644 index 000000000..387374c49 --- /dev/null +++ b/blueprints/simstudio/template.toml @@ -0,0 +1,30 @@ +[variables] +main_domain = "${domain}" +postgres_password = "${password:32}" +better_auth_secret = "${password:32}" +encryption_key = "${password:32}" +internal_api_secret = "${password:32}" + +[config] +env = [ + "POSTGRES_USER=postgres", + "POSTGRES_PASSWORD=${postgres_password}", + "POSTGRES_DB=simstudio", + "BETTER_AUTH_SECRET=${better_auth_secret}", + "ENCRYPTION_KEY=${encryption_key}", + "INTERNAL_API_SECRET=${internal_api_secret}", + "NEXT_PUBLIC_APP_URL=https://${main_domain}", + "BETTER_AUTH_URL=https://${main_domain}", + "NEXT_PUBLIC_SOCKET_URL=https://${main_domain}", + "API_ENCRYPTION_KEY=", + "REDIS_URL=", + "COPILOT_API_KEY=", + "SIM_AGENT_API_URL=", + "OLLAMA_URL=", +] +mounts = [] + +[[config.domains]] +serviceName = "simstudio" +port = 3_000 +host = "${main_domain}" diff --git a/meta.json b/meta.json index 3ae0cb5ef..c64b6a1d6 100644 --- a/meta.json +++ b/meta.json @@ -5759,6 +5759,25 @@ "markdown" ] }, + { + "id": "simstudio", + "name": "Sim Studio", + "version": "v0.6.10", + "description": "Sim Studio is an open-source AI workflow builder for simulating and testing multi-agent pipelines with real-time collaboration.", + "logo": "simstudio.svg", + "links": { + "github": "https://github.com/simstudioai/sim", + "website": "https://simstudio.ai/", + "docs": "https://docs.simstudio.ai/" + }, + "tags": [ + "ai", + "workflow", + "agents", + "llm", + "automation" + ] + }, { "id": "slash", "name": "Slash", @@ -5952,24 +5971,6 @@ "media" ] }, - { - "id": "strapi", - "name": "Strapi", - "version": "v5.33.0", - "description": "Open-source headless CMS to build powerful APIs with built-in content management.", - "logo": "strapi.svg", - "links": { - "github": "https://github.com/strapi/strapi", - "discord": "https://discord.com/invite/strapi", - "docs": "https://docs.strapi.io", - "website": "https://strapi.io" - }, - "tags": [ - "headless", - "cms", - "content-management" - ] - }, { "id": "supabase", "name": "SupaBase",