Docker+Nginx打包部署前后端分离项目
创始人
2024-05-04 16:48:07
0

Docker+Nginx打包部署前后端分离项目

  • 1、问题描述
  • 2、项目打包
    • 2.1 前端项目打包
      • 2.1.1 修改vue.config.js文件
      • 2.1.2 router配置中添加base属性
      • 2.1.3 打包前端项目
    • 2.2 后端项目打包
    • 2.3 将前端和后端的打包文件上传到服务器
  • 3 nginx反向代理配置
  • 4、后端通过Dockerfile打包成docker镜像
    • 4.1 这里为什么使用docker?
    • 4.2 编写Dockerfile
    • 4.3 构建Docker镜像
    • 4.4 查看构建的镜像
    • 4.5 运行容器
    • 4.6 运行测试

1、问题描述

  最近做了一个前后端分离的通用权限管理系统,今天想用自己的服务器部署下,本地部署测试是没问题的,但是部署在服务器上还是出现了许多小插曲,这里大概记录一下吧。

2、项目打包

2.1 前端项目打包

  由于我需要在同一个端口号下使用nginx部署多个前端项目,所以需要额外设置一些东西。

2.1.1 修改vue.config.js文件

  添加如下配置:

image-20221230164452873

2.1.2 router配置中添加base属性

const createRouter = () => new Router({// mode: 'history', // require service supportscrollBehavior: () => ({ y: 0 }),routes: constantRoutes,base:'/guigu'
})

image-20221230164614590

2.1.3 打包前端项目

  执行命令:npm run build:prod

image-20221230164743322

image-20221230164732551

  出现dist文件夹说明打包成功

image-20221230164808807

2.2 后端项目打包

这里我跳过了test步骤

image-20221230164838903

  打包之后target文件夹下面会有jar包

image-20221230164906192

2.3 将前端和后端的打包文件上传到服务器

  这里上传的方法较多,不过多赘述了。

image-20221230165043432

  将dist.tgz文件解压即可

tar -zxvf dist.tgz -C  写你的解压路径即可

3 nginx反向代理配置

  部分配置如下:

