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

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, an

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

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1414
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    982
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1241
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    982
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Website development for FIXPER company
    994

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.