当前位置: 首页 > article >正文

对于部署 React 应用,我推荐以下方案(20241127使用方案1Nginx+PM2):

对于部署 React 应用,我推荐以下方案(20241127使用方案1Nginx+PM2):

方案1:Nginx + PM2(推荐)

这是最常用的生产环境部署方式:

  1. 构建项目:
# 本地构建
npm run build

# 将 build 目录上传到服务器
scp -r build/* root@your-server:/www/video-app/
  1. Nginx 配置:
server {
    listen 80;
    server_name xoxome.top;

    # 静态文件目录
    root /www/video-app/build;
    index index.html;

    # 处理前端路由
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 如果有后端 API,配置代理
    location /api {
        proxy_pass http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
  1. 使用 PM2 管理后端服务:
# 安装 PM2
npm install -g pm2

# 启动后端服务
pm2 start server/index.js --name "video-app-api"

# 设置开机自启
pm2 startup
pm2 save

方案2:Docker 部署

如果使用容器化部署:

  1. 前端 Dockerfile:
FROM node:18-alpine as builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
  1. 后端 Dockerfile:
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
CMD ["npm", "start"]
  1. Docker Compose:
version: '3'
services:
  frontend:
    build:
      context: ./client
      dockerfile: Dockerfile.client
    ports:
      - "80:80"
    depends_on:
      - backend

  backend:
    build:
      context: ./server
      dockerfile: Dockerfile.server
    ports:
      - "3001:3001"
    environment:
      - NODE_ENV=production

方案3:使用 CI/CD(持续集成/持续部署)

使用 GitHub Actions 或 GitLab CI:

name: Deploy
on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      
      - name: Build
        run: |
          npm install
          npm run build
          
      - name: Deploy
        uses: appleboy/scp-action@master
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USERNAME }}
          key: ${{ secrets.SSH_KEY }}
          source: "build/*"
          target: "/www/video-app/"

建议和最佳实践:

  1. 安全性

    • 使用 HTTPS(Let’s Encrypt)
    • 设置适当的 CORS 策略
    • 使用环境变量存储敏感信息
  2. 性能优化

    • 启用 Nginx 缓存
    • 使用 CDN 加速静态资源
    • 开启 Gzip 压缩
  3. 监控

    • 使用 PM2 监控进程
    • 设置日志收集
    • 配置错误报警
  4. 备份策略

    • 定期备份数据
    • 保存多个版本的备份
    • 测试恢复流程

我建议使用方案1(Nginx + PM2),因为:

  • 部署简单直观
  • 维护成本低
  • 性能好
  • 容易扩展
  • 适合大多数中小型项目

如果团队已经在使用容器技术,那么方案2(Docker)也是很好的选择。

在 CentOS 9 上部署之前,需要进行以下准备工作:

1. 系统更新和基础工具安装

# 更新系统
dnf update -y

# 安装基础工具
dnf install -y wget curl git vim

2. 安装 Node.js 和 npm

# 添加 NodeSource 仓库
curl -fsSL https://rpm.nodesource.com/setup_18.x | bash -

# 安装 Node.js 和 npm
dnf install -y nodejs

# 验证安装
node --version
npm --version

# 安装 PM2
npm install -g pm2

3. 安装和配置 Nginx

# 安装 Nginx
dnf install -y nginx

# 启动 Nginx
systemctl start nginx
systemctl enable nginx

# 检查状态
systemctl status nginx

4. 配置防火墙

# 安装防火墙工具(如果没有)
dnf install -y firewalld

# 启动防火墙
systemctl start firewalld
systemctl enable firewalld

# 开放需要的端口
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-port=3001/tcp  # 如果需要后端端口
firewall-cmd --reload

5. 创建项目目录和设置权限

# 创建项目目录
mkdir -p /www/video-app

# 创建专门的用户来运行应用(推荐)
useradd -r nodejs
chown -R nodejs:nodejs /www/video-app

# 设置适当的权限
chmod -R 755 /www/video-app

6. 配置 Nginx 虚拟主机

server {
    listen 80;
    server_name your-domain.com;  # 替换为你的域名

    root /www/video-app/build;
    index index.html;

    # 启用 gzip 压缩
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    location / {
        try_files $uri $uri/ /index.html;
    }

    # 如果有后端 API
    location /api {
        proxy_pass http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    # 安全相关配置
    location ~ /\. {
        deny all;
    }
}

7. SELinux 配置(如果启用)

# 检查 SELinux 状态
sestatus

# 如果需要允许 Nginx 访问项目目录
semanage fcontext -a -t httpd_sys_content_t "/www/video-app(/.*)?"
restorecon -Rv /www/video-app

# 如果需要允许 Nginx 作为反向代理
setsebool -P httpd_can_network_connect 1

8. 设置环境变量(如果需要)

# 创建环境变量文件
vim /www/video-app/.env

# 添加需要的环境变量
NODE_ENV=production
API_URL=http://your-api-url
# ... 其他环境变量

9. 设置日志目录

# 创建日志目录
mkdir -p /www/video-app/logs

# 设置权限
chown -R nodejs:nodejs /www/video-app/logs
chmod 755 /www/video-app/logs

10. 安装证书(如果需要 HTTPS)

# 安装 certbot
dnf install -y certbot python3-certbot-nginx

# 获取证书
certbot --nginx -d xoxome.top

检查清单:

  1. 确认所有服务正常运行:
systemctl status nginx
systemctl status firewalld
pm2 status
  1. 测试 Nginx 配置:
nginx -t
  1. 检查端口监听状态:
ss -tulpn
  1. 检查日志文件权限:
ls -la /www/video-app/logs

完成这些步骤后,服务器就准备好接收部署了。之后你就可以:

  1. 在本地构建项目 (npm run build)
  2. 将构建文件上传到服务器
  3. 启动应用并用 PM2 管理

记得定期:

  • 更新系统包
  • 检查日志
  • 备份数据
  • 监控服务器资源使用情况

http://www.kler.cn/a/418522.html

相关文章:

  • 多点DMALL启动招股:将在港交所上市,聚焦数字零售服务
  • CCF 第一届算法竞赛 CACC 考题回忆
  • 349. 两个数组的交集:
  • 【Linux-多线程】重谈地址空间+内存管理方式
  • 项目快过:知识蒸馏 | 目标检测 |FGD | Focal and Global Knowledge Distillation for Detectors
  • 内容安全与系统构建加速,助力解决生成式AI时代的双重挑战
  • 打字指法和键盘按键功能简介
  • 【51单片机】程序实验910.直流电机-步进电机
  • 探索嵌入式硬件设计:揭秘智能设备的心脏
  • 地级市单要素能源利用效率及能源消耗总量(2000-2022年)
  • openjdk17 jvm堆空间分配
  • 关于VNC连接时自动断联的问题
  • 【前端入门】行内元素和块级元素
  • 【0x0001】HCI_Set_Event_Mask详解
  • Qt之样式表设置总结。。。持续更新
  • qt QToolButton详解
  • 【树莓派5】移动热点获取树莓派IP并初次登录SSH
  • Linux Shell 脚本题目集(2)
  • LuaForWindows_v5.1.5-52.exe
  • JS的魔法三角:constructor、prototype与__proto__
  • WordPress 项目迁移的完整指南:步骤与注意事项
  • 【Android】从事件分发开始:原理解析如何解决滑动冲突
  • osg加载模型丢失纹理
  • 在oracle下载jdk显示400 Bad Request Request Header Or Cookie Too Large
  • pdf也算是矢量图——pdf大小调整--福昕pdf
  • 多源传感器构建机器人的Gazebo模型