image-20221230165222245

    server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {proxy_pass http://blog;proxy_set_header HOST $host;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}location ^~/prod-api/ {proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-NginX-Proxy true;proxy_pass http://127.0.0.1:8800/;}# guigu-auth配置location /guigu {alias /opt/guigu-auth/guigu-front/;index index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}

  上面nginx.conf的配置分为两个部分,第一个部分实现前端vue的映射,即将/opt/guigu-auth/guigu-front/index.html映射成127.0.0.1:8080/guigu

location /guigu {alias /opt/guigu-auth/guigu-front/;index index.html index.htm;
}

  第二部分是将后端请求指向后端项目。这里直接替换了uri的前缀prod-api,也就是说假设前端向后端发送的请求为http://localhost:8800/prod-api/admin/system/index,经过nginx反向代理后,实际上到达后端的uri为http://localhost:8800/admin/system/index

  至此,前端项目部署完毕

  访问codeleader.top/guigu,会出现如下页面说明前端部署成功

image-20221230170335533

4、后端通过Dockerfile打包成docker镜像

4.1 这里为什么使用docker?

  我开始不想用这个,是直接将jar包在服务器上部署的,觉得小项目没必要用docker。但是由于我以前搭建个人博客的时候装的jdk11,这个项目使用jdk8开发的,环境不一致,docker的环境隔离机制非常适合现在这种情况,关于docker使用场景请看我docker专栏,这里不再赘述。

4.2 编写Dockerfile

# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER xtt
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为guigu_docker.jar
ADD service-system.jar guigu_docker.jar
# 运行jar包
RUN bash -c 'touch /guigu_docker.jar'
ENTRYPOINT ["java","-jar","/guigu_docker.jar"]
#暴露8800端口作为微服务
EXPOSE 8800

4.3 构建Docker镜像

  将打包的后端项目jar包和Dockerfile放在同一个目录下面

image-20221230170847494

  执行命令如下命令构建镜像:

docker build -t guigu_docker:1.0 .

image-20221230170948838

4.4 查看构建的镜像

docker images

image-20221230171022201

4.5 运行容器

docker run -d -p 8800:8800 --name guigu-auth guigu_docker:1.0

image-20221230171057150

image-20221230171116141

4.6 运行测试

  点击登录按钮,成功进入系统,说明前后端部署成功。

image-20221230171226854

image-20221230171736165

image-20221230171711121

   现在这种部署方式跟部署单个微服务的方法一样,但是生产中不可能只有一个微服务,所以需要借助容器编排来实现一次打包一堆微服务,包括docker-compose、docker swam、k8s、DevOps等这还需要大量的开发实践才行,这些技术光学没用,要在自己的项目中实践才行。其实这里nginx和前端也可以用容器部署的,但这里暂时感觉没必要。

  开发+部署多有意思啊,现在整天搞自己不感兴趣的方向已经和当初自己想象的研究生科研生涯完全不同了,这种感觉或许只有自己读研之后才能感同身受了,虽有诸多无奈,但我绝不会放弃我所热爱的技术,架构师之路任重而道远。

相关内容

热门资讯

安卓系统自带的网页,功能与特色... 你有没有发现,每次打开安卓手机,那熟悉的系统界面里总有一个默默无闻的小家伙——安卓系统自带的网页浏览...
美咖云系统安卓版,开启智能生活... 你有没有发现,最近手机上多了一个叫“美咖云系统安卓版”的小家伙?它就像一个魔法师,轻轻一点,就能让你...
安卓系统推荐最好的手机,盘点性... 你有没有想过,拥有一部性能卓越的手机,就像是拥有了移动的宝藏库?在这个信息爆炸的时代,一部好手机不仅...
安卓11系统能精简吗,释放潜能 你有没有发现,随着手机越来越智能,系统也越来越庞大?安卓11系统,这个最新的操作系统,是不是也让你觉...
安卓自动重启系统软件,揭秘原因... 手机突然自动重启,是不是感觉整个人都不好了?别急,今天就来和你聊聊这个让人头疼的安卓自动重启系统软件...
苹果手机x刷安卓系统,探索安卓... 你有没有想过,你的苹果手机X竟然也能刷上安卓系统?是的,你没听错,就是那个一直以来都和我们苹果手机X...
安卓系统智商低吗,智商低下的真... 你有没有想过,为什么安卓系统的智商总被调侃得好像有点低呢?是不是觉得它总是慢吞吞的,有时候还犯点小错...
安卓系统手机联系人,揭秘你的社... 你有没有发现,手机里的联系人列表就像是一个小小的社交圈呢?里面藏着我们的亲朋好友、工作伙伴,甚至还有...
安卓系统免费铃声下载,打造个性... 手机里那首老掉牙的铃声是不是让你觉得有点out了呢?别急,今天就来给你支个招,让你轻松给安卓手机换上...
安卓系统用哪个桌面好,打造个性... 你有没有发现,手机桌面可是我们每天都要面对的“脸面”呢?换一个好看的桌面,心情都能跟着好起来。那么,...
虚拟大师是安卓10系统,功能与... 你知道吗?最近在手机圈里,有个新玩意儿引起了不小的轰动,那就是虚拟大师!而且,更让人惊喜的是,这个虚...
安卓系统与苹果优缺点,系统优缺... 说到手机操作系统,安卓和苹果绝对是两大巨头,它们各有各的特色,就像两道不同的美味佳肴,让人难以抉择。...
安卓win双系统主板,融合与创... 你有没有想过,一台电脑如果既能流畅运行安卓系统,又能轻松驾驭Windows系统,那该有多爽啊?没错,...
安卓系统可精简软件,轻松提升手... 你有没有发现,手机里的安卓系统越来越庞大,软件也越装越多,有时候感觉手机就像个“大肚子”,不仅运行速...
安卓系统基于linux的代码,... 你有没有想过,那个陪伴你每天刷抖音、玩游戏、办公的安卓系统,其实背后有着一套复杂的基于Linux的代...
苹果和安卓的拍照系统,谁更胜一... 你有没有发现,现在手机拍照已经成为我们生活中不可或缺的一部分呢?无论是记录生活的点滴,还是捕捉美丽的...
苹果和安卓系统不同吗,系统差异... 你有没有想过,为什么你的手机里装的是苹果的iOS系统,而朋友的手机却是安卓系统呢?这两种系统,看似都...
安卓系统有多少级,揭秘其多级架... 你有没有想过,那个陪伴我们日常生活的安卓系统,它其实有着丰富的层级结构呢?没错,就是那个让我们的手机...
华为鸿蒙系统与安卓的,技术融合... 你知道吗?最近科技圈可是炸开了锅,华为鸿蒙系统与安卓的较量成为了大家热议的话题。这不,今天我就来给你...
什么安卓手机是苹果系统,搭载苹... 你有没有想过,为什么有些人宁愿花大价钱买苹果手机,而有些人却对安卓手机情有独钟呢?其实,这个问题背后...