Dokploy

Paperclip

Paperclip is an open-source control plane for managing teams of AI agents, goals, budgets, tickets, and recurring work.

Paperclip logo

Configuration

version: "3.8"

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

  paperclip:
    image: ghcr.io/paperclipai/paperclip:latest
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      HOST: 0.0.0.0
      PORT: "3100"
      SERVE_UI: "true"
      DATABASE_URL: ${DATABASE_URL}
      BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET}
      PAPERCLIP_HOME: /paperclip
      PAPERCLIP_INSTANCE_ID: default
      PAPERCLIP_CONFIG: /paperclip/instances/default/config.json
      PAPERCLIP_DEPLOYMENT_MODE: ${PAPERCLIP_DEPLOYMENT_MODE}
      PAPERCLIP_DEPLOYMENT_EXPOSURE: ${PAPERCLIP_DEPLOYMENT_EXPOSURE}
      PAPERCLIP_PUBLIC_URL: ${PAPERCLIP_PUBLIC_URL}
    expose:
      - "3100"
    volumes:
      - paperclip-data:/paperclip

volumes:
  postgres-data: {}
  paperclip-data: {}
[variables]
main_domain = "${domain}"
postgres_password = "${password:32}"
better_auth_secret = "${password:64}"

[config]
env = [
  "POSTGRES_PASSWORD=${postgres_password}",
  "DATABASE_URL=postgres://paperclip:${postgres_password}@postgres:5432/paperclip",
  "BETTER_AUTH_SECRET=${better_auth_secret}",
  "PAPERCLIP_DEPLOYMENT_MODE=authenticated",
  "PAPERCLIP_DEPLOYMENT_EXPOSURE=private",
  "PAPERCLIP_PUBLIC_URL=https://${main_domain}"
]
mounts = []

[[config.domains]]
serviceName = "paperclip"
port = 3100
host = "${main_domain}"

Base64

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

ewogICJjb21wb3NlIjogInZlcnNpb246IFwiMy44XCJcblxuc2VydmljZXM6XG4gIHBvc3RncmVzOlxuICAgIGltYWdlOiBwb3N0Z3JlczoxNy1hbHBpbmVcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGVudmlyb25tZW50OlxuICAgICAgUE9TVEdSRVNfVVNFUjogcGFwZXJjbGlwXG4gICAgICBQT1NUR1JFU19QQVNTV09SRDogJHtQT1NUR1JFU19QQVNTV09SRH1cbiAgICAgIFBPU1RHUkVTX0RCOiBwYXBlcmNsaXBcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IFtcIkNNRC1TSEVMTFwiLCBcInBnX2lzcmVhZHkgLVUgcGFwZXJjbGlwIC1kIHBhcGVyY2xpcFwiXVxuICAgICAgaW50ZXJ2YWw6IDEwc1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDEwXG4gICAgdm9sdW1lczpcbiAgICAgIC0gcG9zdGdyZXMtZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGFcblxuICBwYXBlcmNsaXA6XG4gICAgaW1hZ2U6IGdoY3IuaW8vcGFwZXJjbGlwYWkvcGFwZXJjbGlwOmxhdGVzdFxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIHBvc3RncmVzOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgIGVudmlyb25tZW50OlxuICAgICAgSE9TVDogMC4wLjAuMFxuICAgICAgUE9SVDogXCIzMTAwXCJcbiAgICAgIFNFUlZFX1VJOiBcInRydWVcIlxuICAgICAgREFUQUJBU0VfVVJMOiAke0RBVEFCQVNFX1VSTH1cbiAgICAgIEJFVFRFUl9BVVRIX1NFQ1JFVDogJHtCRVRURVJfQVVUSF9TRUNSRVR9XG4gICAgICBQQVBFUkNMSVBfSE9NRTogL3BhcGVyY2xpcFxuICAgICAgUEFQRVJDTElQX0lOU1RBTkNFX0lEOiBkZWZhdWx0XG4gICAgICBQQVBFUkNMSVBfQ09ORklHOiAvcGFwZXJjbGlwL2luc3RhbmNlcy9kZWZhdWx0L2NvbmZpZy5qc29uXG4gICAgICBQQVBFUkNMSVBfREVQTE9ZTUVOVF9NT0RFOiAke1BBUEVSQ0xJUF9ERVBMT1lNRU5UX01PREV9XG4gICAgICBQQVBFUkNMSVBfREVQTE9ZTUVOVF9FWFBPU1VSRTogJHtQQVBFUkNMSVBfREVQTE9ZTUVOVF9FWFBPU1VSRX1cbiAgICAgIFBBUEVSQ0xJUF9QVUJMSUNfVVJMOiAke1BBUEVSQ0xJUF9QVUJMSUNfVVJMfVxuICAgIGV4cG9zZTpcbiAgICAgIC0gXCIzMTAwXCJcbiAgICB2b2x1bWVzOlxuICAgICAgLSBwYXBlcmNsaXAtZGF0YTovcGFwZXJjbGlwXG5cbnZvbHVtZXM6XG4gIHBvc3RncmVzLWRhdGE6IHt9XG4gIHBhcGVyY2xpcC1kYXRhOiB7fSIsCiAgImNvbmZpZyI6ICJbdmFyaWFibGVzXVxubWFpbl9kb21haW4gPSBcIiR7ZG9tYWlufVwiXG5wb3N0Z3Jlc19wYXNzd29yZCA9IFwiJHtwYXNzd29yZDozMn1cIlxuYmV0dGVyX2F1dGhfc2VjcmV0ID0gXCIke3Bhc3N3b3JkOjY0fVwiXG5cbltjb25maWddXG5lbnYgPSBbXG4gIFwiUE9TVEdSRVNfUEFTU1dPUkQ9JHtwb3N0Z3Jlc19wYXNzd29yZH1cIixcbiAgXCJEQVRBQkFTRV9VUkw9cG9zdGdyZXM6Ly9wYXBlcmNsaXA6JHtwb3N0Z3Jlc19wYXNzd29yZH1AcG9zdGdyZXM6NTQzMi9wYXBlcmNsaXBcIixcbiAgXCJCRVRURVJfQVVUSF9TRUNSRVQ9JHtiZXR0ZXJfYXV0aF9zZWNyZXR9XCIsXG4gIFwiUEFQRVJDTElQX0RFUExPWU1FTlRfTU9ERT1hdXRoZW50aWNhdGVkXCIsXG4gIFwiUEFQRVJDTElQX0RFUExPWU1FTlRfRVhQT1NVUkU9cHJpdmF0ZVwiLFxuICBcIlBBUEVSQ0xJUF9QVUJMSUNfVVJMPWh0dHBzOi8vJHttYWluX2RvbWFpbn1cIlxuXVxubW91bnRzID0gW11cblxuW1tjb25maWcuZG9tYWluc11dXG5zZXJ2aWNlTmFtZSA9IFwicGFwZXJjbGlwXCJcbnBvcnQgPSAzMTAwXG5ob3N0ID0gXCIke21haW5fZG9tYWlufVwiIgp9

Tags

ai, agents, automation, self-hosted


Version: latest

On this page