k8s部署java项目
# 编译
1.项目地址
- 前端:https://github.com/elunez/eladmin-web
- 后端:https://github.com/elunez/eladmin
2.下载后端包并编译
git clone https://github.com/elunez/eladmin
cd eladmin
mvn clean package -Dmaven.test.skip=true
1
2
3
2
3
3.编写Dockerfile文件
# 使用官方的 OpenJDK 镜像作为基础镜像
FROM openjdk:11-jre-slim
# 设置工作目录
WORKDIR /app
# 安装 tzdata 以设置时区和中文字体
RUN apt-get update && \
apt-get install -y tzdata fonts-wqy-zenhei fonts-arphic-ukai && \
rm -rf /var/lib/apt/lists/*
# 将本地的 jar 文件复制到容器中
COPY eladmin-system/target/eladmin-system-2.7.jar /app/eladmin-system-2.7.jar
COPY eladmin-system/src/main/resources/config/application.yml /app/config/
COPY eladmin-system/src/main/resources/config/application-prod.yml /app/config/
# 设置上海时区
ENV TZ=Asia/Shanghai
# 设置环境变量
ENV SPRING_PROFILES_ACTIVE=prod \
TZ=Asia/Shanghai \
JAVA_OPTS="-Xms512m -Xmx1024m"
# 暴露应用运行所需的端口
EXPOSE 8000
# 启动 Java 应用
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app/eladmin-system-2.7.jar \
--spring.config.location=file:/app/config/application.yml,file:/app/config/application-prod.yml \
--spring.profiles.active=prod"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
4.执行java打包
docker build -t docker.cnb.cool/zzppjj/docker-images/eladmin-system:v1 .
1
5.下载前端包并执行多阶段镜像编译打包
git clone https://github.com/elunez/eladmin-web
cd eladmin-web
1
2
2
6.前端Dockerfile文件
FROM docker.cnb.cool/zzppjj/docker-images/node:14.18 as build-stage
WORKDIR /app
COPY . .
RUN sed -i s#https://eladmin.vip#http://eladmin.zzppjj.top#g .env.production \
&& sed -i s#wss://eladmin.vip#wss://eladmin.zzppjj.top#g .env.production \
&& npm install --registry=https://registry.npmmirror.com
RUN npm run build:prod
# production stage
FROM docker.cnb.cool/zzppjj/docker-images/nginx:alpine
COPY /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
7.执行前端打包
docker build -t ocker.cnb.cool/zzppjj/docker-images/eladmin-web:v1 .
1
# 编写server端部署文件
configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: java-config
namespace: apply03
data:
DB_HOST: "192.168.51.49"
DB_PORT: "13306"
DB_PWD: "2025W#@qGhsd"
DB_NAME: "eladmin"
REDIS_HOST: "192.168.51.49"
REDIS_PORT: "16379"
REDIS_PWD: "fdsfd23d"
REDIS_DB: "0"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
deplyment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: java-deployment
namespace: apply03
labels:
app: java-app
spec:
replicas: 1
selector:
matchLabels:
app: java-app
template:
metadata:
labels:
app: java-app
spec:
containers:
- name: java
image: docker.cnb.cool/zzppjj/docker-images/eladmin-system:v3
ports:
- containerPort: 8000
envFrom:
- configMapRef:
name: java-config
resources:
requests:
memory: "512Mi"
cpu: "100m"
limits:
memory: "1024Mi"
cpu: "200m"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
svc.yaml
apiVersion: v1
kind: Service
metadata:
name: java-service
namespace: apply03
spec:
selector:
app: java-app
ports:
- protocol: TCP
port: 8000
targetPort: 8000
type: ClusterIP
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
执行部署
kubectl apply -f configmap.yaml -f deplyment.yaml -f svc.yaml
1
# 部署web端
configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: my.conf
namespace: apply03
data:
my.conf: |
server
{
listen 10480;
index index.html;
root /usr/share/nginx/html; #dist上传的路径
# 避免访问出现 404 错误
location / {
try_files $uri $uri/ @router;
index index.html;
}
location @router {
rewrite ^.*$ /index.html last;
}
# 接口
location /api {
proxy_pass http://java-service:8000;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# 授权接口
location /auth {
proxy_pass http://java-service:8000;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# WebSocket 服务
location /webSocket {
proxy_redirect off;
proxy_pass http://java-service:8000/webSocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 60s;
proxy_read_timeout 86400s;
proxy_send_timeout 60s;
}
# 头像
location /avatar {
proxy_pass http://java-service:8000;
}
# 文件
location /file {
proxy_pass http://java-service:8000;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
deply-web.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: eladmin-web
labels:
app: eladmin-web
namespace: apply03
spec:
replicas: 1
selector:
matchLabels:
app: eladmin-web
template:
metadata:
labels:
app: eladmin-web
spec:
containers:
- name: eladmin-web-container
image: docker.cnb.cool/zzppjj/docker-images/eladmin-web:v2 # 如果使用具体版本请修改 tag
ports:
- containerPort: 10480
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "200m"
volumeMounts:
- mountPath: /etc/nginx/conf.d/
name: nginx-config
livenessProbe:
httpGet:
path: /
port: 10480
initialDelaySeconds: 15
periodSeconds: 20
readinessProbe:
httpGet:
path: /
port: 10480
initialDelaySeconds: 5
periodSeconds: 10
volumes:
- name: nginx-config
configMap:
name: my.conf
---
apiVersion: v1
kind: Service
metadata:
name: eladmin-web-service
namespace: apply03
spec:
type: ClusterIP # 如果使用云服务商,会创建外部负载均衡器
selector:
app: eladmin-web
ports:
- protocol: TCP
port: 10081 # 外部访问端口
targetPort: 10480 # 容器端口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Ingress.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: java-ingress
namespace: apply03
annotations:
nginx.ingress.kubernetes.io/rewrite-target: / # Nginx Ingress 专用注解
spec:
ingressClassName: nginx # 指定 Ingress 控制器类型
rules:
- host: eladmin.zzppjj.top
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: eladmin-web-service
port:
number: 10081
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
执行部署
kubectl apply -f configmap.yml -f deply-web.yml -f ingress.yml
1
浏览器访问:http://eladmin.zzppjj.top


上次更新: 2025/02/22, 23:10:06