Vue3 项目生产环境下如何部署到 Nginx ?

导语

本文主要描述 Vue3 项目生命周期中比较重要的四部分内容:

  • Vue3 项目的创建
  • Vue3 项目的开发调试
  • Vue3 项目如何区分开发/测试/生产环境
  • Vue3 项目如何构建部署

这四部分内容都是通过 Vue Cli 实现的。

Vue3 项目的创建

使用 Vue CLI 可以很方便的生成 Vue3 的项目模板,俗称“脚手架”:

vue create hello-world

执行命令,出现选项提示:

Vue CLI v5.0.1
? Please pick a preset: (Use arrow keys)
❯ Default ([Vue 3] babel, eslint)
  Default ([Vue 2] babel, eslint)
  Manually select features

可以使用键盘方向键选择 Vue 版本,这里使用默认 Vue3,回车开始创建项目。

🎉  Successfully created project hello-world.
👉  Get started with the following commands:

 $ cd hello-world
 $ npm run serve

出现如上信息,表示项目创建成功。

hello-world 是项目名称,会使用该名称生成相应的项目文件夹,内部包含多个项目文件:

hello-world/

    README.md
    babel.config.js
    jsconfig.json
    node_modules
    package-lock.json
    package.json
    public
    src
    vue.config.js

Vue Cl
项目文件结构说明可以参考:VueJS 3 – Project Structure

Vue3 项目的开发调试

使用 Vue CLI 创建的项目会自带有一个简单示例,进入项目文件夹:

cd hello-world

执行命令:

npm run serve

会启动一个开发服务器运行项目:

 DONE  Compiled successfully in 4049ms                                                                                                                                          下午12:51:35


  App running at:
  - Local:   http://localhost:8080/
  - Network: http://192.168.0.110:8080/

  Note that the development build is not optimized.
  To create a production build, run npm run build.

使用浏览器访问 http://localhost:8080/,就可以看到示例页面。

有时候我们可能会看到不一样的运行命令,比如:npm run dev,这是为什么?

实际上,命令 npm run 的组成格式应为:

npm run [script]

script 可以理解为脚本名称,serve 或者 dev 只是脚本名称,npm run 本质是执行脚本名称对应的脚本。

脚本名称和对应的脚本被定义在项目的 package.json 文件中:

"scripts": {
  "serve": "vue-cli-service serve",
  "build": "vue-cli-service build",
  "lint": "vue-cli-service lint"
}

可以看出,npm run serve 实际执行的脚本命令是 vue-cli-service serve:

vue-cli-service serve 命令会启动一个开发服务器 (基于 webpack-dev-server) 并附带开箱即用的模块热重载 (Hot-Module-Replacement)。
  • 开发服务器
    项目开发时运行项目
  • 模块热重载
    项目开发过程中,大部分时候不需要手动重启开发服务器;项目变动时,开发服务器会自动完成重新加载,页面也会自动刷新。

vue-cli-service 是 Vue Cli 的命令,可以参考:vue-cli-service serve

Vue3 项目如何区分开发/测试/生产环境

Vue Cli 支持 模式和环境变量,不同的模式对应着不同的环境变量。默认情况下,内置以下三种模式:

  • development
    开发模式,使用命令 vue-cli-service serve 时默认使用开发模式;
  • test
    测试模式,使用命令 vue-cli-service test:unit 时默认使用测试模式;
  • production
    生产模式,使用命令 vue-cli-service build 或 vue-cli-service test:e2e 时默认使用生产模式;

使用上述命令时,如果需要使用其它的模式,可以通过参数 --mode 指定。

每一种模式都对应着一组环境变量,运行命令时会自动从相应模式的 环境文件 中加载,环境文件名称格式要求:

.env.[mode]

其中,mode 为模式名称。环境文件需要放置在项目根目录中。

.env 用于配置通用的环境变量。
模式名称支持自定义。

环境变量支持以下三种:

  • NODE_ENV
  • BASE_URL
  • 以 VUE_APP_ 开头的变量

NODE_ENV 对应用的构建运行有较大影响(参考官网),它的值取决于模式,对于内置的三种模式:

  • 模式:development,NODE_ENV:development
  • 模式:test,NODE_ENV:test
  • 模式:production,NODE_ENV:production

其它模式,NODE_ENV 的值来源于模式的环境文件;如果环境文件中没有配置 NODE_ENV 的值,则 NODE_ENV 为 development。

在代码中使用环境变量:

process.env.NODE_ENV
process.env.BASE_URL
process.env.VUE_APP_SECRET

