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

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

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 support
  scrollBehavior: () => ({ y: 0 }),
  routes: constantRoutes,
  base:'/guigu'
})
AI 代码解读

image-20221230164614590

2.1.3 打包前端项目

  执行命令:npm run build:prod

image-20221230164743322

image-20221230164732551

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

image-20221230164808807

2.2 后端项目打包

image-20221230164838903

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

image-20221230164906192

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

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

image-20221230165043432

  将dist.tgz文件解压即可

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;
        }
    }
AI 代码解读

  上面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;
}
AI 代码解读

  第二部分是将后端请求指向后端项目。这里直接替换了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包添加到容器中并更名为xtt_docker.jar
ADD service-system.jar guigu_docker.jar
# 运行jar包
RUN bash -c 'touch /guigu_docker.jar'
ENTRYPOINT ["java","-jar","/guigu_docker.jar"]
#暴露6001端口作为微服务
EXPOSE 6001
AI 代码解读

4.3 构建Docker镜像

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

image-20221230170847494

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

docker build -t guigu_docker:1.0 .
AI 代码解读

image-20221230170948838

4.4 查看构建的镜像

docker images
AI 代码解读

image-20221230171022201

4.5 运行容器

docker run -d -p 8800:8800 --name guigu-auth guigu_docker:1.0
AI 代码解读

image-20221230171057150

image-20221230171116141

4.6 运行测试

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

image-20221230171226854

image-20221230171736165

image-20221230171711121

   现在这种部署方式跟部署单个微服务的方法一样,但是生产中不可能只有一个微服务,所以需要借助容器编排来实现一次打包一堆微服务,这还需要大量的开发实践才行。
相关文章
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
259 91
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
|
5天前
|
在Docker上部署Ollama+AnythingLLM完成本地LLM Agent部署
通过以上步骤,您可以成功在Docker上部署Ollama和AnythingLLM,实现本地LLM Agent的功能。在部署过程中,确保环境和配置正确,以避免不必要的问题。希望本文能够帮助您顺利完成部署,并在本地环境中高效地使用LLM模型。
176 8
Stirling-PDF:51.4K Star!用Docker部署私有PDF工作站,支持50多种PDF操作,从此告别在线工具
Stirling-PDF 是一款基于 Docker 的本地化 PDF 编辑工具,支持 50 多种 PDF 操作,包括合并、拆分、转换、压缩等,同时提供多语言支持和企业级功能,满足个人和企业用户的多样化需求。
103 6
Stirling-PDF:51.4K Star!用Docker部署私有PDF工作站,支持50多种PDF操作,从此告别在线工具
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
58 19
Linux服务器部署docker windows
在当今软件开发中,Docker成为流行的虚拟化技术,支持在Linux服务器上运行Windows容器。流程包括:1) 安装Docker;2) 配置支持Windows容器;3) 获取Windows镜像;4) 运行Windows容器;5) 验证容器状态。通过这些步骤,你可以在Linux环境中顺利部署和管理Windows应用,提高开发和运维效率。
77 1
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。
|
10月前
|
利用Docker部署一个简单的springboot项目
利用Docker部署一个简单的springboot项目
245 2
docker 部署springboot项目,连接mysql容器
docker 部署springboot项目,连接mysql容器
404 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等