Directus Production Deployment with Docker: Step-by-Step Guide

When Directus is deployed hastily, traffic growth and disk failures quickly turn a convenient admin panel into a source of downtime and data loss. We configure Directus for production with Docker, PostgreSQL, and S3, so your headless CMS runs stably and scales with your business. Our team delivers the project turnkey—from installation to ongoing support—ensuring reliability without missing deadlines.

Development and maintenance of all types of websites:

Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Our competencies:

Frequently Asked Questions

Latest works

  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1344
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1307
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1049
  • CRM development for Chasseurs
    CRM development for Chasseurs
    1097
  • Website development for SBH Partners
    Website development for SBH Partners
    1171
  • Website development for Red Pear
    Website development for Red Pear
    596

Imagine: you deployed Directus via npx, quickly got an admin panel, but a month later, with increased traffic, the site went down due to lack of caching — and media files were lost on disk failure. It's exactly these situations that push you toward a production deployment with Docker, PostgreSQL, and S3. This article provides a proven setup template that we use in numerous projects, from corporate portals to high-load APIs. Directus is a headless CMS that provides REST and GraphQL APIs on the fly, without generation. According to tests, API response speed is 2–3 times higher than Strapi, thanks to the lack of ORM layers. For production we always use Docker — it guarantees isolation, reproducibility, and easy scaling.

Why Choose Directus for Production?

Directus is not just another CMS. It is a headless platform that provides REST and GraphQL APIs on the fly, without generation. You integrate it into any existing database — no data migration needed. According to reviews, development speed doubles compared to traditional CMS. We recently deployed Directus for a large online store with a catalog of 50,000 products. After migrating from WordPress to Directus, the catalog page load time dropped from 3 seconds to 400 ms thanks to Redis caching and SSR on Nuxt 3. That is a real example: API speed increased 3 times, and infrastructure costs decreased by abandoning the monolith. Get an engineer consultation on choosing a headless CMS for your project.

How to Deploy Directus to Production with Docker?

The process includes five mandatory steps:

  1. Task audit — determine load, content volume, API requirements.
  2. Stack selection — Docker + PostgreSQL + S3 (or Cloudflare R2 for cheap storage).
  3. Deployment — write docker-compose.yml, configure Redis for caching, connect CDN.
  4. Environment configuration — SECRET, CORS, email, storage variables.
  5. Turnkey handover — documentation, credentials, team training.

Quick Start: via npx

npx create-directus-project@latest my-directus
# Questions:
# Database: PostgreSQL
# Host: localhost
# Port: 5432
# Database name: directus
# Username: directus
# Password: ...
# Admin email: [email protected]
# Admin password: ...
cd my-directus
npx directus start

This method is suitable for development, but not for production — no isolation, hard to scale.

Docker Deployment (Recommended)

Example ready docker-compose.yml:

version: '3'
services:
  directus:
    image: directus/directus:10.latest
    restart: unless-stopped
    ports:
      - "8055:8055"
    volumes:
      - ./uploads:/directus/uploads
      - ./extensions:/directus/extensions
    environment:
      SECRET: ${SECRET}
      DB_CLIENT: pg
      DB_HOST: postgres
      DB_PORT: 5432
      DB_DATABASE: ${DB_NAME}
      DB_USER: ${DB_USER}
      DB_PASSWORD: ${DB_PASSWORD}
      ADMIN_EMAIL: ${ADMIN_EMAIL}
      ADMIN_PASSWORD: ${ADMIN_PASSWORD}
      PUBLIC_URL: https://cms.example.com
      CORS_ENABLED: true
      CORS_ORIGIN: https://example.com
      CACHE_ENABLED: true
      CACHE_STORE: redis
      REDIS_HOST: redis
      REDIS_PORT: 6379
      STORAGE_LOCATIONS: local
      STORAGE_LOCAL_DRIVER: local
      STORAGE_LOCAL_ROOT: /directus/uploads
    depends_on:
      postgres:
        condition: service_healthy
  postgres:
    image: postgres:15-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: ${DB_NAME}
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${DB_USER}"]
      interval: 10s
  redis:
    image: redis:alpine
    restart: unless-stopped
volumes:
  postgres_data:

How to Configure Storage and Cache?

S3 Storage

For production, always use external storage. Example variables:

STORAGE_LOCATIONS=s3
STORAGE_S3_DRIVER=s3
STORAGE_S3_KEY=ACCESS_KEY
STORAGE_S3_SECRET=SECRET_KEY
STORAGE_S3_BUCKET=my-bucket
STORAGE_S3_REGION=eu-west-1
STORAGE_S3_ENDPOINT=https://s3.amazonaws.com
# For Cloudflare R2:
# STORAGE_S3_ENDPOINT=https://<account-id>.r2.cloudflarestorage.com
# STORAGE_S3_REGION=auto

Storage Comparison:

Storage Price (per 1 TB/month) Performance Geo-distribution
S3 ~$23 High Yes
Cloudflare R2 ~$0 (no egress) High Yes
Local disk free Low No

Order custom storage setup — we will choose the optimal option for your project.

Caching with Redis

Redis is mandatory for production: cache reduces database load by 60–80%. The configuration is already included in docker-compose.yml. Additionally, you can set CACHE_TTL (default 5 minutes). For high loads, use Redis Cluster. The cluster requires multiple nodes — this provides horizontal scaling and fault tolerance.

Parameter Value Description
CACHE_TTL 300 Cache TTL in seconds
CACHE_STORE redis Storage type
REDIS_HOST redis Redis host

What Problems Does Directus Solve?

Directus solves the problem of connecting backend to frontend by providing a flexible API. It is especially useful when you need to quickly launch a product with custom data structures. For example, for a marketplace with different product types, you don't need to write separate controllers — Directus generates endpoints automatically.

Common Directus Installation Mistakes

  • Using npm without Docker — issues with scaling and updates.
  • Skipping CORS configuration — CORS errors on frontend.
  • Storing media in local filesystem — data loss on disk failure.
  • No caching — slow API response at 100+ requests per second.
  • Incorrect SECRET generation — vulnerability to CSRF attacks.
  • No monitoring — performance issues go unnoticed.

What's Included in the Directus Setup Service?

As part of the service, you receive:

  • Fully configured production stack: Docker, PostgreSQL, Redis, S3.
  • Configuration tailored to your load (load balancing, CDN).
  • Deployment and maintenance documentation.
  • Admin panel access, API tokens.
  • Team training (2 hours online).
  • 2 weeks of support after launch.

This set covers 90% of typical projects. For non-standard ones, individual audit.

Timelines and Cost

Basic setup with Docker, PostgreSQL, S3, and basic configuration takes 2 to 4 hours. Complex projects (custom extensions, SSO, data migration) take 1 to 5 days. Cost is determined individually after audit. Get an engineer consultation — we'll evaluate your project in 1 day. Contact us to discuss details.