Docker+Nginx打包部署前后端分离步骤实现

目录
  • 问题描述
  • 项目打包
    • 前端项目打包
      • 修改vue.config.js文件
      • router配置中添加base属性
      • 打包前端项目
    • 后端项目打包
    • 将前端和后端的打包文件上传到服务器
  • nginx反向代理配置
  • 后端通过Dockerfile打包成docker镜像
    • 这里为什么使用docker?
    • 构建Docker镜像
    • 查看构建的镜像
    • 运行容器
    • 运行测试

问题描述

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

项目打包

前端项目打包

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

修改vue.config.js文件

添加如下配置:

router配置中添加base属性

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

打包前端项目

执行命令:

npm run build:prod

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

后端项目打包

这里我跳过了test步骤

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

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

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

将dist.tgz文件解压即可

tar -zxvf dist.tgz -C

写你的解压路径即可

nginx反向代理配置

部分配置如下:

  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

会出现如下页面说明前端部署成功

后端通过Dockerfile打包成docker镜像

这里为什么使用docker?

我开始不想用这个,是直接将jar包在服务器上部署的,觉得小项目没必要用docker。

但是由于我以前搭建个人博客的时候装的jdk11,这个项目使用jdk8开发的,环境不一致,docker的环境隔离机制非常适合现在这种情况,关于docker使用场景请看我docker专栏,这里不再赘述。

编写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

构建Docker镜像

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

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

docker build -t guigu_docker:1.0 .

查看构建的镜像

docker images

运行容器

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

运行测试

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

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

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

以上就是Docker+Nginx打包部署前后端分离步骤实现的详细内容,更多关于Docker+Nginx部署前后端分离的资料请关注我们其它相关文章!

(0)

相关推荐

  • docker-compose+nginx部署前后端分离的项目实践

    目录 安装docker 安装必要的系统工具 软件源信息切换 安装 配置镜像加速器 安装docker-compose 安装 权限修改 解决js.css文件404的情况 Vue项目配置 安装docker 安装必要的系统工具 # 更新yum工具 yum update -y # 安装必要的工具 yum install -y yum-utils device-mapper-persistent-data lvm2 软件源信息切换 yum-config-manager --add-repo http://m

  • Docker部署前后端分离项目的实现示例

    目录 一.环境准备 二.运行镜像 解决问题 Redis安装 Nginx安装 三.打包项目 四.部署 一.环境准备 服务器 阿里云服务器 1核+2GB即可 软件 本次部署采用的是 docker,因此软件环境都在 docker 上 我们需要 MySQL 8.0.x版本,Redis,Nginx,提前下好镜像即可 二.运行镜像 MySQL安装 MySQL我用的是8.0.x的版本,在部署过程中出现了一些问题,在这里跟大家分享一下 docker run \ -p 3306:3306 \ --name mys

  • 利用docker-compsoe部署前后端分离的项目方法

    说在前面 我们都知道,docker可以实现很简便的部署环境.现在我们有一个前后端分离的项目,前端基于Vue开发.利用Webpakc打包为dist文件夹.后端则是一个Node.js服务,提供API接口,前端和后端是分离的.所以我们肯定是前端项目一个container,后台项目也是一个container.那么如果是在生产环境,就会产生跨域问题.前端的请求要反向代理到后台.大家肯定首先想到的就是使用 Nginx 设置 proxy_pass .是的没有错.那么我们有了这些想法.我们如何通过 docker

  • Docker+Nginx打包部署前后端分离步骤实现

    目录 问题描述 项目打包 前端项目打包 修改vue.config.js文件 router配置中添加base属性 打包前端项目 后端项目打包 将前端和后端的打包文件上传到服务器 nginx反向代理配置 后端通过Dockerfile打包成docker镜像 这里为什么使用docker? 构建Docker镜像 查看构建的镜像 运行容器 运行测试 问题描述 最近做了一个前后端分离的通用权限管理系统,今天想用自己的服务器部署下,本地部署测试是没问题的,但是部署在服务器上还是出现了许多小插曲,这里大概记录一下

  • 部署vue+Springboot前后端分离项目的步骤实现

    单页应用 vue经常被用来开发单页应用(SinglePage Web Application,SPA),什么叫做单页应用呢,也就是只有一张web页面的应用,单页应用的跳转只需要刷新局部资源,大大加快的了我们页面的响应速度 前端页面打包 打开vue工程,在项目根目录下创建一个配置文件:vue.config.js,然后在里面写入以下内容: module.exports = { assetsDir: 'static', // 静态资源保存路径 outputDir: 'dist', // 打包后生成的文

  • 基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践

    淘宝网线上应用的传统软件栈结构为 Nginx + Velocity + Java,即: 在这个体系中,Nginx 将请求转发给 Java 应用,后者处理完事务,再将数据用 Velocity 模板渲染成最终的页面. 引入 Node.js 之后,我们势必要面临以下几个问题: 技术栈的拓扑结构该如何设计,部署方式该如何选择,才算是科学合理?项目完成后,该如何切分流量,对运维来说才算是方便快捷?遇到线上的问题,如何最快地解除险情,避免更大的损失?如何确保应用的健康情况,在负载均衡调度的层面加以管理?承系

  • 部署前后端分离式nginx配置的完整步骤

    前言 老生常谈了,这里谈谈我的理解的前后端分离,简单的分离无非是将原来mvc的view层剥离出来,独立一个成为Servlet服务,Servlet之间依靠http连通.这里的view Servlet容器可以是任意一种服务端服务,Tomcat.Apache.Nginx.IIS,都可以.这里以常用的Nginx为例子做简单的介绍. 需求分析 先来一波需求分析. 单项目 单项目指的是一台服务器部署一个前端服务,使www.xxx.com => index.html的单一指向. 多项目 多项目指的是一台服务器

  • Nginx代理同域名前后端分离项目的完整步骤

    前后端分离项目,前后端共用一个域名.通过域名后的 url 前缀来区别前后端项目. 以 vue + php 项目为例.直接上 server 模块的 nginx 配置. server { listen 80; #listen [::]:80 default_server ipv6only=on; server_name demo.com; # 配置项目域名 index index.html index.htm index.php; # 1.转给前端处理 location / { # 前端打包后的静态

  • flask和vue前后端分离项目部署的示例代码

    前段时间开发了一个项目, 我后端用的是flask框架写接口,前端用的是vue框架,项目前后端完全分离,部署的时候遇到一点问题,记录一下. 部署环境:centos6.5.Python3.6.3 .flask0.12.0 vue 部署方式:uwsgi+nginx 步骤: ​ 1.首先安装python运行环境,正常 ​ 2.安装uswsgi运行,正常(使用pip安装,pip install uwsgi): 新建config.ini文件 [uwsgi] # uwsgi 启动时所使用的地址与端口,ngin

  • Nginx实现前后端分离

    #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream;

随机推荐