前言
虽然之前有写过博客项目,但是并没有系统的从零开始到项目部署,所以这次寒假就从零开始写了这个项目用来记录学习和成长。
项目构建
项目的技术栈是vue3+less+极少的element-plus
1.使用vue-cli创建项目
项目基本配置如下
2.项目目录及结构
项目的结构参考了很多vue项目,基本结构都是差不多吧,我这里少了test、mock等
├── public // 静态页面
├── src // 主目录
├── assets // 静态资源
├── components // 全局组件
├── store // vuex 配置
├── less // 基本的less样式
├── utils // 全局方法(axios封装,markdown...)
├── views // 路由组件
├── App.vue // 页面主入口
├── main.ts // 脚本主入口
├── .eslintrc.js // eslint 相关配置
├── .gitignore // git 忽略文件配置
├── babel.config.js // bable 配置
├── package.json // 依赖
├── README.md // 项目 readme
└── vue.config.js // vue-cli/webpack 配置
2.引入element-plus
现在element-plus的按需引入官网已经说的很明白。
- 安装
unplugin-vue-components和unplugin-auto-import这两款插件
npm install -D unplugin-vue-components unplugin-auto-import
- 配置
vue.config.js
const { ElementPlusResolver } = require('unplugin-vue-components/resolvers')
configureWebpack: {
plugins: [
require('unplugin-auto-import/webpack')({
resolvers: [ElementPlusResolver()],
}),
require('unplugin-vue-components/webpack')({
resolvers: [ElementPlusResolver()],
}),
],
},
项目开发
这一步开发就行了,具体的总结见其他文章
项目部署
我在项目部署阶段踩到的坑比前面两个阶段都要多得多,兜兜转转了好几天才成功部署,而且因为身份证丢了无法备案,所以暂时无法通过域名访问。
1.部署流程
- 在阿里云/腾讯云等购买好服务器
- 开发完前端以及后端项目
- 在服务器上安装必要环境(如MongoDB,node,python等)
- 在服务器上安装Nginx及必须插件,并配置Nginx来支持http
- 将代码上传至gitee/github,然后在服务器上拉取代码到服务器(如果仓库是private的需要添加服务器密钥到gitee/github)
- 启动项目以及Nginx
2.部署细节
购买和开发阶段没什么好说的,直接做就ok
1.在服务器上安装与配置
我是使用的xShell与远程服务器进行的连接,这样传输文件等都很方便,也可以使用别的软件。
各个环境的安装参照官网一点点安装就可并不难,其中Nginx的安装和配置稍微有些复杂。
具体可以参照这个进行配置,网上教程很多 别的也可以。下面是我的配置的信息
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
server {
listen 443 ;
location / {
//这里很重要,因为vue/react项目使用histroy模式时会出现刷新空白的情况,
//这里会在路由不匹配时转到首页,详情请看vue-cli官方文档
try_files $uri $uri/ /index.html;
root home/blog;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /api/ {
proxy_pass http://150.158.103.244:3000/;
}
}
}
2.启动项目
这里我后端项目用的node,用的pm2启动防止报错项目之间挂掉
安装:npm install -g pm2
启动:pm2 start ./project
3.支持https
支持http的项目之前弄过不少,但是支持https的项目还没有弄过,谁不想自己的项目的导航栏上有个小绿锁呢。
支持https是最大的坑,虽然现在细想也没什么东西,但是第一次弄真的是不懂
1.购买域名、ssl证书以及备案
这三步在腾讯云/阿里云都可以直接完成,域名需要花点钱,ssl证书可以先用免费的,备案需要准备好身份证。
需要注意的是买了域名之后一定记得绑定ip地址,不要像我一样傻乎乎的连这个都忘了,同时没有备案的国内域名也是不能用的,请注意这点。
2.Nginx配置
关于Nginx各项配置的含义及配置方法,我是参考了这篇文章nginx location配置详细解释 ,并且你在腾讯云/阿里云购买证书以后它会给你提供详细的配置说明。
下面放出我的配置
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name 你的域名;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name 你的域名;
ssl_certificate 你的域名.crt;
ssl_certificate_key 你的域名.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
ssl_prefer_server_ciphers on;
location / {
try_files $uri $uri/ /index.html;
root home/blog;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /api/ {
proxy_pass http://150.158.103.244:3000/;
}
//gzip
gzip on;
gzip_buffers 32 4k;
gzip_comp_level 6;
gzip_min_length 200;
gzip_types text/css text/xml application/javascript;
gzip_vary on;
}
}
3.前后端项目支持https
这一步主要是把开发时所有的http请求全部换成https请求,包括图片、axios等请求,如果不做这一步网站会提示你页面不安全
当然你也可以像我上面配置中的那样,使用来代理转发https
location /api/ {
proxy_pass http://150.158.103.244:3000/;
}
项目优化
之前写项目的时候写的都很随意,也不是很在意优化、访问速度之类的。但是这次开发完成把项目部署完毕之后,访问速度到达了惊人的15s!!!这还访问啥啊,于是进行了一系列优化,目前项目的访问速度已经小于1s,虽然还是不算快但是总归是能用了。
我的优化方法基本来自这篇文章Vue 项目性能优化 — 实践指南(网上最全 / 详细),除此之外还有一些小技巧。
1.查看打包后各项占比
安装
npm install webpack-bundle-analyzer –save-dev
vue.config.js配置
chainWebpack: config => {
// 查看打包文件体积大小
config
.plugin('webpack-bundle-analyzer')
.use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
},
2.Nginx启动gzip
开启gzip和部分包按需引入是我在优化过程中提升最大的操作
nginx.conf配置
gzip on;
gzip_buffers 32 4k;
gzip_comp_level 6;
gzip_min_length 200;
gzip_types text/css text/xml application/javascript;
gzip_vary on;
结语
关于个人博客的从创建到部署优化就结束了,开发过程中的问题以后单独总结。