Dokploy

Directus

Directus is an open source headless CMS that provides an API-first solution for building custom backends.

Directus logo

Configuration

services:
  directus:
    image: directus/directus:12.1.1
    ports:
      - 8055
    volumes:
      - directus_uploads:/directus/uploads
      - directus_extensions:/directus/extensions
    depends_on:
      database:
        condition: service_healthy
      cache:
        condition: service_healthy
    healthcheck:
      test: ["CMD-SHELL", "wget --spider -q http://127.0.0.1:8055/server/ping || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_interval: 5s
      start_period: 30s
    environment:
      SECRET: ${DIRECTUS_SECRET}

      DB_CLIENT: "pg"
      DB_HOST: "database"
      DB_PORT: "5432"
      DB_DATABASE: ${DB_NAME}
      DB_USER: ${DB_USER}
      DB_PASSWORD: ${DB_PASSWORD}

      CACHE_ENABLED: "true"
      CACHE_AUTO_PURGE: "true"
      CACHE_STORE: "redis"
      REDIS: "redis://cache:6379"

      WEBSOCKETS_ENABLED: "true"
      PUBLIC_URL: ${PUBLIC_URL}
      LICENSE_KEY: ${LICENSE_KEY}

      # After first successful login, remove ADMIN_EMAIL and ADMIN_PASSWORD below.
      ADMIN_EMAIL: ${ADMIN_EMAIL}
      ADMIN_PASSWORD: ${ADMIN_PASSWORD}

      STORAGE_LOCATIONS: "local"
      STORAGE_LOCAL_DRIVER: "local"
      STORAGE_LOCAL_ROOT: "/directus/uploads"

      # S3-compatible storage — uncomment and set S3_* env vars in template.toml.
      # STORAGE_LOCATIONS: "s3"
      # STORAGE_S3_DRIVER: "s3"
      # STORAGE_S3_KEY: ${S3_ACCESS_KEY}
      # STORAGE_S3_SECRET: ${S3_SECRET_KEY}
      # STORAGE_S3_BUCKET: ${S3_BUCKET}
      # STORAGE_S3_REGION: ${S3_REGION}
      # STORAGE_S3_ENDPOINT: ${S3_ENDPOINT}
      # STORAGE_S3_ROOT: ${S3_ROOT}
      # STORAGE_S3_FORCE_PATH_STYLE: ${S3_FORCE_PATH_STYLE}
      # STORAGE_S3_ACL: "private"

  database:
    image: postgis/postgis:13-master
    volumes:
      - directus_database:/var/lib/postgresql/data

    environment:
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: ${DB_NAME}
    healthcheck:
      test: ["CMD-SHELL", "pg_isready --host=localhost --username=$$POSTGRES_USER"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_interval: 5s
      start_period: 30s

  cache:
    image: redis:6
    healthcheck:
      test: ["CMD-SHELL", "[ $$(redis-cli ping) = 'PONG' ]"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_interval: 5s
      start_period: 30s

volumes:
  directus_uploads:
  directus_extensions:
  directus_database:
[variables]
main_domain = "${domain}"
public_url = "https://${main_domain}"
directus_secret = "${base64:64}"
db_password = "${password:32}"
db_user = "directus"
db_name = "directus"
admin_email = "${email}"
admin_password = "${password:24}"
license_key = ""

# Object storage (S3-compatible) — uncomment when switching from local to S3.
# s3_access_key = ""
# s3_secret_key = ""
# s3_bucket = ""
# s3_region = "us-east-1"
# s3_endpoint = "https://s3.amazonaws.com"
# s3_root = ""
# s3_force_path_style = "false"

[config]
env = [
  "PUBLIC_URL=${public_url}",
  "DIRECTUS_SECRET=${directus_secret}",
  "DB_PASSWORD=${db_password}",
  "DB_USER=${db_user}",
  "DB_NAME=${db_name}",
  "ADMIN_EMAIL=${admin_email}",
  "ADMIN_PASSWORD=${admin_password}",
  "LICENSE_KEY=${license_key}",
  # Uncomment when enabling S3 storage in docker-compose.yml:
  # "S3_ACCESS_KEY=${s3_access_key}",
  # "S3_SECRET_KEY=${s3_secret_key}",
  # "S3_BUCKET=${s3_bucket}",
  # "S3_REGION=${s3_region}",
  # "S3_ENDPOINT=${s3_endpoint}",
  # "S3_ROOT=${s3_root}",
  # "S3_FORCE_PATH_STYLE=${s3_force_path_style}",
]
mounts = []

[[config.domains]]
serviceName = "directus"
port = 8_055
host = "${main_domain}"

Base64

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

ewogICJjb21wb3NlIjogInNlcnZpY2VzOlxuICBkaXJlY3R1czpcbiAgICBpbWFnZTogZGlyZWN0dXMvZGlyZWN0dXM6MTIuMS4xXG4gICAgcG9ydHM6XG4gICAgICAtIDgwNTVcbiAgICB2b2x1bWVzOlxuICAgICAgLSBkaXJlY3R1c191cGxvYWRzOi9kaXJlY3R1cy91cGxvYWRzXG4gICAgICAtIGRpcmVjdHVzX2V4dGVuc2lvbnM6L2RpcmVjdHVzL2V4dGVuc2lvbnNcbiAgICBkZXBlbmRzX29uOlxuICAgICAgZGF0YWJhc2U6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICBjYWNoZTpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IFtcIkNNRC1TSEVMTFwiLCBcIndnZXQgLS1zcGlkZXIgLXEgaHR0cDovLzEyNy4wLjAuMTo4MDU1L3NlcnZlci9waW5nIHx8IGV4aXQgMVwiXVxuICAgICAgaW50ZXJ2YWw6IDEwc1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDVcbiAgICAgIHN0YXJ0X2ludGVydmFsOiA1c1xuICAgICAgc3RhcnRfcGVyaW9kOiAzMHNcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIFNFQ1JFVDogJHtESVJFQ1RVU19TRUNSRVR9XG5cbiAgICAgIERCX0NMSUVOVDogXCJwZ1wiXG4gICAgICBEQl9IT1NUOiBcImRhdGFiYXNlXCJcbiAgICAgIERCX1BPUlQ6IFwiNTQzMlwiXG4gICAgICBEQl9EQVRBQkFTRTogJHtEQl9OQU1FfVxuICAgICAgREJfVVNFUjogJHtEQl9VU0VSfVxuICAgICAgREJfUEFTU1dPUkQ6ICR7REJfUEFTU1dPUkR9XG5cbiAgICAgIENBQ0hFX0VOQUJMRUQ6IFwidHJ1ZVwiXG4gICAgICBDQUNIRV9BVVRPX1BVUkdFOiBcInRydWVcIlxuICAgICAgQ0FDSEVfU1RPUkU6IFwicmVkaXNcIlxuICAgICAgUkVESVM6IFwicmVkaXM6Ly9jYWNoZTo2Mzc5XCJcblxuICAgICAgV0VCU09DS0VUU19FTkFCTEVEOiBcInRydWVcIlxuICAgICAgUFVCTElDX1VSTDogJHtQVUJMSUNfVVJMfVxuICAgICAgTElDRU5TRV9LRVk6ICR7TElDRU5TRV9LRVl9XG5cbiAgICAgICMgQWZ0ZXIgZmlyc3Qgc3VjY2Vzc2Z1bCBsb2dpbiwgcmVtb3ZlIEFETUlOX0VNQUlMIGFuZCBBRE1JTl9QQVNTV09SRCBiZWxvdy5cbiAgICAgIEFETUlOX0VNQUlMOiAke0FETUlOX0VNQUlMfVxuICAgICAgQURNSU5fUEFTU1dPUkQ6ICR7QURNSU5fUEFTU1dPUkR9XG5cbiAgICAgIFNUT1JBR0VfTE9DQVRJT05TOiBcImxvY2FsXCJcbiAgICAgIFNUT1JBR0VfTE9DQUxfRFJJVkVSOiBcImxvY2FsXCJcbiAgICAgIFNUT1JBR0VfTE9DQUxfUk9PVDogXCIvZGlyZWN0dXMvdXBsb2Fkc1wiXG5cbiAgICAgICMgUzMtY29tcGF0aWJsZSBzdG9yYWdlIOKAlCB1bmNvbW1lbnQgYW5kIHNldCBTM18qIGVudiB2YXJzIGluIHRlbXBsYXRlLnRvbWwuXG4gICAgICAjIFNUT1JBR0VfTE9DQVRJT05TOiBcInMzXCJcbiAgICAgICMgU1RPUkFHRV9TM19EUklWRVI6IFwiczNcIlxuICAgICAgIyBTVE9SQUdFX1MzX0tFWTogJHtTM19BQ0NFU1NfS0VZfVxuICAgICAgIyBTVE9SQUdFX1MzX1NFQ1JFVDogJHtTM19TRUNSRVRfS0VZfVxuICAgICAgIyBTVE9SQUdFX1MzX0JVQ0tFVDogJHtTM19CVUNLRVR9XG4gICAgICAjIFNUT1JBR0VfUzNfUkVHSU9OOiAke1MzX1JFR0lPTn1cbiAgICAgICMgU1RPUkFHRV9TM19FTkRQT0lOVDogJHtTM19FTkRQT0lOVH1cbiAgICAgICMgU1RPUkFHRV9TM19ST09UOiAke1MzX1JPT1R9XG4gICAgICAjIFNUT1JBR0VfUzNfRk9SQ0VfUEFUSF9TVFlMRTogJHtTM19GT1JDRV9QQVRIX1NUWUxFfVxuICAgICAgIyBTVE9SQUdFX1MzX0FDTDogXCJwcml2YXRlXCJcblxuICBkYXRhYmFzZTpcbiAgICBpbWFnZTogcG9zdGdpcy9wb3N0Z2lzOjEzLW1hc3RlclxuICAgIHZvbHVtZXM6XG4gICAgICAtIGRpcmVjdHVzX2RhdGFiYXNlOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YVxuXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICBQT1NUR1JFU19VU0VSOiAke0RCX1VTRVJ9XG4gICAgICBQT1NUR1JFU19QQVNTV09SRDogJHtEQl9QQVNTV09SRH1cbiAgICAgIFBPU1RHUkVTX0RCOiAke0RCX05BTUV9XG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OiBbXCJDTUQtU0hFTExcIiwgXCJwZ19pc3JlYWR5IC0taG9zdD1sb2NhbGhvc3QgLS11c2VybmFtZT0kJFBPU1RHUkVTX1VTRVJcIl1cbiAgICAgIGludGVydmFsOiAxMHNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiA1XG4gICAgICBzdGFydF9pbnRlcnZhbDogNXNcbiAgICAgIHN0YXJ0X3BlcmlvZDogMzBzXG5cbiAgY2FjaGU6XG4gICAgaW1hZ2U6IHJlZGlzOjZcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IFtcIkNNRC1TSEVMTFwiLCBcIlsgJCQocmVkaXMtY2xpIHBpbmcpID0gJ1BPTkcnIF1cIl1cbiAgICAgIGludGVydmFsOiAxMHNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiA1XG4gICAgICBzdGFydF9pbnRlcnZhbDogNXNcbiAgICAgIHN0YXJ0X3BlcmlvZDogMzBzXG5cbnZvbHVtZXM6XG4gIGRpcmVjdHVzX3VwbG9hZHM6XG4gIGRpcmVjdHVzX2V4dGVuc2lvbnM6XG4gIGRpcmVjdHVzX2RhdGFiYXNlOlxuIiwKICAiY29uZmlnIjogIlt2YXJpYWJsZXNdXG5tYWluX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbnB1YmxpY191cmwgPSBcImh0dHBzOi8vJHttYWluX2RvbWFpbn1cIlxuZGlyZWN0dXNfc2VjcmV0ID0gXCIke2Jhc2U2NDo2NH1cIlxuZGJfcGFzc3dvcmQgPSBcIiR7cGFzc3dvcmQ6MzJ9XCJcbmRiX3VzZXIgPSBcImRpcmVjdHVzXCJcbmRiX25hbWUgPSBcImRpcmVjdHVzXCJcbmFkbWluX2VtYWlsID0gXCIke2VtYWlsfVwiXG5hZG1pbl9wYXNzd29yZCA9IFwiJHtwYXNzd29yZDoyNH1cIlxubGljZW5zZV9rZXkgPSBcIlwiXG5cbiMgT2JqZWN0IHN0b3JhZ2UgKFMzLWNvbXBhdGlibGUpIOKAlCB1bmNvbW1lbnQgd2hlbiBzd2l0Y2hpbmcgZnJvbSBsb2NhbCB0byBTMy5cbiMgczNfYWNjZXNzX2tleSA9IFwiXCJcbiMgczNfc2VjcmV0X2tleSA9IFwiXCJcbiMgczNfYnVja2V0ID0gXCJcIlxuIyBzM19yZWdpb24gPSBcInVzLWVhc3QtMVwiXG4jIHMzX2VuZHBvaW50ID0gXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb21cIlxuIyBzM19yb290ID0gXCJcIlxuIyBzM19mb3JjZV9wYXRoX3N0eWxlID0gXCJmYWxzZVwiXG5cbltjb25maWddXG5lbnYgPSBbXG4gIFwiUFVCTElDX1VSTD0ke3B1YmxpY191cmx9XCIsXG4gIFwiRElSRUNUVVNfU0VDUkVUPSR7ZGlyZWN0dXNfc2VjcmV0fVwiLFxuICBcIkRCX1BBU1NXT1JEPSR7ZGJfcGFzc3dvcmR9XCIsXG4gIFwiREJfVVNFUj0ke2RiX3VzZXJ9XCIsXG4gIFwiREJfTkFNRT0ke2RiX25hbWV9XCIsXG4gIFwiQURNSU5fRU1BSUw9JHthZG1pbl9lbWFpbH1cIixcbiAgXCJBRE1JTl9QQVNTV09SRD0ke2FkbWluX3Bhc3N3b3JkfVwiLFxuICBcIkxJQ0VOU0VfS0VZPSR7bGljZW5zZV9rZXl9XCIsXG4gICMgVW5jb21tZW50IHdoZW4gZW5hYmxpbmcgUzMgc3RvcmFnZSBpbiBkb2NrZXItY29tcG9zZS55bWw6XG4gICMgXCJTM19BQ0NFU1NfS0VZPSR7czNfYWNjZXNzX2tleX1cIixcbiAgIyBcIlMzX1NFQ1JFVF9LRVk9JHtzM19zZWNyZXRfa2V5fVwiLFxuICAjIFwiUzNfQlVDS0VUPSR7czNfYnVja2V0fVwiLFxuICAjIFwiUzNfUkVHSU9OPSR7czNfcmVnaW9ufVwiLFxuICAjIFwiUzNfRU5EUE9JTlQ9JHtzM19lbmRwb2ludH1cIixcbiAgIyBcIlMzX1JPT1Q9JHtzM19yb290fVwiLFxuICAjIFwiUzNfRk9SQ0VfUEFUSF9TVFlMRT0ke3MzX2ZvcmNlX3BhdGhfc3R5bGV9XCIsXG5dXG5tb3VudHMgPSBbXVxuXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJkaXJlY3R1c1wiXG5wb3J0ID0gOF8wNTVcbmhvc3QgPSBcIiR7bWFpbl9kb21haW59XCJcbiIKfQ==

Tags

cms


Version: 12.1.1

On this page