首页 > 系统相关 >Docker+Nginx打包部署前后端分离项目

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

时间:2023-02-13 15:37:36浏览次数:39  
标签:index guigu jar Nginx proxy Docker docker 打包


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文件

添加如下配置:

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

2.1.2 router配置中添加base属性

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

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

2.1.3 打包前端项目

执行命令:​​npm run build:prod​

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

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

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

Docker+Nginx打包部署前后端分离项目_微服务_05

2.2 后端项目打包

这里我跳过了test步骤

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

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

Docker+Nginx打包部署前后端分离项目_微服务_07

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

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

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

将dist.tgz文件解压即可

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

3 nginx反向代理配置

部分配置如下:

Docker+Nginx打包部署前后端分离项目_微服务_09

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​​,会出现如下页面说明前端部署成功

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

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放在同一个目录下面

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

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

docker build -t guigu_docker:1.0 .

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

4.4 查看构建的镜像

docker images

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

4.5 运行容器

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

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

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

4.6 运行测试

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

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

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

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

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

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


标签:index,guigu,jar,Nginx,proxy,Docker,docker,打包
From: https://blog.51cto.com/u_15961549/6054225

相关文章

  • docker安装mysql:5.7(利用数据卷挂载方式启动)
    docker安装mysql:5.7​​1、DockerHub上面查找mysql镜像​​​​2、拉取镜像​​​​3、新建mysql容器实例​​​​4、新建my.cnf文件​​​​5、重新启动mysql容器实例再......
  • Docker容器数据卷
    Docker容器数据卷​​1、--privileged=true配置说明​​​​2、容器数据卷是什么?​​​​3、数据卷案例​​​​3.1宿主vs容器之间映射添加容器卷​​​​3.2读写规则映射......
  • Docker本地镜像发布到阿里云
    Docker本地镜像发布到阿里云​​1、将本地镜像推送到阿里云​​​​1.1、本地镜像素材原型​​​​1.2创建仓库镜像​​​​1.3选择个人实例​​​​1.4选择命名空间,没有......
  • Docker本地镜像发布到私有库
    本地镜像发布到私有库​​1、私有库是什么?​​​​2、将本地镜像推送到私有库实践​​​​2.1下载镜像DockerRegistry​​​​2.2运行私有库​​​​2.3制作一个新镜像......
  • Docker镜像是什么?
    Docker镜像​​1、Docker镜像是什么?​​​​1.1分层的镜像​​​​1.2UnionFS(联合文件系统)​​​​1.3Docker镜像加载原理​​​​1.4为什么Docker才200M?​​​​1.5......
  • Docker容器的ubuntu镜像配置apt国内源
    1、问题描述  在Docker容器中安装ubuntu镜像之后,默认使用的软件源是ubuntu的官网,速度非常慢,更新软件包经常报错  而且初始镜像默认没有安装vim命令,导致修改​​/etc/ap......
  • Docker常用命令
    Docker常用命令​​1、帮助启动类命令​​​​启动docker​​​​停止docker​​​​重启docker​​​​查看docker状态​​​​开机启动​​​​查看docker概要信息​​​......
  • 为什么要使用Docker?
    为什么使用Docker​​1、Docker为什么会出现​​​​2、Docker的理念​​​​3、容器与虚拟机的比较​​​​4、Docker能做什么?​​​​4.1一次构建、随处运行​​​​4.2......
  • Nginx基础篇
    目录一、nginx基础篇1.Nginx开源版本安装2.Nginx的基础配置3.虚拟主机与域名解析4.ServerName匹配规则5.反向代理6.动静分离7.location后符号的匹配规则8.URLRewrite9.负载......
  • Nginx高级篇
    目录二、nginx高级篇(第一部分)1.扩容1.单机垂直扩容:硬件资源增加2.水平扩展:集群化3.细粒度拆分:分布式4.数据异构化5.服务异步化2.KeepAlive3.AB压力测试keepalive效果1.AB......