Dokploy

Engram

Persistent memory for AI coding agents — self-hosted Engram Cloud sync server with a web dashboard, backed by PostgreSQL.

Engram logo

Configuration

version: "3.8"
services:
  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: engram
      POSTGRES_PASSWORD: engram
      POSTGRES_DB: engram_cloud
    volumes:
      - engram-postgres:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U engram -d engram_cloud"]
      interval: 5s
      timeout: 3s
      retries: 10

  engram:
    image: ghcr.io/gentleman-programming/engram:1.16.3
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      ENGRAM_DATABASE_URL: postgres://engram:engram@postgres:5432/engram_cloud?sslmode=disable
      ENGRAM_JWT_SECRET: ${ENGRAM_JWT_SECRET}
      ENGRAM_CLOUD_TOKEN: ${ENGRAM_CLOUD_TOKEN}
      ENGRAM_CLOUD_ADMIN: ${ENGRAM_CLOUD_ADMIN}
      ENGRAM_CLOUD_ALLOWED_PROJECTS: ${ENGRAM_CLOUD_ALLOWED_PROJECTS}
      ENGRAM_CLOUD_HOST: "0.0.0.0"
      ENGRAM_PORT: "8080"
    command: ["cloud", "serve"]
    expose:
      - 8080

volumes:
  engram-postgres:
[variables]
main_domain = "${domain}"
jwt_secret = "${password:64}"
cloud_token = "${password:48}"
admin_token = "${password:48}"

[config]
env = [
  "ENGRAM_JWT_SECRET=${jwt_secret}",
  "ENGRAM_CLOUD_TOKEN=${cloud_token}",
  "ENGRAM_CLOUD_ADMIN=${admin_token}",
  "ENGRAM_CLOUD_ALLOWED_PROJECTS=*",
]
mounts = []

[[config.domains]]
serviceName = "engram"
port = 8080
host = "${main_domain}"
path = "/dashboard"

Base64

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

ewogICJjb21wb3NlIjogInZlcnNpb246IFwiMy44XCJcbnNlcnZpY2VzOlxuICBwb3N0Z3JlczpcbiAgICBpbWFnZTogcG9zdGdyZXM6MTYtYWxwaW5lXG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIFBPU1RHUkVTX1VTRVI6IGVuZ3JhbVxuICAgICAgUE9TVEdSRVNfUEFTU1dPUkQ6IGVuZ3JhbVxuICAgICAgUE9TVEdSRVNfREI6IGVuZ3JhbV9jbG91ZFxuICAgIHZvbHVtZXM6XG4gICAgICAtIGVuZ3JhbS1wb3N0Z3JlczovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGFcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IFtcIkNNRC1TSEVMTFwiLCBcInBnX2lzcmVhZHkgLVUgZW5ncmFtIC1kIGVuZ3JhbV9jbG91ZFwiXVxuICAgICAgaW50ZXJ2YWw6IDVzXG4gICAgICB0aW1lb3V0OiAzc1xuICAgICAgcmV0cmllczogMTBcblxuICBlbmdyYW06XG4gICAgaW1hZ2U6IGdoY3IuaW8vZ2VudGxlbWFuLXByb2dyYW1taW5nL2VuZ3JhbToxLjE2LjNcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGRlcGVuZHNfb246XG4gICAgICBwb3N0Z3JlczpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIEVOR1JBTV9EQVRBQkFTRV9VUkw6IHBvc3RncmVzOi8vZW5ncmFtOmVuZ3JhbUBwb3N0Z3Jlczo1NDMyL2VuZ3JhbV9jbG91ZD9zc2xtb2RlPWRpc2FibGVcbiAgICAgIEVOR1JBTV9KV1RfU0VDUkVUOiAke0VOR1JBTV9KV1RfU0VDUkVUfVxuICAgICAgRU5HUkFNX0NMT1VEX1RPS0VOOiAke0VOR1JBTV9DTE9VRF9UT0tFTn1cbiAgICAgIEVOR1JBTV9DTE9VRF9BRE1JTjogJHtFTkdSQU1fQ0xPVURfQURNSU59XG4gICAgICBFTkdSQU1fQ0xPVURfQUxMT1dFRF9QUk9KRUNUUzogJHtFTkdSQU1fQ0xPVURfQUxMT1dFRF9QUk9KRUNUU31cbiAgICAgIEVOR1JBTV9DTE9VRF9IT1NUOiBcIjAuMC4wLjBcIlxuICAgICAgRU5HUkFNX1BPUlQ6IFwiODA4MFwiXG4gICAgY29tbWFuZDogW1wiY2xvdWRcIiwgXCJzZXJ2ZVwiXVxuICAgIGV4cG9zZTpcbiAgICAgIC0gODA4MFxuXG52b2x1bWVzOlxuICBlbmdyYW0tcG9zdGdyZXM6XG4iLAogICJjb25maWciOiAiW3ZhcmlhYmxlc11cbm1haW5fZG9tYWluID0gXCIke2RvbWFpbn1cIlxuand0X3NlY3JldCA9IFwiJHtwYXNzd29yZDo2NH1cIlxuY2xvdWRfdG9rZW4gPSBcIiR7cGFzc3dvcmQ6NDh9XCJcbmFkbWluX3Rva2VuID0gXCIke3Bhc3N3b3JkOjQ4fVwiXG5cbltjb25maWddXG5lbnYgPSBbXG4gIFwiRU5HUkFNX0pXVF9TRUNSRVQ9JHtqd3Rfc2VjcmV0fVwiLFxuICBcIkVOR1JBTV9DTE9VRF9UT0tFTj0ke2Nsb3VkX3Rva2VufVwiLFxuICBcIkVOR1JBTV9DTE9VRF9BRE1JTj0ke2FkbWluX3Rva2VufVwiLFxuICBcIkVOR1JBTV9DTE9VRF9BTExPV0VEX1BST0pFQ1RTPSpcIixcbl1cbm1vdW50cyA9IFtdXG5cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcImVuZ3JhbVwiXG5wb3J0ID0gODA4MFxuaG9zdCA9IFwiJHttYWluX2RvbWFpbn1cIlxucGF0aCA9IFwiL2Rhc2hib2FyZFwiXG4iCn0=

Tags

ai, memory, developer-tools


Version: 1.16.3

On this page