云服务器使用Docker+nginx部署Vue项目 (跨域处理、反向代理)

引言

此篇文章书接上文:

(170条消息) idea集成Docker + Docker部署SpringBoot项目到云服务器 保姆级教程_dragon_sxl的博客-CSDN博客

这篇文章讲述:

如何在linux操作系统下使用Docker容器,再使用nginx这个代理服务器来运行我们的Vue项目,其中最重要的两个问题

  • 1、挂载容器中nginx的配置文件到主机
  • 2、nginx反向代理的配置

这两个是本篇讲解最最最最重要的问题!!!!!!尤其第二个!!!!

整体思路梳理

要想我们的Vue项目跑起来,就需要用到nginx这个代理服务器(nginx的作用:负责运行我们的Vue项目)。

整体思路如下

  • 1、拉取nginx镜像。

  • 2、打包Vue项目

  • 3、使用Docker run一个nginx容器(将其目录资源挂载到主机!!)

  • 3、使用打包好的Vue项目资源替换nginx资源

    nginx的运行资源目录是有一定要求的,因此要想跑起来的是自己的Vue项目,就需要将nginx下的原始资源换成我们的Vue项目资源,再用docker里的容器将这个换好的nginx跑起来。
    
  • 4、处理跨域问题(nginx反向代理配置)

  • 5、重新载入nginx服务

大功告成!


具体步骤:

1、拉取nginx镜像

docker pull nginx  // 拉取
docker images      // 查看镜像

2、打包Vue项目

执行:

npm run build

就会生成一个dist文件夹,这就是我们打包好的Vue项目资源:

image-20230514214517015

3、run一个nginx容器(挂载处理)

首先说明一下何为挂载

  • 就是将容器里的文件映射到主机,便于修改和查看。

    因为容器里边的东西不好查看与更改,那么就将其挂载到我们能看得到、改得到的地方,并且修改主机的文件,就相当于修改容器内对应的文件。

    因此容器里的文件资源和主机的挂载资源是一一映射的关系

    我们要运行Vue项目,如果不做挂载处理,若是项目稍有改动,就需要重新run一个新容器,很麻烦。而有了挂载,我们只需要将修改了的内容放到对应的资源目录下,再restart一下,就好啦!


具体步骤:

  • 1、运行一个nginx镜像(工具镜像)

    docker run -d --name nginx01 -p 80:80  nginx:latest
    
  • 2、主机任意位置创建一个空文件夹nginx

  • 3、将nginx配置文件copy到主机:

    docker cp nginx01:/etc/nginx/nginx.conf /home/nginx/
    docker cp nginx01:/etc/nginx/conf.d /home/nginx/conf/
    docker cp nginx01:/usr/share/nginx/html /home/nginx/html
    docker cp nginx01:/var/log/nginx/ /home/nginx/logs/
    // 这里的nginx01是容器名称 
    // 第一个路径:容器内的路径
    // 第二个路径:主机路径(对应第二步创建的nginx文件夹)
    

    并且确保执行后目录是以下结构(如果不是,手动改成这样)

image-20230514225439367

有时候会多一层文件夹,手动调整即可。

并且保证在conf文件夹下有一个default.conf文件:

image-20230514221512275

  • 4、删除工具容器

    docker rm -f nginx01
    
  • 5、重新run一个容器(并且映射对应的目录文件)

    前四步操作都是为了这一步做准备!!

    docker run -d  --name nginx -p 80:80 -p 443:443 -v /home/nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/logs:/var/log/nginx -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/conf:/etc/nginx/conf.d --privileged=true     -e TZ=Asia/Shanghai nginx:latest
    

    注意这里对应的目录是与第三步的目录完全一致的,目录不同的改成你自己的即可。


4、将打包好的Vue资源部署到nginx目录

就是将dist文件夹中的内容全部Copy到第三步中挂载的html文件夹下,如:

image-20230514222235101

5、跨域处理(反向代理)

这一步配置我建议大家去大致了解一下nginx和nginx的配置说明,并且着重理解一下反向代理(170条消息) Nginx配置使用详解_nginx 配置详解_shstart7的博客-CSDN博客

配置参考:

  • 项目说明

    在我的项目中为了处理跨域问题,前端所有向后端服务器的请求都加了api前缀,例如:

    http://10.10.10.12:8899/api/login
    

    而向后端发送的真实请求为:

    http://10.10.10.12:8899/login
    

    因此在nginx的default.conf中添加以下配置:

    location /api{
          
          
             proxy_pass   http://10.10.10.12:8899/;
        }
    // 意思是:
    //    当遇到请求 http://10.10.10.12:8899/api/login
    //    就会将之转发到 http://10.10.10.12:8899/login
    

    从而和后端服务器正常交互。


6、重新载入nginx服务

进入nginx容器:

docker exec -it nginx bash

重启nginx服务:

nginx -s reload

大功告成!!!!

猜你喜欢

转载自blog.csdn.net/longzaizai_/article/details/130675135