Paperclip
Paperclip is an open-source control plane for managing teams of AI agents, goals, budgets, tickets, and recurring work.
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 → Advanced → Base64 import and paste the content below:
ewogICJjb21wb3NlIjogInZlcnNpb246IFwiMy44XCJcblxuc2VydmljZXM6XG4gIHBvc3RncmVzOlxuICAgIGltYWdlOiBwb3N0Z3JlczoxNy1hbHBpbmVcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGVudmlyb25tZW50OlxuICAgICAgUE9TVEdSRVNfVVNFUjogcGFwZXJjbGlwXG4gICAgICBQT1NUR1JFU19QQVNTV09SRDogJHtQT1NUR1JFU19QQVNTV09SRH1cbiAgICAgIFBPU1RHUkVTX0RCOiBwYXBlcmNsaXBcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IFtcIkNNRC1TSEVMTFwiLCBcInBnX2lzcmVhZHkgLVUgcGFwZXJjbGlwIC1kIHBhcGVyY2xpcFwiXVxuICAgICAgaW50ZXJ2YWw6IDEwc1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDEwXG4gICAgdm9sdW1lczpcbiAgICAgIC0gcG9zdGdyZXMtZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGFcblxuICBwYXBlcmNsaXA6XG4gICAgaW1hZ2U6IGdoY3IuaW8vcGFwZXJjbGlwYWkvcGFwZXJjbGlwOmxhdGVzdFxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIHBvc3RncmVzOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgIGVudmlyb25tZW50OlxuICAgICAgSE9TVDogMC4wLjAuMFxuICAgICAgUE9SVDogXCIzMTAwXCJcbiAgICAgIFNFUlZFX1VJOiBcInRydWVcIlxuICAgICAgREFUQUJBU0VfVVJMOiAke0RBVEFCQVNFX1VSTH1cbiAgICAgIEJFVFRFUl9BVVRIX1NFQ1JFVDogJHtCRVRURVJfQVVUSF9TRUNSRVR9XG4gICAgICBQQVBFUkNMSVBfSE9NRTogL3BhcGVyY2xpcFxuICAgICAgUEFQRVJDTElQX0lOU1RBTkNFX0lEOiBkZWZhdWx0XG4gICAgICBQQVBFUkNMSVBfQ09ORklHOiAvcGFwZXJjbGlwL2luc3RhbmNlcy9kZWZhdWx0L2NvbmZpZy5qc29uXG4gICAgICBQQVBFUkNMSVBfREVQTE9ZTUVOVF9NT0RFOiAke1BBUEVSQ0xJUF9ERVBMT1lNRU5UX01PREV9XG4gICAgICBQQVBFUkNMSVBfREVQTE9ZTUVOVF9FWFBPU1VSRTogJHtQQVBFUkNMSVBfREVQTE9ZTUVOVF9FWFBPU1VSRX1cbiAgICAgIFBBUEVSQ0xJUF9QVUJMSUNfVVJMOiAke1BBUEVSQ0xJUF9QVUJMSUNfVVJMfVxuICAgIGV4cG9zZTpcbiAgICAgIC0gXCIzMTAwXCJcbiAgICB2b2x1bWVzOlxuICAgICAgLSBwYXBlcmNsaXAtZGF0YTovcGFwZXJjbGlwXG5cbnZvbHVtZXM6XG4gIHBvc3RncmVzLWRhdGE6IHt9XG4gIHBhcGVyY2xpcC1kYXRhOiB7fSIsCiAgImNvbmZpZyI6ICJbdmFyaWFibGVzXVxubWFpbl9kb21haW4gPSBcIiR7ZG9tYWlufVwiXG5wb3N0Z3Jlc19wYXNzd29yZCA9IFwiJHtwYXNzd29yZDozMn1cIlxuYmV0dGVyX2F1dGhfc2VjcmV0ID0gXCIke3Bhc3N3b3JkOjY0fVwiXG5cbltjb25maWddXG5lbnYgPSBbXG4gIFwiUE9TVEdSRVNfUEFTU1dPUkQ9JHtwb3N0Z3Jlc19wYXNzd29yZH1cIixcbiAgXCJEQVRBQkFTRV9VUkw9cG9zdGdyZXM6Ly9wYXBlcmNsaXA6JHtwb3N0Z3Jlc19wYXNzd29yZH1AcG9zdGdyZXM6NTQzMi9wYXBlcmNsaXBcIixcbiAgXCJCRVRURVJfQVVUSF9TRUNSRVQ9JHtiZXR0ZXJfYXV0aF9zZWNyZXR9XCIsXG4gIFwiUEFQRVJDTElQX0RFUExPWU1FTlRfTU9ERT1hdXRoZW50aWNhdGVkXCIsXG4gIFwiUEFQRVJDTElQX0RFUExPWU1FTlRfRVhQT1NVUkU9cHJpdmF0ZVwiLFxuICBcIlBBUEVSQ0xJUF9QVUJMSUNfVVJMPWh0dHBzOi8vJHttYWluX2RvbWFpbn1cIlxuXVxubW91bnRzID0gW11cblxuW1tjb25maWcuZG9tYWluc11dXG5zZXJ2aWNlTmFtZSA9IFwicGFwZXJjbGlwXCJcbnBvcnQgPSAzMTAwXG5ob3N0ID0gXCIke21haW5fZG9tYWlufVwiIgp9Links
Tags
ai, agents, automation, self-hosted
Version: latest