从零搭建项目(11) --- 部署: 使用nginx部署前端项目

我的博客地址

正式地址
测试地址
前端源码
后端源码

文章目录

  1. 项目及其技术栈介绍
  2. 前端: 项目初始化
  3. 前端: 使用Sass和Antd
  4. 前端: 开发体验优化
  5. 前端: 搭建路由和状态管理
  6. 前端: 支持Axios
  7. 前端: 打包与环境变量设置
  8. 前端: 团队代码规范
  9. 后端: 项目初始化和使用Koa相关
  10. 后端: 使用TypeORM和MySQL
  11. 部署: 使用nginx部署前端项目
  12. 部署: 后端部署
  13. 部署: 使用jenkins自动化部署

前言

在前面的十篇文章中,我们已经可以在本地进行跑起前端和后端项目,一般来说前端项目在完成后,都会进行打包工作,之后部署在服务器上的就是打包出来的静态文件,所以在这篇文章中,将会介绍前端项目如何部署上服务器,内容如下:

  1. 将前端项目放上服务器中
  2. 安装并使用Nginx
  3. 使用免费https证书
  4. 使用nginx压缩文件

注意:

  1. 该文章的实行步骤建立在之前前端搭建文章的基础上
  2. 想要实践该文章之前,首先需要购买服务器(最好使用重装系统后的服务器)以及域名(最好已经备案完毕),另外,我本人使用的服务器是Ubuntu系统。

将前端项目放上服务器中

  • 在服务器中安装必须的依赖
    首先我们需要先在服务器中安装需要的依赖,包含git、node。
    安装之前我们首先更新一下服务器包索引:
    sudo apt update
    image.png

    更新完毕后安装git:
    sudo apt install git
    当输入如下命令后即表示安装完毕:
    image.png

    然后安装node:
    我暂时使用10+版本的node,输入如下命令:
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs

image.png

等运行和下载完毕后输入node -vnpm -v检测是否完成安装:
image.png

  • 在服务器中编译出静态文件
    安装完上述依赖后,我们使用git将前端项目clone下来,然后进入其中安装项目依赖:
    image.png

    之后使用npm run build编译出静态文件:
    image.png

    做完这些步骤后,我们可以先暂停一下了,先进行Nginx的配置。

安装并使用Nginx

  • 安装Nginx
    在Ubuntu中安装Nginx非常简单,使用sudo apt install nginx即可安装。
    nginx默认使用80端口,在安装完毕后,我们去到浏览器中输入服务器的ip地址看到以下界面即表示安装成功:

    image.png

  • 配置nginx
    这一步是重点。
    在我的服务器中,nginx的主配置目录位于/etc/nginx/中:

    image.png

    我们进到nginx.conf中查看一下,会看到有这么一行配置:
    image.png

    这行配置的意思是位于/etc/nginx/conf.d里面的以.conf结尾的文件都可以作为nginx的子配置生效,那么我们就不必要在主配置中进行修改了。
    去到/etc/nginx/conf.d新建一个test.conf文件,并使用如下配置:
    image.png

    之后退出到命令行使用sudo nginx -s reload重启nginx:
    image.png

    现在我们在浏览器中输入ip地址就能直接进入到网页中了:
    image.png

  • 绑定域名

  1. 这一步开始前提是已经拥有域名最好已经备案(大概需要花费一星期到半个月时间)过的。
    然后去到服务器的管理后台中(我的是腾讯云,其他的厂商操作大同小异),点开云解析页面,点击添加解析并填入你的域名:

    image.png

    解析状态为正常解析后,点击域名进入记录添加界面:
    image.png

    解析界面中,@www一般来说是第一次添加域名记录时候产生的,是针对于主域名的记录。我们不用这个记录,另外再添加一个二级域名的记录(oxc.com为主域名的话,test.oxc.com就是二级域名)。
    image.png

    image.png

  2. 域名添加记录后,我们回到服务器中,编辑刚才的nginx配置,将server_name一项改成刚才添加的二级域名,然后sudo nginx -s reload重启服务器:

    image.png

    现在回到浏览器中,输入刚才的二级域名:
    image.png

    这样我们的前端项目基本上就部署成功了。

使用免费https证书

注意:阿里云443端口需要在安全组规则中添加 443/tcp 端口,否则无法使用443端口。
本节将会介绍如何使用Let’ s Encrypt提供的免费https证书。

  • 安装acme.sh
    acme.sh是一个可以自动生成证书、更新证书的shell脚本,因为免费Let’ s Encrypt证书时效性较短(三个月过期?),所以这款脚本工具非常实用。
    首先我们安装它,可以使用下面的命令进行安装:
    wget -O - https://get.acme.sh | sh
    安装完毕后在命令行输入acme.sh,如果有下面的命令提示就表示安装成功:

    image.png

  • 申请和下载证书
    首先我们使用下面的命令申请和下载证书,这里需要注意,test.oxcblog.club换成你自己的域名,/home/ubuntu/test/dist换成你自己的项目静态文件所在路径。

acme.sh --issue -d test.oxcblog.club -w /home/ubuntu/test/dist

另外需要注意,申请的二级域名的https主域名用不了,反之一样,两者不互通。
之后他会生成下面这一串密文:


image.png

出现类似下面的日志即可:


image.png
  • 安装证书
    接下来我们把证书安装到服务器上,使用如下命令,注意这个命令和上面那节一样把test.oxcblog.club改成你的域名,然后/home/ubuntu/test-ssl是用来存放证书的路径,需要保证这个目录是存在的,没有的话自己创建一个:
acme.sh --installcert -d test.oxcblog.club \
               --keypath       /home/ubuntu/test-ssl/test.oxcblog.club.key  \
               --fullchainpath /home/ubuntu/test-ssl/test.oxcblog.club.key.pem \
               --reloadcmd     "sudo nginx -s reload"

执行上面的命令结束后,如果出现下图的提示则表示成功:


image.png

接着还需要生成一个不知道干嘛的文件,一样记得修改域名和路径:

openssl dhparam -out /home/ubuntu/test-ssl/test.oxcblog.club.dhparam.pem 2048

执行这个命令后需要等待一段时间,等待期间会出现如下符号都是正常的,运行完毕后他会自动退出去:


image.png
  • 在nginx中配置证书
    以上步骤都完成后,我们回到之前的配置文件test.conf中,改成下面的代码:

    之后sudo nginx -s reload
    重启nginx完毕后,去浏览器看看结果:
    image.png

    可知我们的https配置已经成功了。

使用nginx压缩文件

在上面的步骤中,我们的网站已经部署完成,但是存在一些问题,因为在前端部分使用webpack分包分的不够彻底,所以会导致有一个包很大的情况出现,然后首次加载的速度特别慢,下面这个570多k的文件加载花费了7s多:


image.png

这时候我们可以利用nginx对文件进行压缩,使得其变小以加快网页加载速度吗,当然也可以使用CompressionWebpackPlugin在本地压缩完毕后再上传上去,但在这里为了方便,还是使用nginx压缩的方式。

nginx压缩的选项有如下几个,有了下面这个配置表,配置起来就非常简单了:


image.png

去到test.conf中添加下面的配置:

image.png

之后重启nginx生效,并查看效果(记得勾上不用缓存):
image.png

可以发现之前570多k大小的文件缩减到了170多k,加载时间也从7s变成了1.8s,非常的有效果。
当然,你还想更快的话可以继续在webpack里分包,要不就直接把网站部署上cdn。

后记

通过这篇文章,前端项目基本就已部署成功,下一篇文章将会介绍后端的部署。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容