Strapi 无头 CMS 搭建教程

Strapi 是目前最流行的开源 Node.js 无头 CMS 之一,提供了可视化的内容类型构建器和功能完善的管理面板。开发者可以通过 Strapi 快速设计内容结构,自动生成 REST 和 GraphQL API,然后在任何前端框架中使用这些 API 展示内容。本文将介绍如何在搬瓦工 VPS 上部署 Strapi。部署前请确保已安装好 Docker 和 Docker Compose

一、系统要求

  • 操作系统:Ubuntu 20.04+ 或 Debian 11+。
  • 内存:至少 2GB,建议 4GB(Strapi 构建时需要较多内存)。
  • 磁盘:至少 15GB 可用空间。
  • Node.js:如果不使用 Docker,需要 Node.js 18 或 20。

二、使用 Docker Compose 部署

创建项目目录:

mkdir -p /opt/strapi
cd /opt/strapi

创建 docker-compose.yml 文件:

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

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

  strapi:
    image: strapi/strapi:latest
    restart: always
    depends_on:
      - postgres
    ports:
      - "1337:1337"
    environment:
      DATABASE_CLIENT: postgres
      DATABASE_HOST: postgres
      DATABASE_PORT: 5432
      DATABASE_NAME: strapi
      DATABASE_USERNAME: strapi
      DATABASE_PASSWORD: your_db_password
      APP_KEYS: "key1,key2,key3,key4"
      API_TOKEN_SALT: "your-api-token-salt"
      ADMIN_JWT_SECRET: "your-admin-jwt-secret"
      TRANSFER_TOKEN_SALT: "your-transfer-token-salt"
      JWT_SECRET: "your-jwt-secret"
      NODE_ENV: production
    volumes:
      - strapi_data:/srv/app

volumes:
  postgres_data:
  strapi_data:
EOF

生成所需的随机密钥:

# 生成 APP_KEYS(需要 4 个 base64 编码的密钥,用逗号分隔)
for i in {1..4}; do openssl rand -base64 16; done

# 生成其他密钥
openssl rand -hex 32

三、原生 Node.js 部署(可选)

如果不想使用 Docker,也可以直接通过 Node.js 部署:

# 安装 Node.js 20
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs

# 创建 Strapi 项目
npx create-strapi-app@latest my-project --quickstart --no-run
cd /opt/strapi/my-project

# 构建并启动
NODE_ENV=production npm run build
NODE_ENV=production npm run start

四、启动 Strapi

cd /opt/strapi
docker compose up -d

首次启动需要较长时间来初始化数据库和构建管理面板。查看日志:

docker compose logs -f strapi

当看到类似 "Strapi started" 的信息时,表示启动成功。

五、配置 Nginx 反向代理

apt install nginx certbot python3-certbot-nginx -y

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

    client_max_body_size 100M;

    location / {
        proxy_pass http://127.0.0.1:1337;
        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/strapi /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
certbot --nginx -d cms.yourdomain.com

六、初始化管理面板

访问 https://cms.yourdomain.com/admin,首次访问会要求创建超级管理员账户。登录后你会看到以下核心功能模块:

  • Content-Type Builder:可视化设计内容类型结构。
  • Content Manager:管理已创建的内容。
  • Media Library:上传和管理媒体文件。
  • Settings:配置角色、权限、Webhook 等。

七、创建内容类型

在 Content-Type Builder 中创建新的内容类型。例如创建一个 "Article" 类型:

  • title:短文本(必填)。
  • content:富文本。
  • slug:UID 字段(基于 title 自动生成)。
  • cover:媒体字段(单个图片)。
  • category:关系字段(多对一)。
  • published_at:日期时间字段。

保存后 Strapi 会自动重启并生成对应的 API 端点。

八、配置 API 权限

默认情况下,所有 API 端点都需要认证才能访问。在 Settings > Roles > Public 中配置公开访问权限:

  • 勾选 Article 的 find 和 findOne 权限,允许公开读取文章列表和详情。
  • 创建(create)、更新(update)、删除(delete)等操作保持需要认证。

九、API 使用示例

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

# 带筛选和分页
curl "https://cms.yourdomain.com/api/articles?filters[category][name][\$eq]=tech&pagination[page]=1&pagination[pageSize]=10&sort=publishedAt:desc"

# 带关联数据
curl "https://cms.yourdomain.com/api/articles?populate=category,cover"

十、数据备份与升级

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

# 升级 Strapi
cd /opt/strapi
docker compose pull
docker compose up -d

十一、常见问题

构建内存不足

Strapi 在构建管理面板时需要较多内存。如果内存不足导致构建失败,可以创建 swap 空间:

fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab

管理面板加载缓慢

确保 NODE_ENV 设置为 production,生产模式下管理面板会使用预构建的静态文件。

总结

Strapi 是一款成熟且功能丰富的无头 CMS,拥有活跃的社区和丰富的插件生态。在搬瓦工 VPS 上部署 Strapi 后,你可以快速为博客、企业官网、电商等项目构建内容管理后端。建议选择 2GB 以上内存的方案。更多教程请参考:Directus 部署Wiki.js 部署BookStack 部署。选购搬瓦工 VPS 请参考全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的循环折扣。

关于本站

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

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。