Dokploy

Multica

Multica is an open-source managed agents platform for teams. Assign tasks to AI coding agents (Claude Code, Codex, OpenClaw and more) that execute autonomously, report progress, and build reusable skills over time.

Multica logo

Configuration

name: multica

services:
  postgres:
    image: pgvector/pgvector:pg17
    restart: unless-stopped
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
      interval: 5s
      timeout: 5s
      retries: 10

  backend:
    build:
      context: "https://github.com/multica-ai/multica.git#main"
      dockerfile: Dockerfile
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    volumes:
      - backend_uploads:/app/data/uploads
    environment:
      DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable
      PORT: "8080"
      JWT_SECRET: ${JWT_SECRET}
      FRONTEND_ORIGIN: ${FRONTEND_ORIGIN}
      ALLOWED_ORIGINS: ${ALLOWED_ORIGINS}
      MULTICA_APP_URL: ${MULTICA_APP_URL}
      RESEND_API_KEY: ${RESEND_API_KEY}
      RESEND_FROM_EMAIL: ${RESEND_FROM_EMAIL}
      GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID}
      GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET}
      GOOGLE_REDIRECT_URI: ${GOOGLE_REDIRECT_URI}
      COOKIE_DOMAIN: ${COOKIE_DOMAIN}
      S3_BUCKET: ${S3_BUCKET}
      S3_REGION: ${S3_REGION}
      CLOUDFRONT_DOMAIN: ${CLOUDFRONT_DOMAIN}
      CLOUDFRONT_KEY_PAIR_ID: ${CLOUDFRONT_KEY_PAIR_ID}
      CLOUDFRONT_PRIVATE_KEY: ${CLOUDFRONT_PRIVATE_KEY}

  frontend:
    build:
      context: "https://github.com/multica-ai/multica.git#main"
      dockerfile: Dockerfile.web
      args:
        REMOTE_API_URL: http://backend:8080
        NEXT_PUBLIC_GOOGLE_CLIENT_ID: ${NEXT_PUBLIC_GOOGLE_CLIENT_ID}
    restart: unless-stopped
    depends_on:
      - backend
    environment:
      HOSTNAME: "0.0.0.0"

volumes:
  pgdata:
  backend_uploads:
[variables]
app_domain = "${domain}"
jwt_secret = "${password:64}"
postgres_password = "${password:32}"

[config]
[[config.domains]]
serviceName = "frontend"
port = 3000
host = "${app_domain}"
path = "/"

[config.env]
POSTGRES_DB = "multica"
POSTGRES_USER = "multica"
POSTGRES_PASSWORD = "${postgres_password}"
JWT_SECRET = "${jwt_secret}"
FRONTEND_ORIGIN = "https://${app_domain}"
ALLOWED_ORIGINS = "https://${app_domain}"
MULTICA_APP_URL = "https://${app_domain}"
RESEND_API_KEY = ""
RESEND_FROM_EMAIL = "[email protected]"
GOOGLE_CLIENT_ID = ""
GOOGLE_CLIENT_SECRET = ""
GOOGLE_REDIRECT_URI = "https://${app_domain}/auth/callback"
NEXT_PUBLIC_GOOGLE_CLIENT_ID = ""
COOKIE_DOMAIN = ""
S3_BUCKET = ""
S3_REGION = "us-west-2"
CLOUDFRONT_DOMAIN = ""
CLOUDFRONT_KEY_PAIR_ID = ""
CLOUDFRONT_PRIVATE_KEY = ""

Base64

To import this template in Dokploy: create a Compose service → AdvancedBase64 import and paste the content below:

