Directus 无头 CMS 部署教程

Directus 是一款开源的无头内容管理系统(Headless CMS),能够将任何 SQL 数据库转化为可通过 REST 和 GraphQL API 访问的内容后端。它提供了直观的管理面板,让非技术人员也能轻松管理数据内容。Directus 支持 PostgreSQL、MySQL、SQLite、Oracle 和 MS SQL 等多种数据库。本文将介绍如何在搬瓦工 VPS 上使用 Docker 部署 Directus。部署前请确保已安装好 Docker 和 Docker Compose

一、系统要求

  • 操作系统:Ubuntu 20.04+ 或 Debian 11+。
  • 内存:至少 1GB,建议 2GB 以上。
  • 磁盘:至少 10GB 可用空间。
  • 域名:建议绑定域名并配置 SSL。

二、创建项目目录

mkdir -p /opt/directus/{uploads,extensions}
cd /opt/directus

三、编写 Docker Compose 配置

创建 docker-compose.yml,使用 PostgreSQL 作为数据库:

cat > /opt/directus/docker-compose.yml <<'EOF'
version: '3.8'

services:
  postgres:
    image: postgres:15-alpine
    restart: always
    environment:
      POSTGRES_DB: directus
      POSTGRES_USER: directus
      POSTGRES_PASSWORD: your_db_password
    volumes:
      - postgres_data:/var/lib/postgresql/data

  cache:
    image: redis:7-alpine
    restart: always

  directus:
    image: directus/directus:latest
    restart: always
    depends_on:
      - postgres
      - cache
    ports:
      - "8055:8055"
    environment:
      KEY: "your-random-key-here"
      SECRET: "your-random-secret-here"
      DB_CLIENT: "pg"
      DB_HOST: "postgres"
      DB_PORT: "5432"
      DB_DATABASE: "directus"
      DB_USER: "directus"
      DB_PASSWORD: "your_db_password"
      CACHE_ENABLED: "true"
      CACHE_STORE: "redis"
      REDIS: "redis://cache:6379"
      ADMIN_EMAIL: "admin@example.com"
      ADMIN_PASSWORD: "your_admin_password"
      PUBLIC_URL: "https://cms.yourdomain.com"
    volumes:
      - /opt/directus/uploads:/directus/uploads
      - /opt/directus/extensions:/directus/extensions

volumes:
  postgres_data:
EOF

生成随机密钥填入 KEY 和 SECRET:

openssl rand -hex 16
openssl rand -hex 16

四、启动 Directus

cd /opt/directus
docker compose up -d

查看启动日志,确认无报错:

docker compose logs -f directus

五、配置 Nginx 反向代理

apt install nginx certbot python3-certbot-nginx -y

cat > /etc/nginx/sites-available/directus <<'EOF'
server {
    listen 80;
    server_name cms.yourdomain.com;

    client_max_body_size 100M;

    location / {
        proxy_pass http://127.0.0.1:8055;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

ln -s /etc/nginx/sites-available/directus /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
certbot --nginx -d cms.yourdomain.com

六、使用管理面板

访问 https://cms.yourdomain.com,使用 Compose 中配置的管理员邮箱和密码登录。管理面板提供以下核心功能:

  • 内容模块:浏览和编辑所有集合中的数据。
  • 用户目录:管理系统用户和权限。
  • 文件库:上传和管理媒体文件。
  • 数据模型:可视化创建和修改集合(表)结构。
  • 设置:配置项目全局设置、角色权限等。

七、创建内容模型

以创建一个博客系统为例,在管理面板中创建以下集合:

  • articles:包含 title(文本)、content(富文本)、slug(文本)、published_date(日期)、status(下拉选择)、featured_image(文件)等字段。
  • categories:包含 name(文本)、slug(文本)、description(文本)等字段。
  • 在 articles 中添加一个 Many-to-One 关系字段,关联到 categories。

八、API 使用

Directus 自动为所有集合生成 REST 和 GraphQL API:

# REST API 示例

# 获取文章列表
curl https://cms.yourdomain.com/items/articles

# 带过滤和排序
curl "https://cms.yourdomain.com/items/articles?filter[status][_eq]=published&sort=-published_date&limit=10"

# GraphQL 查询
curl -X POST https://cms.yourdomain.com/graphql \
  -H "Content-Type: application/json" \
  -d '{"query": "{ articles(filter: {status: {_eq: \"published\"}}) { title content } }"}'

九、权限与角色管理

Directus 拥有灵活的权限系统。你可以创建不同的角色,为每个角色精确控制对每个集合的 CRUD 操作权限和字段级别的访问控制。Public 角色用于控制未认证用户可以访问的内容。

十、数据备份

# 备份数据库
docker exec directus-postgres-1 pg_dump -U directus directus > /opt/directus/backup_$(date +%Y%m%d).sql

# 备份上传文件
tar -czf /opt/directus/uploads_backup_$(date +%Y%m%d).tar.gz /opt/directus/uploads/

十一、常见问题

上传文件失败

检查 uploads 目录权限和 Nginx 的 client_max_body_size 配置。

API 请求返回 403

检查 Public 角色的权限配置,确保已授权相应集合的读取权限。使用 Token 认证时确保在请求头中携带正确的 Token。

总结

Directus 是一款功能丰富的无头 CMS,特别适合需要将内容管理与前端展示分离的项目。在搬瓦工 VPS 上部署后,你可以用它为任何前端框架(React、Vue、Next.js 等)提供内容 API。更多教程请参考:Strapi 部署Outline Wiki 部署Docker 安装教程。选购搬瓦工 VPS 请参考全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的循环折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。