RelaxChat项目|Nginx相关|部署

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

环境配置文件

# 上传jar包和dockerfile

详情请看服务器使用关于mac如何上传文件到服务器上

# 构建镜像

# XXX 可以是版本号
docker build -t relaxchatXXX .
1
2

# 运行镜像

# 配置spring文件,注意生效的配置文件 注意服务器的防火墙/安全组是否打开了
docker run -itd --name relaxXXX -p 8080:8080 -p 8090:8090 -e SPRING_PROFILES_ACTIVE=prod relaxchatXXX
1
2

# 踩的坑

  • 忘记换配置文件了

直接用test,直接访问不到服务,解决防范

  • 设置了环境配置文件prod

内存不够,小小服务器直接启动不起来项目,

  • docker运行忘记映射两个端口了~

# 检查镜像运行状况

# 看看启动容器的运行状态
docker ps

# 看所有容器的运行状态
docker ps -a


# 查看服务器端口使用状态,检查自己的项目是否启动成功
netstat -lnpt
1
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

# 启动项目

  1. 注意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

# 打包项目

# 打包项目, ts项目,可能会校验ts的类型,如果不想校验,想打包直接成功,可以把type check先删掉
pnpm build
1
2

# nginx相关

# 安装和启动

# 安装
yum install -y nginx

# 启用 Nginx
systemctl start nginx

# 设置为在系统启动时自动启动
systemctl enable nginx

# 打开浏览器,输入服务器ip,看看是否有页面展示,没有就去看看防火墙
1
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

编辑完nginx.conf文件后记得刷新

# 刷新nginx
systemctl reload nginx
1
2
Last Updated: 2025/4/9 11:20:20