一套简单的前后端分离架构,打包和发布都在这里,jar包编译步骤这里不介绍
需要安装docker,docker-compose,yq,nginx这些
后端Dockerfile
FROM java:8
COPY ./admin-web.jar /app/admin-server.jar
WORKDIR /app
CMD ["java","-jar","admin-server.jar"]
ENV TZ=Asia/Shanghai
ENV LANG=C.UTF-8
前端Dockerfile
FROM nginx:latest
EXPOSE 80
RUN mkdir -p /app
COPY ./dist /app
WORKDIR /app
ENV TZ=Asia/Shanghai
ENV LANG=C.UTF-8
docker-compose.yml
version: "3"
services:
admin-server:
image: admin:2021082819
container_name: admin
restart: always
ports:
- 9999:8080
volumes:
- /srv/logs/:/logs/
admin-front:
image: admin-front:2021082819
container_name: admin-front
restart: always
ports:
- 8888:80
tag-admin-server.sh
#!/bin/bash
version=`date "+%Y%m%d%H"`
docker build -t admin-server .
docker tag admin-server:latest admin-server:${version}
yq w -i docker-compose.yml services.admin-server.image admin-server:${version}
docker-compose -f docker-compose.yml up -d admin-server
tag-admin-front.sh
#!/bin/bash
version=`date "+%Y%m%d%H"`
docker build -t admin-front .
docker tag admin-front:latest admin-front:${version}
yq w -i docker-compose.yml services.admin-front.image admin-front:${version}
docker-compose -f docker-compose.yml up -d admin-front
nginx.conf
upstream admin-front {
server 127.0.0.1:8888 weight=10;
}
upstream admin-server {
server 127.0.0.1:9999 weight=10;
}
server {
server_name admin.xxxxx.com;
listen 80;
location / {
proxy_pass http://admin-front;
proxy_http_version 1.1;
proxy_set_header Connection "";
client_max_body_size 1000m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Scheme $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
}
location /api/ {
proxy_pass http://admin-server;
proxy_http_version 1.1;
proxy_set_header Connection "";
client_max_body_size 1000m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Scheme $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
}
access_log /var/log/nginx/admin.xxxxx.com.log main;
error_log /var/log/nginx/admin.xxxxx.error.log;
}
这是一套最基本的前后端分离架构,可以用jenkins控制代码来发布简单服务
复杂的微服务架构最好是用k8s+helm包管理来发布会比较便利