文章 文章 posts

🚀 Strapi 生产环境部署指南

在生产环境部署 Strapi 时,需要确保安全性、稳定性和性能。下面是详细的生产部署指南(以 Linux + Node.js + Nginx 为例)。

🧩 一、前置条件

在服务器上安装好以下环境:

软件 说明 检查命令
Node.js (LTS) 建议使用 v18+ node -v
npm 或 yarn 用于安装依赖 npm -v / yarn -v
数据库 PostgreSQL / MySQL / SQLite 等 —
PM2 Node 进程守护工具 npm i -g pm2
Nginx 用作反向代理和静态资源服务器 nginx -v

⚙️ 二、构建生产版本

1️⃣ 进入项目目录

bash
cd /var/www/my-strapi
代码

2️⃣ 安装依赖

```
bash
npm install --production
# 或
yarn install --production

```

3️⃣ 构建管理面板(Admin UI)

```
bash
npm run build

```

4️⃣ 启动测试

```
bash
npm run start

```

访问 `http://localhost:1337` 确认运行正常。

## 🚀 三、使用 PM2 启动守护进程

创建 PM2 配置:

```
bash
pm2 start npm --name "strapi" -- run start
pm2 save
pm2 startup

```

> 💡 PM2 会在系统重启后自动启动 Strapi。
> 你可以查看状态:
>
> ```
bash
> pm2 list
> pm2 logs strapi
> 
```

## 🌍 四、配置 Nginx 反向代理(推荐)

编辑配置文件:

```
bash
sudo nano /etc/nginx/sites-available/strapi.conf

```

内容示例:

```
nginx
server {
  listen 80;
  server_name your-domain.com;

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

  # 可选:服务静态文件
  location /uploads/ {
    alias /var/www/my-strapi/public/uploads/;
  }
}

```

启用并重启:

```
bash
sudo ln -s /etc/nginx/sites-available/strapi.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

```

## 🔐 五、环境变量配置

在生产中,不要在代码里写死配置,而是使用 `.env` 文件:

```
bash
NODE_ENV=production
HOST=0.0.0.0
PORT=1337

APP_KEYS=your_app_keys
API_TOKEN_SALT=your_api_token_salt
ADMIN_JWT_SECRET=your_admin_jwt_secret
JWT_SECRET=your_jwt_secret

# 数据库连接
DATABASE_CLIENT=postgres
DATABASE_HOST=127.0.0.1
DATABASE_PORT=5432
DATABASE_NAME=strapi_db
DATABASE_USERNAME=strapi_user
DATABASE_PASSWORD=your_password

```

然后在 Strapi 的 `config/database.js`、`config/server.js` 使用 `env()` 读取。

## 📦 六、备份与升级建议

| 类型       | 建议                                    |
| ---------- | --------------------------------------- |
| 数据库备份 | 定期备份 PostgreSQL / MySQL             |
| 上传文件   | 同步 `/public/uploads/`                 |
| 安全更新   | 定期执行 `npm audit`、`pm2 update`      |
| HTTPS      | 使用 Let’s Encrypt 配置 SSL (`certbot`) |

## 🧠 七、可选优化

- **使用 Docker 部署**:通过 `Dockerfile + docker-compose.yml` 封装环境。
- **使用 CI/CD**:在 GitLab/Jenkins 中自动构建、发布。
- **集群部署**:结合 **PM2 Cluster Mode** 或 Kubernetes。

## ✅ 示例生产启动命令

```
bash
NODE_ENV=production pm2 start npm --name strapi -- run start

```
```
`