微服务项目前后端部署流程

557 阅读2分钟

Docker部署微服务项目

使用Docker对微服务项目进行容器化部署。

1.1. 前端工程打包与配置

本例中,前端工程使用Vue进行开发,在进行部署之前需要对工程进行打包,打包命令如下:

npm run build

构建完成后会在根目录下生成dist文件,如下图所示:

将该文件下的所有文档copy到服务器下的ngix中的html文件下。

拷贝完成后,需要进行跨域处理,编写nginx.conf配置文件

#user root;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8000;
        server_name  localhost;
        location / {
            #add_header 'Access-Control-Allow-Origin' *;
            #add header 'Access-Control-Allow-Credentials' 'true';
            #add header 'Access-Control-Allow-Methods' *;
            #add_header 'Access-Control-Allow-Headers' *;
            root   /usr/share/nginx/html;
            try_files $uri $uri/ /index.html last;
            index  index.html index.htm;
        }
	
        location /api {
            #rewrite ^.+prod-api/?(.*)$ /$1 break;
            proxy_pass http://服务器IP:gateway端口;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-Ip $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

proxy_pass http://服务器IP:gateway端口;需要将地址与端口号改为自己的。

1.2. 后端工程打包与配置

后端直接使用maven进行打包即可。打包完成后现在本地运行测试,查看jar是否可以正常运行。

image.png

打包完成后,为了便于查找、区分,将不同的jar包上传到对应的文件夹中。

1.3. 部署

使用DockerFile+Docker-Compose组合继续项目部署。Docker-Compose在使用之前需要判断自己是否已经安装,若未安装可自行安装。

  1. 编写DockerFile
FROM openjdk:8
ENV APP_HOME=/apps
WORKDIR $APP_HOME
EXPOSE 8080
EXPOSE 30000
COPY gateway_demo-1.0-SNAPSHOT.jar gateway_demo.jar
#修改容器时区
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
ENTRYPOINT ["java", "-jar","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=30000"]
CMD ["gateway_demo.jar"]

"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=30000"用于远程调试。若不需要远程调试,可以删除。

需要为每个部署的工程均编写对应的Dockerfile文档。

本例中需要部署gateway_demo、user_demo、websocket_demo、xxljob_demo四个工程,此处以gateway_demo为例,其余工程Dokerfile类似不再赘述。

  1. 编写DockerCompose
version: "3.8"

services:
  nginx: #服务名称,用户自定义
    image: nginx:latest  # 镜像版本
    ports:
      - "8800:8000"  #暴露端口
    volumes: #挂载
      - /home/nginx/html:/usr/share/nginx/html
      - /home/nginx/nginx.conf:/etc/nginx/nginx.conf
    privileged: true #这个必须要,解决nginx的文件调用的权限问题

  gateway_demo:
    build:
      context: ./gateway_demo
      dockerfile: Dockerfile
    ports:
      - "8080:8080"

  user_demo:
    build:
      context: ./user_demo
      dockerfile: Dockerfile
    ports:
      - "8090:8090"

  websocket_demo:
    build:
      context: ./websocket_demo
      dockerfile: Dockerfile
    ports:
      - "8091:8091"

  xxljob_demo:
    build:
      context: ./xxljob_demo
      dockerfile: Dockerfile
    ports:
      - "8094:8094"
  1. 构建镜像,创建容器
#部署单个工程
docker compose up -d gateway_demo #服务名
#部署所有工程
docker compose up -d