Nuxt.js(Vue SSR)创建项目到服务器(Nginx+PM2)部署详细流程(上)

简介: Nuxt.js(Vue SSR)创建项目到服务器(Nginx+PM2)部署详细流程

一、什么是 SSR ?

  • SSR 就是 服务器渲染,什么是 服务器渲染?由 服务器 组装好 DOM 元素,生成 HTML 字符串给到浏览器,也就是在浏览器里面是可以看到整个页面的 DOM 源码的。
  • SSR 解决的问题:
    SEO:搜索引擎的优先爬取级别是页面的 HTML 结构,当我们使用 SSR 的时候,服务端已经生成了与业务相关联的 HTML,这样的信息对于 SEO 是很友好的。
    内容呈现:客户端无需等待所有的 JS 文件加载完成即可看见渲染的业务相关视图(压力来到了服务端这边,这也是需要做权衡的地方,需要区分哪些由服务端渲染,哪些可以交给客户端)。
  • SSR 相关的弊端:
    代码兼容:对于开发人员来讲,需要去兼容代码在不同环境的运行 Vue SSR 所需要的服务端环境是 Node,有一些客户端的对象,比如 domwindows 之类的则无法使用。
    服务器负载:相对于前后端分离模式下服务器只需要提供静态资源来说,SSR 需要的服务器负载更大,所以在项目中使用 SSR 模式要慎重,比如一整套图表页面,相对于服务端渲染,可能用户不会在乎初始加载的前几秒,可以交由客户端使用类似于骨架屏,或者懒加载之类的提升用户体验。
  • VueVue SSR原生HTML 页面源码区别对比,在网页上右键查看源码:
    Vue SSR原生HTML 是可以看到源码标签的

    Vue 默认是看不到源码标签的,因为它是 JS 组装的。


二、什么是 Nuxt.js ?

  • 目前做 SSR 的方式有几种,大概列举一下:
    1、前端编写 原生静态页面,给到服务器,通过服务器框架进行组合数据,例如 phpWeb 开发
    2、使用 prerender-spa-plugin 插件,作者是 Vue 核心团队的成员,这种实现方式并不叫 SSR,而是 预渲染。不过效果上是一样的,甚至某种程度上来说可能要比 SSR 更好。相比官方提供的 SSR 繁琐配置prerender 配置更简单快捷。
    3、Vue 官方提供的轮子在 Node 端做 SSR, 相对于 prerender 插件来说,SSR上手真的超级复杂,有兴趣可以自行查看 Vue SSR 指南。这种方法可以做到真实数据实时渲染,完全可供 SEO 小蜘蛛尽情的爬来爬去,完全前后端同构,路由配置共享,不再影响服务器 404 请求,但是配置比较麻烦、处理流程比较复杂 (比对预渲染插件,复杂太多)约束较多,对服务器会造成较大的压力,服务器成本太高了。
    4、Nuxt.js 是使用 WebpackNode.js 进行封装的基于 VueSSR 框架,不需要自己搭建一套 SSR 程序,而是通过其约定好的文件结构和 API 就可以实现一个首屏渲染的 Web 应用。
    我这里选择使用 Nuxt.js 来做 SSR

三、通过 Nuxt.js 创建项目

  • Nuxt.js 官方安装流程,项目需要依赖 Node 环境,我这里用的包管理工具是 NPMNuxt.js 版本是 2.14.5
  • 创建项目,确保安装了 npxnpxNPM 版本 5.2.0 默认安装了):
$ npx create-nuxt-app <项目名>
$ npm create nuxt-app <项目名>
$ yarn create nuxt-app <项目名>
  • 或者用 yarn
$ yarn create nuxt-app <项目名>
  • 我这里用 npx 创建一个测试项目,例如:
$ npx create-nuxt-app nuxt-test
// 进入到文件夹,执行创建项目命令
dengzemiaodeMacBook-Pro:test dengzemiao$ npx create-nuxt-app nuxt-test
create-nuxt-app v3.5.2
✨  Generating Nuxt.js project in nuxt-test
// 项目初始配置,自己看着选,用什么选什么 不懂就选 None,后面也可以装的。
? Project name: nuxt-test
? Programming language: JavaScript
? Package manager: Npm
? UI framework: None
? Nuxt.js modules: Axios - Promise based HTTP client
? Linting tools: (Press <space> to select, <a> to toggle all, <i> to invert sele
ction)
? Testing framework: None
? Rendering mode: Universal (SSR / SSG)
? Deployment target: Server (Node.js hosting)
? Development tools: jsconfig.json (Recommended for VS Code if you're not using 
typescript)
? What is your GitHub username? dengzemiao
? Version control system: None
.....等待一段时间,就会提示创建项目成功
🎉  Successfully created project nuxt-test
// 如果是开发中,运行 npm run dev 就可以,开发者模式
To get started:
  cd nuxt-test
  npm run dev
// 如果是需要发布到线上了,需要先 build 在 start 才能正式发布
To build & start for production:
  cd nuxt-test
  npm run build
  npm run start

四、Nuxt.js 本地运行

  • 这篇文章只讲 创建项目发布服务器,以及服务器怎么部署才能通过服务器访问,其他项目细节配置放在其他文章中去写。
  • 创建完成项目之后,可以先运行项目一下,用上面 To get startedTo build & start for production 中的方式运行起来项目,只是前者是 development 模式,后者是 production 模式。
