• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    利用docker-compsoe部署前后端分离的项目方法

    说在前面

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

    开始动手

    其实我也是才开始了解docker的。所以有很多不明白的地方,例如在docker里面,是通过image生成一个container,那么这个container,就可以当作是一个独立的系统,这个系统也就有自己独立的端口。那么就像我们刚刚那样的需求,假设我们的前端在 container1 里面暴露80端口,同时映射到宿主机的80端口,后端在 container2 里面暴露3000端口,同时映射到宿主机的3000端口。那我们反向代理请求的时候,是通过宿主机来反向代理呢,还是通过container来实现呢?我在网上查阅并学习了很多其他大佬的文章,还有官网的文档。发现直接通过container就可以实现这种需求。为什么呢?因为docker-compose,会将所有的container构建在同一网络下,我们要找其他container,我们只需通过docker-compose里面的 service name 即可找到。 下面先来看看我们的目录:

    vueMusic
     ├─ .git
     ├─ .gitignore
     ├─ LICENSE
     ├─ README.md
     ├─ babel.config.js
     ├─ dist
     ├─ docker-compose.yml
     ├─ docs
     ├─ nginx.conf
     ├─ package-lock.json
     ├─ package.json
     ├─ public
     ├─ server
     ├─ src
     └─ vue.config.js
    
    

    dist是我们的前端项目,server是我们的后端项目。 下面再来看看我们的 docker-compose.yml :

    version: '3'
     services:
     music-web: #前端项目的service name
       container_name: 'music-web-container' #容器名称
       image: nginx #指定镜像
       restart: always
       ports:
       - 80:80
       volumes: 
       - ./nginx.conf:/etc/nginx/nginx.conf #挂载nginx配置
       - ./dist:/usr/share/nginx/html/  #挂载项目
       depends_on:
       - music-server
     music-server:  #后端项目的service name
       container_name: 'music-server-container'
       build: ./server #根据server目录下面的Dockerfile构建镜像
       restart: always
       expose:
       - 3000
    
    

    可以看见,我们通过 volumes 属性将宿主机的 nginx.conf 挂载到容器内的nginx配置文件,用来覆盖原有的配置文件,同时也将 dist 挂载到容器内。我们将前端项目的容器暴露并映射给宿主机的80端口,我们将后端项目的容器暴露3000端口。那么我们在哪里实现反向代理请求呢?请看 nginx.conf :

    #user nobody;
     worker_processes 1;
     events {
       worker_connections 1024;
     }
     http {
       include    mime.types;
       default_type application/octet-stream;
       sendfile    on;
       #tcp_nopush   on;
       #keepalive_timeout 0;
       keepalive_timeout 65;
       #gzip on;
       gzip on;
       gzip_min_length 5k;
       gzip_buffers   4 16k;
       #gzip_http_version 1.0;
       gzip_comp_level 3;
       gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
       gzip_vary on;
       server {
         listen 80;
         server_name www.xieyezi.com;
         #音乐app项目
         location / {
         index index.html index.htm;  #添加属性。 
         root /usr/share/nginx/html;  #站点目录
         }
         #音乐app项目设置代理转发
         location /api/ {
         proxy_pass http://music-server:3000/;
         }
         error_page  500 502 503 504 /50x.html;
         location = /50x.html {
           root  /usr/share/nginx/html;
         }
       }
     }
    
    

    可以看上面的 proxy_pass http://music-server:3000/; 。其中 music-server 是我们后端项目的服务名,我们通过服务名来找到这个容器,这样就实现了反向代理。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    上一篇:.NETCore Docker实现容器化与私有镜像仓库管理
    下一篇:Docker搭建Zookeeper&Kafka集群的实现
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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