ewogICJjb21wb3NlIjogIm5hbWU6IG11bHRpY2Fcblxuc2VydmljZXM6XG4gIHBvc3RncmVzOlxuICAgIGltYWdlOiBwZ3ZlY3Rvci9wZ3ZlY3RvcjpwZzE3XG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIFBPU1RHUkVTX0RCOiAke1BPU1RHUkVTX0RCfVxuICAgICAgUE9TVEdSRVNfVVNFUjogJHtQT1NUR1JFU19VU0VSfVxuICAgICAgUE9TVEdSRVNfUEFTU1dPUkQ6ICR7UE9TVEdSRVNfUEFTU1dPUkR9XG4gICAgdm9sdW1lczpcbiAgICAgIC0gcGdkYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YVxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogW1wiQ01ELVNIRUxMXCIsIFwicGdfaXNyZWFkeSAtVSAkJHtQT1NUR1JFU19VU0VSfSAtZCAkJHtQT1NUR1JFU19EQn1cIl1cbiAgICAgIGludGVydmFsOiA1c1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDEwXG5cbiAgYmFja2VuZDpcbiAgICBidWlsZDpcbiAgICAgIGNvbnRleHQ6IFwiaHR0cHM6Ly9naXRodWIuY29tL211bHRpY2EtYWkvbXVsdGljYS5naXQjbWFpblwiXG4gICAgICBkb2NrZXJmaWxlOiBEb2NrZXJmaWxlXG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBkZXBlbmRzX29uOlxuICAgICAgcG9zdGdyZXM6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgdm9sdW1lczpcbiAgICAgIC0gYmFja2VuZF91cGxvYWRzOi9hcHAvZGF0YS91cGxvYWRzXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICBEQVRBQkFTRV9VUkw6IHBvc3RncmVzOi8vJHtQT1NUR1JFU19VU0VSfToke1BPU1RHUkVTX1BBU1NXT1JEfUBwb3N0Z3Jlczo1NDMyLyR7UE9TVEdSRVNfREJ9P3NzbG1vZGU9ZGlzYWJsZVxuICAgICAgUE9SVDogXCI4MDgwXCJcbiAgICAgIEpXVF9TRUNSRVQ6ICR7SldUX1NFQ1JFVH1cbiAgICAgIEZST05URU5EX09SSUdJTjogJHtGUk9OVEVORF9PUklHSU59XG4gICAgICBBTExPV0VEX09SSUdJTlM6ICR7QUxMT1dFRF9PUklHSU5TfVxuICAgICAgTVVMVElDQV9BUFBfVVJMOiAke01VTFRJQ0FfQVBQX1VSTH1cbiAgICAgIFJFU0VORF9BUElfS0VZOiAke1JFU0VORF9BUElfS0VZfVxuICAgICAgUkVTRU5EX0ZST01fRU1BSUw6ICR7UkVTRU5EX0ZST01fRU1BSUx9XG4gICAgICBHT09HTEVfQ0xJRU5UX0lEOiAke0dPT0dMRV9DTElFTlRfSUR9XG4gICAgICBHT09HTEVfQ0xJRU5UX1NFQ1JFVDogJHtHT09HTEVfQ0xJRU5UX1NFQ1JFVH1cbiAgICAgIEdPT0dMRV9SRURJUkVDVF9VUkk6ICR7R09PR0xFX1JFRElSRUNUX1VSSX1cbiAgICAgIENPT0tJRV9ET01BSU46ICR7Q09PS0lFX0RPTUFJTn1cbiAgICAgIFMzX0JVQ0tFVDogJHtTM19CVUNLRVR9XG4gICAgICBTM19SRUdJT046ICR7UzNfUkVHSU9OfVxuICAgICAgQ0xPVURGUk9OVF9ET01BSU46ICR7Q0xPVURGUk9OVF9ET01BSU59XG4gICAgICBDTE9VREZST05UX0tFWV9QQUlSX0lEOiAke0NMT1VERlJPTlRfS0VZX1BBSVJfSUR9XG4gICAgICBDTE9VREZST05UX1BSSVZBVEVfS0VZOiAke0NMT1VERlJPTlRfUFJJVkFURV9LRVl9XG5cbiAgZnJvbnRlbmQ6XG4gICAgYnVpbGQ6XG4gICAgICBjb250ZXh0OiBcImh0dHBzOi8vZ2l0aHViLmNvbS9tdWx0aWNhLWFpL211bHRpY2EuZ2l0I21haW5cIlxuICAgICAgZG9ja2VyZmlsZTogRG9ja2VyZmlsZS53ZWJcbiAgICAgIGFyZ3M6XG4gICAgICAgIFJFTU9URV9BUElfVVJMOiBodHRwOi8vYmFja2VuZDo4MDgwXG4gICAgICAgIE5FWFRfUFVCTElDX0dPT0dMRV9DTElFTlRfSUQ6ICR7TkVYVF9QVUJMSUNfR09PR0xFX0NMSUVOVF9JRH1cbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGRlcGVuZHNfb246XG4gICAgICAtIGJhY2tlbmRcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIEhPU1ROQU1FOiBcIjAuMC4wLjBcIlxuXG52b2x1bWVzOlxuICBwZ2RhdGE6XG4gIGJhY2tlbmRfdXBsb2FkczpcbiIsCiAgImNvbmZpZyI6ICJbdmFyaWFibGVzXVxuYXBwX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbmp3dF9zZWNyZXQgPSBcIiR7cGFzc3dvcmQ6NjR9XCJcbnBvc3RncmVzX3Bhc3N3b3JkID0gXCIke3Bhc3N3b3JkOjMyfVwiXG5cbltjb25maWddXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJmcm9udGVuZFwiXG5wb3J0ID0gMzAwMFxuaG9zdCA9IFwiJHthcHBfZG9tYWlufVwiXG5wYXRoID0gXCIvXCJcblxuW2NvbmZpZy5lbnZdXG5QT1NUR1JFU19EQiA9IFwibXVsdGljYVwiXG5QT1NUR1JFU19VU0VSID0gXCJtdWx0aWNhXCJcblBPU1RHUkVTX1BBU1NXT1JEID0gXCIke3Bvc3RncmVzX3Bhc3N3b3JkfVwiXG5KV1RfU0VDUkVUID0gXCIke2p3dF9zZWNyZXR9XCJcbkZST05URU5EX09SSUdJTiA9IFwiaHR0cHM6Ly8ke2FwcF9kb21haW59XCJcbkFMTE9XRURfT1JJR0lOUyA9IFwiaHR0cHM6Ly8ke2FwcF9kb21haW59XCJcbk1VTFRJQ0FfQVBQX1VSTCA9IFwiaHR0cHM6Ly8ke2FwcF9kb21haW59XCJcblJFU0VORF9BUElfS0VZID0gXCJcIlxuUkVTRU5EX0ZST01fRU1BSUwgPSBcIm5vcmVwbHlAbXVsdGljYS5haVwiXG5HT09HTEVfQ0xJRU5UX0lEID0gXCJcIlxuR09PR0xFX0NMSUVOVF9TRUNSRVQgPSBcIlwiXG5HT09HTEVfUkVESVJFQ1RfVVJJID0gXCJodHRwczovLyR7YXBwX2RvbWFpbn0vYXV0aC9jYWxsYmFja1wiXG5ORVhUX1BVQkxJQ19HT09HTEVfQ0xJRU5UX0lEID0gXCJcIlxuQ09PS0lFX0RPTUFJTiA9IFwiXCJcblMzX0JVQ0tFVCA9IFwiXCJcblMzX1JFR0lPTiA9IFwidXMtd2VzdC0yXCJcbkNMT1VERlJPTlRfRE9NQUlOID0gXCJcIlxuQ0xPVURGUk9OVF9LRVlfUEFJUl9JRCA9IFwiXCJcbkNMT1VERlJPTlRfUFJJVkFURV9LRVkgPSBcIlwiXG4iCn0=

Tags

ai, agents, automation, self-hosted, claude-code, codex, developer-tools


Version: latest

On this page