dengzemiaodeMacBook-Pro:test dengzemiao$ cd nuxt-test
dengzemiaodeMacBook-Pro:nuxt-test dengzemiao$ npm run dev
> nuxt-test@1.0.0 dev /Users/dengzemiao/Desktop/Project/web/test/nuxt-test
> nuxt
   ╭───────────────────────────────────────╮
   │                                       │
   │   Nuxt @ v2.14.12                     │
   │                                       │
   │   ▸ Environment: development          │
   │   ▸ Rendering:   server-side          │
   │   ▸ Target:      server               │
   │                                       │
   │   Listening: http://localhost:3000/   │
   │                                       │
   ╰───────────────────────────────────────╯
  • 然后通过上面的 http://localhost:3000/ 打开浏览器进行访问,但是这个是开发环境。
  • pages 里面的 .vue 文件都会被自动转成路由,文件夹也是一样。
  • 例如:项目 pages 文件夹里面有个 index.vue 文件,它会被编译成 index.html,在路由中也就是 /index,可以尝试修改 index.vue 里面的内容,或者新建一个 .vue 文件进行测试内容。
  • 例如:我在 pages 里面创建一个测试文件 dzm.vue,运行起来项目,访问的路径就是 http://localhost:3000/dzm

<template>
  <div>
    dzm 测试页面 {{ env }}
  </div>
</template>
<script>
export default {
  data () {
    return {
      // 当前启动的环境 development: 开发环境 production: 生产环境
      env: process.env.NODE_ENV
    }
  }
}
</script>

五、Nuxt.js 直接 ip 访问项目(生产和开发都适用)

  • 运行开发环境 $ npm run dev
╭───────────────────────────────────────╮
   │                                       │
   │   Nuxt @ v2.14.12                     │
   │                                       │
   │   ▸ Environment: development          │
   │   ▸ Rendering:   server-side          │
   │   ▸ Target:      server               │
   │                                       │
   │   Listening: http://localhost:3000/   │
   │                                       │
   ╰───────────────────────────────────────╯
  • 运行生产环境 $ npm run build + $ npm run start
╭──────────────────────────────────────────╮
   │                                          │
   │   Nuxt @ v2.14.12                        │
   │                                          │
   │   ▸ Environment: production              │
   │   ▸ Rendering:   server-side             │
   │   ▸ Target:      server                  │
   │                                          │
   │   Memory usage: 29.1 MB (RSS: 73.1 MB)   │
   │                                          │
   │   Listening: http://localhost:3000/      │
   │                                          │
   ╰──────────────────────────────────────────╯
  • 通过上面的两个运行的结果,得到的地址都是 http://localhost:3000/,这个是固定本地 localhost:3000 才可以进访问,需要改成支持本地 ip 也能访问,也就是你拿到本机电脑的 ip 加上端口也能进行访问到,例如: http://10.0.93.169:3000

相关文章
|
6天前
|
弹性计算 人工智能 前端开发
在阿里云ECS上部署n8n自动化工作流:U2实例实战
本文介绍如何在阿里云ECS的u2i/u2a实例上部署开源工作流自动化平台n8n,利用Docker快速搭建并配置定时任务,实现如每日抓取MuleRun新AI Agent并推送通知等自动化流程。内容涵盖环境准备、安全组设置、实战案例与优化建议,助力高效构建低维护成本的自动化系统。
120 5
|
12天前
|
弹性计算 人工智能 运维
如何基于阿里云 ECS 一键部署 AskTable?
AskTable + 阿里云 ECS 一键私有部署方案,3 分钟快速搭建专属数据智能平台。无需复杂运维,支持弹性扩展、私网安全访问及AI对话式分析,助力企业高效、安全实现数据智能。
|
13天前
|
Java Linux Apache
在CentOS服务器上编译并部署NiFi源码
部署Apache NiFi在CentOS上是一个涉及细节的过程,需要注意Java环境、源码编译、配置调整等多个方面。遵循上述步骤,可以在CentOS服务器上成功部署和配置Apache NiFi,从而高效地处理和分发数据。
89 17
|
1月前
|
弹性计算 安全 Linux
使用阿里云服务器安装Z-Blog博客网站流程,新手一键部署教程
本教程教你如何在阿里云99元服务器上,通过宝塔Linux面板一键部署Z-Blog博客。基于CentOS 7.9系统,从远程连接、安装宝塔面板、开放端口到部署Z-Blog全流程详解,操作简单,新手也能轻松搭建个人博客网站。
318 13
|
1月前
|
弹性计算 Devops Shell
用阿里云 DevOps Flow 实现 ECS 部署自动化:从准备到落地的完整指南
阿里云 DevOps Flow 是一款助力开发者实现自动化部署的高效工具,支持代码流水线构建、测试与部署至ECS实例,显著提升交付效率与稳定性。本文详解如何通过 Flow 自动部署 Bash 脚本至 ECS,涵盖环境准备、流水线搭建、源码接入、部署流程设计及结果验证,助你快速上手云上自动化运维。
161 0
监控 安全 Linux
71 0
|
4天前
|
弹性计算 运维 安全
区别及选择指南:阿里云轻量应用服务器与ECS云服务器有什么区别?
阿里云轻量应用服务器适合个人开发者、学生搭建博客、测试环境,易用且性价比高;ECS功能更强大,适合企业级应用如大数据、高流量网站。根据需求选择:轻量入门首选,ECS专业之选。
|
4天前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
|
6天前
|
弹性计算
阿里云8核16G云服务器收费标准:最新价格及省钱购买方法整理
阿里云8核16G云服务器价格因实例类型而异。计算型c9i约743元/月,一年6450元(7折);通用算力型u1约673元/月,一年仅需4225元(5.1折)。实际价格享时长折扣,详情见ECS官网。