Vue3 项目如何构建部署

项目构建

Vue3 项目部署之前,需要先将项目构建成可以部署的应用程序,在项目根目录内执行命令:

npm run build

出现以下提示信息:

 DONE  Compiled successfully in 7008ms                                                                                                                                           下午5:08:48

  File                                 Size                                                                     Gzipped

  dist/js/chunk-vendors.07827a19.js    72.69 KiB                                                                27.19 KiB
  dist/js/app.eae9c148.js              13.10 KiB                                                                8.44 KiB
  dist/css/app.2cf79ad6.css            0.33 KiB                                                                 0.23 KiB

  Images and other types of assets omitted.
  Build at: 2022-03-07T09:08:48.312Z - Hash: ce50ca3dd72b5756 - Time: 7008ms

 DONE  Build complete. The dist directory is ready to be deployed.
 INFO  Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html

表示项目构建完成。构建完成的应用程序位于项目根目录的 dist 文件夹内:

dist/
    css
    favicon.ico
    index.html
    js

项目部署

构建完成的应用程序可以部署至 Web 服务器中,这里以 Nginx 为例。

创建部署目录(/tmp/hello-world),将 dist 文件夹内的所有文件全部拷贝至部署目录:

mkdir -p /tmp/hello-world

cp -R ./dist /tmp/hello-world

配置 Nginx:

location / {
    root /Users/yurun/workspace/meetu/website/dist;
    index index.html;
    try_files $uri $uri/ /index.html;
}

root

应用程序的部署目录。

index

应用程序的默认请求页。对于构建完成单页面应用程序而言,仅有一个 index.html 页面文件。

try_files

Vue3 官方推荐使用路由库 Vue Router,它支持多种路由模式,推荐使用 HTML5 模式。使用这种模式需要注意一个问题:

假设应用内存在一个路由:/activity:如前文所述,应用部署目录内仅包含一个 index.html 文件;如果使用浏览器直接访问 http://localhost/activity,因为应用部署目录内并不存在名称为 activity 的页面文件,因此会提示 404。

类似这种情况,我们需要让 Nginx 内部将请求重定向至 /index.html,它内部的路由策略知道如何处理 /activity 请求。

重启 Nginx:

nginx -s reload

应用部署完成。

@萌猫他爸,互联网从业者/大数据架构师/全栈开发者

  • Blog
  • Github @leaderman
  • 微博 @萌猫他爸(知乎/小红书/…)
  • 公众号 @渊深海阔
  • 微信号 @meetuagent
