本地有一个 Monorepo 项目(用 pnpm 管理),例如结构大致如下:

askein/                # 根目录
  apps/
    web-ele/           # 要部署的前端应用
  packages/
    @askein-core/design  # 项目的一个包(组件库)
  pnpm-workspace.yaml
  package.json

1. 确认你的环境

本地

  • Node.js 已安装(推荐 LTS 版本,比如 18.x)
  • pnpm 已安装(npm install -g pnpm

服务器(阿里云 ECS)

  • 系统:常见的 CentOS / Ubuntu
  • 要有 SSH 登陆权限(最好绑定了 SSH key)
  • 能访问公网
  • Node.js + npm/pnpm(可选:也可以本地打包再传上去)

2. 本地打包

你的 monorepo 项目使用 pnpm,要打包一个子应用(比如 apps/web-ele),可以这样:

# 进入项目根目录
cd askein

# 安装依赖
pnpm install

# 构建项目(只构建 web-ele 及其依赖)
pnpm build --filter ./apps/web-ele

或者如果 @askein-core/design 是依赖:

pnpm build --filter @askein-core/design
pnpm build --filter ./apps/web-ele

注意

  • 有些 monorepo 项目会同时构建依赖包,所以建议先构建依赖包再构建应用。
  • 构建结果通常会在 apps/web-ele/distbuild 目录,具体看你的框架(React/Vite/Next.js)。

3. 部署到阿里云的方式(推荐两种)

方法一:本地打包 + 上传产物(推荐静态网站)

适合前端 SPA 或 SSR 编译产物

① 打包本地前端代码

pnpm build --filter ./apps/web-ele

假设生成的目录是:

apps/web-ele/dist

② 上传到阿里云服务器(用 scp)

# username 改成你的云服务器用户名,server-ip 改成你的公网 IP
scp -r apps/web-ele/dist username@server-ip:/home/username/web-ele

1. 确认系统版本

先看看你服务器的系统类型:

cat /etc/os-release

如果看到类似 Alibaba Cloud LinuxCentOS,那确实是基于 yum/dnf 的系统。


2. 安装 nano(可选)

默认 nano 没有,你可以装一下:

sudo yum install nano -y

如果你习惯 vi,可以直接用:

vi 文件路径

3. 安装 Nginx

sudo yum install nginx -y

4. 上传前端打包产物

在你本地项目中:

# 安装依赖
pnpm install

# 构建依赖包(如果有的话)
pnpm build --filter @askein-core/design

# 构建 web-ele 应用
pnpm build --filter ./apps/web-ele

构建产物通常会在:

apps/web-ele/dist

上传到服务器:

scp -r apps/web-ele/dist admin@你的IP:/home/admin/web-ele

admin 是服务器 SSH 用户名)


5. 配置 Nginx

在阿里云 Linux / CentOS 中,推荐把站点配置放到:

/etc/nginx/conf.d/web-ele.conf

用 vi 编辑:

sudo vi /etc/nginx/conf.d/web-ele.conf

写入:

server {
    listen 80;
    server_name  _;

    root /home/admin/web-ele;
    index index.html;

    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;

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

    location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    # API 代理(如果需要)
    location /api/ {
        proxy_pass http://localhost:8080/api/;
        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;
    }

    # WebSocket 代理
    location /ws/ {
        proxy_pass http://localhost:8080/ws/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
    }

    location = /ws {
        proxy_pass http://localhost:8080/ws;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
    }
}

保存退出:

  • i → 输入内容
  • Esc → 输入 :wq → 回车

6. 启动 Nginx

sudo systemctl enable nginx   # 开机自启
sudo systemctl start nginx    # 启动
sudo systemctl restart nginx  # 重启

7. 阿里云安全组放行 80 端口

登录 阿里云控制台,在 ECS 实例 安全组规则 中添加入方向规则:

  • 端口范围:80/80
  • 授权对象:0.0.0.0/0

8. 测试访问

在浏览器访问:

http://你的公网IP

如果绑定了域名并解析到 IP,就可以直接用域名访问。


Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