RelaxChat项目|Nginx相关|部署
Fang 2024/7/19 后端Java服务器Docker
# RelaxChat部署
# 后端部署
# 打包
打包 解决pom依赖问题
然后maven那边选择自己的服务,进行package
# dockerfile配置
# 使用官方的 Java 运行时作为基础镜像
FROM openjdk:17-jdk-alpine
# 设置工作目录
WORKDIR /usr/src/app
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 将你的 jar 包复制到 Docker 镜像中
COPY relax-chat-server-1.0-SNAPSHOT.jar /usr/src/app
# 设置启动命令,当容器启动时运行你的 jar 包
CMD ["java", "-jar", "relax-chat-server-1.0-SNAPSHOT.jar"]
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
环境配置文件
# 上传jar包和dockerfile
详情请看服务器使用关于mac如何上传文件到服务器上
# 构建镜像
# XXX 可以是版本号
docker build -t relaxchatXXX .
1
2
2
# 运行镜像
# 配置spring文件,注意生效的配置文件 注意服务器的防火墙/安全组是否打开了
docker run -itd --name relaxXXX -p 8080:8080 -p 8090:8090 -e SPRING_PROFILES_ACTIVE=prod relaxchatXXX
1
2
2
# 踩的坑
- 忘记换配置文件了
直接用test,直接访问不到服务,解决防范
- 设置了环境配置文件prod
内存不够,小小服务器直接启动不起来项目,
- docker运行忘记映射两个端口了~
# 检查镜像运行状况
# 看看启动容器的运行状态
docker ps
# 看所有容器的运行状态
docker ps -a
# 查看服务器端口使用状态,检查自己的项目是否启动成功
netstat -lnpt
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 前端部署
# 修改前端访问后端接口
# 测试服
VITE_API_PREFIX=http://127.0.0.1:8080
VITE_WS_URL=ws://127.0.0.1:8090
# 正式服,加后缀方便nginx识别路径并反向代理
VITE_API_PREFIX=http://xxx.xxx.xxx.xxx:80/api
VITE_WS_URL=ws://xxx.xxx.xxx.xxx:80/ws
1
2
3
4
5
6
7
2
3
4
5
6
7
# 启动项目
- 注意node.js版本,可以使用nvm来管理
# mac安装node
brew upgrade node@18.20.4
# pnpm包管理工具
npm install pnpm -g
# 依赖安装
pnpm install
# 运行项目
pnpm run dev
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 打包项目
# 打包项目, ts项目,可能会校验ts的类型,如果不想校验,想打包直接成功,可以把type check先删掉
pnpm build
1
2
2
# nginx相关
# 安装和启动
# 安装
yum install -y nginx
# 启用 Nginx
systemctl start nginx
# 设置为在系统启动时自动启动
systemctl enable nginx
# 打开浏览器,输入服务器ip,看看是否有页面展示,没有就去看看防火墙
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 配置
http{
#不限制的ip
geo $limit {
default 1;
127.0.0.1 0; # 本机地址
}
map $limit $limit_key {
0 "";
1 $binary_remote_addr;
}
#频控全局配置
limit_req_zone $limit_key zone=one:2m rate=10r/s;
server {
# 前端服务
# listen 8888;
# 如果用了域名
listen 80;
server_name chat.relaxing.top;
#频控生效位置
limit_req zone=one burst=10 nodelay;
location / {
root /project/relaxchat/dist/;
index index.html;
try_files $uri $uri/ /index.html;
}
# 后端服务
location /api/ {
proxy_pass http://后端项目springboot服务ip:8080/;
# 设置允许跨域的域,* 表示允许任何域,也可以设置特定的域
add_header 'Access-Control-Allow-Origin' '*';
# 允许的方法
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
# 允许的头信息字段
add_header 'Access-Control-Allow-Headers' 'User-Agent,Keep-Alive,Content-Type';
# 缓存时间
add_header 'Access-Control-Max-Age' 1728000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Host $host;
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
}
location /ws {
proxy_pass http://后端项目ws服务ip:8090/;
# 升级协议
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 600s;
}
error_page 404 /404.html;
location = /404.html {}
error_page 500 502 503 504 /50x.html;
location = /50x.html {}
}
}
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
69
70
71
72
73
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
69
70
71
72
73
编辑完nginx.conf文件后记得刷新
# 刷新nginx
systemctl reload nginx
1
2
2