<think>好的,我现在需要帮助用户了解如何将Vue3项目部署到CentOS服务器上并通过Nginx提供服务。首先,我需要回忆一下相关的步骤和可能需要的配置。根据用户提供的引用内容,特别是引用[2]和引用[4],用户可能已经有一些关于Vue项目部署的信息,但需要更详细的指导。 首先,用户的问题是关于Vue3部署,所以可能需要先构建Vue项目,生成dist目录。然后,将dist上传到服务器,接着配置Nginx来提供静态文件服务。我需要确保步骤清晰,包括安装依赖、构建项目配置Nginx以及可能的Docker使用,如引用[2]中提到的Dockerfile示例。 接下来,我需要考虑CentOS服务器的基本环境设置,例如安装Node.js和npm来构建Vue项目,或者是否需要使用Docker来简化环境配置。引用[3]提到了Django和Vue部署,可能涉及到前后端分离的配置,但用户的问题主要集中在Vue3Nginx,所以可能不需要涉及Django部分,但可能需要提到反向代理的配置,如果后端存在的话。 然后,关于Nginx配置,用户需要知道如何正确设置服务器块(server block),指定root目录为dist的位置,并处理路由问题,特别是Vue的路由模式(history模式)可能需要额外的配置来避免404错误。引用[2]中的nginx.conf示例显示拷贝到/etc/nginx/nginx.conf,但通常建议在conf.d目录下创建单独的配置文件,这样更清晰。 另外,用户可能需要了解如何将Nginx设置为开机自启动,如引用[1]提到的systemctl enable nginx命令,这也是部署的一部分。同时,防火墙配置需要开放80和443端口,以确保外部可以访问。 还需要考虑SSL证书的配置,使用Let&#39;s Encrypt来启用HTTPS,这会提升安全性。此外,可能还需要处理静态文件的缓存策略,或者Gzip压缩,以优化性能。 在步骤中,是否需要使用Docker?引用[2]提供了Dockerfile的示例,用户可能对容器化部署感兴趣。因此,可能需要分两种情况:直接部署和通过Docker部署,但用户的问题没有明确提到Docker,所以可能需要作为可选步骤提供。 现在,整理步骤: 1. 准备Vue3项目,安装依赖并构建生成dist目录。 2. 将dist上传到CentOS服务器的指定目录,如/opt/frontend/dist。 3. 安装Nginx配置服务器块,指向dist目录。 4. 配置Nginx处理Vue的路由模式,避免刷新后404。 5. 启动Nginx并设置开机自启。 6. 配置防火墙和SSL(可选)。 7. 使用Docker部署(可选)。 在每一步中,需要给出具体的命令和配置示例,例如npm run build,scp上传文件,编辑Nginx配置文件等。同时,要检查可能的错误点,例如权限问题,路径是否正确,SELinux设置等。 在Nginx配置部分,需要确保root指向正确的路径,如/usr/share/nginx/html或用户自定义的路径,并设置try_files来处理前端路由。例如: location / { try_files $uri $uri/ /index.html; } 此外,可能需要提及如何处理静态资源缓存,通过添加expires头。 在SSL部分,可以简要介绍如何使用certbot获取证书,并配置Nginx的443端口监听。 对于Docker部署,引用[2]中的Dockerfile示例可以作为参考,但需要用户创建自己的Dockerfile,构建镜像并运行容器,同时映射端口。 最后,测试部署是否成功,访问服务器IP或域名,查看Vue应用是否正常运行。如果出现问题,如何检查Nginx日志(/var/log/nginx/error.log)。 可能的相关问题包括如何处理路由404,如何优化Nginx性能,如何配置反向代理到后端API,或者如何自动化部署流程。 需要确保所有命令和配置正确,符合CentOS的环境,例如使用yum安装软件包,systemctl管理服务。同时,注意用户权限,可能需要使用sudo执行某些命令。 总结:需要分步骤详细说明从构建Vue项目Nginx配置的整个过程,包括必要的命令、配置文件和故障排除提示,同时引用提供的参考资料中的相关内容来支持步骤的正确性。</think>### 如何将Vue3项目部署到CentOS服务器并配置Nginx服务? #### 一、环境准备 1. **服务器环境** - CentOS 7/8系统 - 开放80(http)/443(https)端口 ```bash sudo firewall-cmd --permanent --add-port=80/tcp sudo firewall-cmd --permanent --add-port=443/tcp sudo firewall-cmd --reload ``` 2. **安装Node.js与npm** ```bash curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash - sudo yum install -y nodejs node -v # 验证安装 ``` --- #### 二、构建Vue3项目 1. **本地开发环境** - 安装依赖并构建生产包: ```bash npm install npm run build ``` - 生成`dist`目录(包含静态资源)。 2. **上传文件到服务器** - 使用`scp`或SFTP工具上传`dist`目录到服务器,例如: ```bash scp -r dist/ user@server_ip:/opt/frontend ``` --- #### 三、配置Nginx服务 1. **安装Nginx** ```bash sudo yum install epel-release -y sudo yum install nginx -y sudo systemctl start nginx sudo systemctl enable nginx # 开机自启[^1] ``` 2. **配置站点文件** - 创建Nginx配置文件(如`/etc/nginx/conf.d/vue-app.conf`): ```nginx server { listen 80; server_name your_domain.com; # 替换为域名或IP root /opt/frontend/dist; # 指向上传的dist目录 index index.html; location / { try_files $uri $uri/ /index.html; # 处理Vue路由模式 } # 静态资源缓存配置(可选) location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires 1y; add_header Cache-Control "public, no-transform"; } } ``` 3. **验证并重载Nginx** ```bash sudo nginx -t # 检查语法 sudo systemctl reload nginx ``` --- #### 四、进阶配置(可选) 1. **启用HTTPS** - 使用Let’s Encrypt申请免费证书: ```bash sudo yum install certbot python3-certbot-nginx -y sudo certbot --nginx -d your_domain.com ``` - 自动更新证书: ```bash sudo certbot renew --dry-run ``` 2. **Docker容器化部署(参考引用[2])** - 编写`Dockerfile`: ```dockerfile FROM nginx:alpine COPY ./dist /usr/share/nginx/html COPY ./nginx.conf /etc/nginx/conf.d/default.conf ``` - 构建并运行容器: ```bash docker build -t vue-app . docker run -d -p 80:80 --name vue-container vue-app ``` --- #### 五、验证部署 访问`http://your_domain.com`或`http://server_ip`,若显示Vue应用页面即成功。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值