Directus
Directus is an open source headless CMS that provides an API-first solution for building custom backends.
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 → Advanced → Base64 import and paste the content below:
ewogICJjb21wb3NlIjogInNlcnZpY2VzOlxuICBkaXJlY3R1czpcbiAgICBpbWFnZTogZGlyZWN0dXMvZGlyZWN0dXM6MTIuMS4xXG4gICAgcG9ydHM6XG4gICAgICAtIDgwNTVcbiAgICB2b2x1bWVzOlxuICAgICAgLSBkaXJlY3R1c191cGxvYWRzOi9kaXJlY3R1cy91cGxvYWRzXG4gICAgICAtIGRpcmVjdHVzX2V4dGVuc2lvbnM6L2RpcmVjdHVzL2V4dGVuc2lvbnNcbiAgICBkZXBlbmRzX29uOlxuICAgICAgZGF0YWJhc2U6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICBjYWNoZTpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IFtcIkNNRC1TSEVMTFwiLCBcIndnZXQgLS1zcGlkZXIgLXEgaHR0cDovLzEyNy4wLjAuMTo4MDU1L3NlcnZlci9waW5nIHx8IGV4aXQgMVwiXVxuICAgICAgaW50ZXJ2YWw6IDEwc1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDVcbiAgICAgIHN0YXJ0X2ludGVydmFsOiA1c1xuICAgICAgc3RhcnRfcGVyaW9kOiAzMHNcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIFNFQ1JFVDogJHtESVJFQ1RVU19TRUNSRVR9XG5cbiAgICAgIERCX0NMSUVOVDogXCJwZ1wiXG4gICAgICBEQl9IT1NUOiBcImRhdGFiYXNlXCJcbiAgICAgIERCX1BPUlQ6IFwiNTQzMlwiXG4gICAgICBEQl9EQVRBQkFTRTogJHtEQl9OQU1FfVxuICAgICAgREJfVVNFUjogJHtEQl9VU0VSfVxuICAgICAgREJfUEFTU1dPUkQ6ICR7REJfUEFTU1dPUkR9XG5cbiAgICAgIENBQ0hFX0VOQUJMRUQ6IFwidHJ1ZVwiXG4gICAgICBDQUNIRV9BVVRPX1BVUkdFOiBcInRydWVcIlxuICAgICAgQ0FDSEVfU1RPUkU6IFwicmVkaXNcIlxuICAgICAgUkVESVM6IFwicmVkaXM6Ly9jYWNoZTo2Mzc5XCJcblxuICAgICAgV0VCU09DS0VUU19FTkFCTEVEOiBcInRydWVcIlxuICAgICAgUFVCTElDX1VSTDogJHtQVUJMSUNfVVJMfVxuICAgICAgTElDRU5TRV9LRVk6ICR7TElDRU5TRV9LRVl9XG5cbiAgICAgICMgQWZ0ZXIgZmlyc3Qgc3VjY2Vzc2Z1bCBsb2dpbiwgcmVtb3ZlIEFETUlOX0VNQUlMIGFuZCBBRE1JTl9QQVNTV09SRCBiZWxvdy5cbiAgICAgIEFETUlOX0VNQUlMOiAke0FETUlOX0VNQUlMfVxuICAgICAgQURNSU5fUEFTU1dPUkQ6ICR7QURNSU5fUEFTU1dPUkR9XG5cbiAgICAgIFNUT1JBR0VfTE9DQVRJT05TOiBcImxvY2FsXCJcbiAgICAgIFNUT1JBR0VfTE9DQUxfRFJJVkVSOiBcImxvY2FsXCJcbiAgICAgIFNUT1JBR0VfTE9DQUxfUk9PVDogXCIvZGlyZWN0dXMvdXBsb2Fkc1wiXG5cbiAgICAgICMgUzMtY29tcGF0aWJsZSBzdG9yYWdlIOKAlCB1bmNvbW1lbnQgYW5kIHNldCBTM18qIGVudiB2YXJzIGluIHRlbXBsYXRlLnRvbWwuXG4gICAgICAjIFNUT1JBR0VfTE9DQVRJT05TOiBcInMzXCJcbiAgICAgICMgU1RPUkFHRV9TM19EUklWRVI6IFwiczNcIlxuICAgICAgIyBTVE9SQUdFX1MzX0tFWTogJHtTM19BQ0NFU1NfS0VZfVxuICAgICAgIyBTVE9SQUdFX1MzX1NFQ1JFVDogJHtTM19TRUNSRVRfS0VZfVxuICAgICAgIyBTVE9SQUdFX1MzX0JVQ0tFVDogJHtTM19CVUNLRVR9XG4gICAgICAjIFNUT1JBR0VfUzNfUkVHSU9OOiAke1MzX1JFR0lPTn1cbiAgICAgICMgU1RPUkFHRV9TM19FTkRQT0lOVDogJHtTM19FTkRQT0lOVH1cbiAgICAgICMgU1RPUkFHRV9TM19ST09UOiAke1MzX1JPT1R9XG4gICAgICAjIFNUT1JBR0VfUzNfRk9SQ0VfUEFUSF9TVFlMRTogJHtTM19GT1JDRV9QQVRIX1NUWUxFfVxuICAgICAgIyBTVE9SQUdFX1MzX0FDTDogXCJwcml2YXRlXCJcblxuICBkYXRhYmFzZTpcbiAgICBpbWFnZTogcG9zdGdpcy9wb3N0Z2lzOjEzLW1hc3RlclxuICAgIHZvbHVtZXM6XG4gICAgICAtIGRpcmVjdHVzX2RhdGFiYXNlOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YVxuXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICBQT1NUR1JFU19VU0VSOiAke0RCX1VTRVJ9XG4gICAgICBQT1NUR1JFU19QQVNTV09SRDogJHtEQl9QQVNTV09SRH1cbiAgICAgIFBPU1RHUkVTX0RCOiAke0RCX05BTUV9XG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OiBbXCJDTUQtU0hFTExcIiwgXCJwZ19pc3JlYWR5IC0taG9zdD1sb2NhbGhvc3QgLS11c2VybmFtZT0kJFBPU1RHUkVTX1VTRVJcIl1cbiAgICAgIGludGVydmFsOiAxMHNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiA1XG4gICAgICBzdGFydF9pbnRlcnZhbDogNXNcbiAgICAgIHN0YXJ0X3BlcmlvZDogMzBzXG5cbiAgY2FjaGU6XG4gICAgaW1hZ2U6IHJlZGlzOjZcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IFtcIkNNRC1TSEVMTFwiLCBcIlsgJCQocmVkaXMtY2xpIHBpbmcpID0gJ1BPTkcnIF1cIl1cbiAgICAgIGludGVydmFsOiAxMHNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiA1XG4gICAgICBzdGFydF9pbnRlcnZhbDogNXNcbiAgICAgIHN0YXJ0X3BlcmlvZDogMzBzXG5cbnZvbHVtZXM6XG4gIGRpcmVjdHVzX3VwbG9hZHM6XG4gIGRpcmVjdHVzX2V4dGVuc2lvbnM6XG4gIGRpcmVjdHVzX2RhdGFiYXNlOlxuIiwKICAiY29uZmlnIjogIlt2YXJpYWJsZXNdXG5tYWluX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbnB1YmxpY191cmwgPSBcImh0dHBzOi8vJHttYWluX2RvbWFpbn1cIlxuZGlyZWN0dXNfc2VjcmV0ID0gXCIke2Jhc2U2NDo2NH1cIlxuZGJfcGFzc3dvcmQgPSBcIiR7cGFzc3dvcmQ6MzJ9XCJcbmRiX3VzZXIgPSBcImRpcmVjdHVzXCJcbmRiX25hbWUgPSBcImRpcmVjdHVzXCJcbmFkbWluX2VtYWlsID0gXCIke2VtYWlsfVwiXG5hZG1pbl9wYXNzd29yZCA9IFwiJHtwYXNzd29yZDoyNH1cIlxubGljZW5zZV9rZXkgPSBcIlwiXG5cbiMgT2JqZWN0IHN0b3JhZ2UgKFMzLWNvbXBhdGlibGUpIOKAlCB1bmNvbW1lbnQgd2hlbiBzd2l0Y2hpbmcgZnJvbSBsb2NhbCB0byBTMy5cbiMgczNfYWNjZXNzX2tleSA9IFwiXCJcbiMgczNfc2VjcmV0X2tleSA9IFwiXCJcbiMgczNfYnVja2V0ID0gXCJcIlxuIyBzM19yZWdpb24gPSBcInVzLWVhc3QtMVwiXG4jIHMzX2VuZHBvaW50ID0gXCJodHRwczovL3MzLmFtYXpvbmF3cy5jb21cIlxuIyBzM19yb290ID0gXCJcIlxuIyBzM19mb3JjZV9wYXRoX3N0eWxlID0gXCJmYWxzZVwiXG5cbltjb25maWddXG5lbnYgPSBbXG4gIFwiUFVCTElDX1VSTD0ke3B1YmxpY191cmx9XCIsXG4gIFwiRElSRUNUVVNfU0VDUkVUPSR7ZGlyZWN0dXNfc2VjcmV0fVwiLFxuICBcIkRCX1BBU1NXT1JEPSR7ZGJfcGFzc3dvcmR9XCIsXG4gIFwiREJfVVNFUj0ke2RiX3VzZXJ9XCIsXG4gIFwiREJfTkFNRT0ke2RiX25hbWV9XCIsXG4gIFwiQURNSU5fRU1BSUw9JHthZG1pbl9lbWFpbH1cIixcbiAgXCJBRE1JTl9QQVNTV09SRD0ke2FkbWluX3Bhc3N3b3JkfVwiLFxuICBcIkxJQ0VOU0VfS0VZPSR7bGljZW5zZV9rZXl9XCIsXG4gICMgVW5jb21tZW50IHdoZW4gZW5hYmxpbmcgUzMgc3RvcmFnZSBpbiBkb2NrZXItY29tcG9zZS55bWw6XG4gICMgXCJTM19BQ0NFU1NfS0VZPSR7czNfYWNjZXNzX2tleX1cIixcbiAgIyBcIlMzX1NFQ1JFVF9LRVk9JHtzM19zZWNyZXRfa2V5fVwiLFxuICAjIFwiUzNfQlVDS0VUPSR7czNfYnVja2V0fVwiLFxuICAjIFwiUzNfUkVHSU9OPSR7czNfcmVnaW9ufVwiLFxuICAjIFwiUzNfRU5EUE9JTlQ9JHtzM19lbmRwb2ludH1cIixcbiAgIyBcIlMzX1JPT1Q9JHtzM19yb290fVwiLFxuICAjIFwiUzNfRk9SQ0VfUEFUSF9TVFlMRT0ke3MzX2ZvcmNlX3BhdGhfc3R5bGV9XCIsXG5dXG5tb3VudHMgPSBbXVxuXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJkaXJlY3R1c1wiXG5wb3J0ID0gOF8wNTVcbmhvc3QgPSBcIiR7bWFpbl9kb21haW59XCJcbiIKfQ==Links
Tags
cms
Version: 12.1.1