如何将本地Strapi无头CMS部署至公网,实现传统API服务?
部署Strapi应用为公网可访问API服务的可行方案
前置准备
- 一台带公网IP的服务器(云VPS、本地服务器做端口映射均可)
- 服务器安装对应版本的Node.js(Strapi v4要求v16+)、npm/yarn,以及目标数据库(建议替换SQLite为PostgreSQL/MySQL,生产环境更稳定)
第一步:调整Strapi应用配置
- 修改服务器监听配置
编辑config/server.js,将host从localhost改为0.0.0.0,允许所有IP访问,同时确认端口设置(默认1337):module.exports = ({ env }) => ({ host: env('HOST', '0.0.0.0'), port: env('PORT', 1337), app: { keys: env.array('APP_KEYS'), }, }); - 配置数据库
如果本地用SQLite,生产环境建议切换为PostgreSQL/MySQL,修改config/database.js对应数据库连接信息,确保服务器上的数据库服务正常运行且允许Strapi连接。 - 环境变量配置
将敏感信息(数据库密码、APP_KEYS等)存入服务器环境变量,避免硬编码在配置文件中。
第二步:部署方案选择
方案一:VPS直接部署
- 上传代码:通过Git推送或scp上传项目包到服务器,解压到目标目录
- 安装依赖:进入项目目录,执行
npm install或yarn install - 构建生产环境:执行
npm run build或yarn build生成优化后的生产代码 - 后台运行服务:用PM2进程管理器保持Strapi持续运行
- 安装PM2:
npm install pm2 -g - 启动服务:
pm2 start npm --name "strapi-api" -- run start - 配置开机自启:
pm2 startup,按提示执行生成的命令
- 安装PM2:
- 开放端口:在服务器防火墙中开放Strapi端口(如1337),例如Ubuntu用ufw:
ufw allow 1337/tcp ufw reload
方案二:Docker容器化部署
- 编写Dockerfile:在项目根目录创建
DockerfileFROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build EXPOSE 1337 CMD ["npm", "start"] - 构建镜像:
docker build -t strapi-api . - 运行容器:
docker run -d -p 1337:1337 --name strapi-container strapi-api- 如需持久化数据(如上传文件、数据库),添加数据卷挂载:
-v ./data:/app/data
- 如需持久化数据(如上传文件、数据库),添加数据卷挂载:
- 同样需要开放服务器的1337端口,确保容器可被公网访问
第三步:验证部署
- 访问
http://<服务器公网IP>:1337,能看到Strapi后台登录页或API响应即部署成功 - 测试API接口:访问
http://<服务器公网IP>:1337/api/[你的内容类型],确认数据正常返回
额外优化建议
- 域名与HTTPS:如果有域名,解析到服务器IP后用Nginx做反向代理,将80/443端口转发到1337,同时配置Let's Encrypt免费证书实现HTTPS访问
Nginx配置示例:server { listen 80; server_name your-domain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name your-domain.com; ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem; location / { proxy_pass http://localhost: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; } } - 安全配置:修改Strapi默认管理员密码,在
config/middlewares.js配置CORS允许的域名,关闭不必要的权限。
内容的提问来源于stack exchange,提问作者Antonino Sartori
相关产品推荐
相关产品推荐

