你的浏览器不支持canvas

做你害怕做的事情,然后你会发现,不过如此。

Docker部署JNPF 3.4.5单体版

时间: 作者: 黄运鑫

本文章属原创文章,未经作者许可,禁止转载,复制,下载,以及用作商业用途。原作者保留所有解释权。


环境

  • Linux系统CentOS 7

准备

安装Docker

  • 执行curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun安装docker,其他安装方式参考 CentOS Docker 安装
  • 执行sudo systemctl start docker启动docker
  • 执行sudo systemctl enable docker添加docker开机启动

安装Nginx

  • 既然已经安装了Docker,那就可以使用镜像的方式部署Nginx
  • 服务器任意位置创建nginx-deploy目录,用来存放Nginx部署文件
  • nginx-deploy目录中创建jnpf3.4.5.conf文件,内容如下:
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen       3000;
    server_name  localhost;
    
    root   /home/deploy/front/jnpf-web;
    index  index.html;

    # 前端主项目伪静态
    location / {
        try_files $uri $uri/ /index.html;
    }
    # 前端大屏项目伪静态
    location /DataV {
        try_files $uri $uri/ /DataV/index.html;
    }
    # 前端报表项目伪静态
    location /Report/icons/{
        try_files $uri $uri/ /Report/icons/;
    }
    #设置上传文件的大小
    client_max_body_size 100m;

    #添加头部信息
    proxy_set_header Cookie $http_cookie;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    #请求头总长度大于128k时使用large_client_header_buffers设置的缓存区
    client_header_buffer_size 128k;

    #指令参数4为个数,128k为大小,默认是8k。申请4个128k。
    large_client_header_buffers 4 128k;

    # api
    location /api/ {
        add_header Access-Control-Allow-Origin $http_origin;
        add_header Access-Control-Allow-Headers *;
        proxy_pass http://localhost:30000;
        if ($request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$){ }
    }

    # websocket
    location /websocket {
        proxy_pass http://localhost:30000/api/message/websocket;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_read_timeout 600s;
    }

    # Start 报表接口配置
    location /ReportServer/ {
        proxy_pass http://localhost:30007/;
    }

    # 文件预览(jnpf-file-preview)
    location /FileServer {
        proxy_pass http://localhost:30090;
    }
    location ~ /FileServer/*.*\.(js|css)?$ {
        proxy_pass http://localhost:30090;
    }
    # End 报表接口配置
}

server {
    listen       3001;
    server_name  localhost;
    
    root   /home/deploy/front/jnpf-app;
    index  index.html;
    
    # 移动端
    location /m {
        #root   /usr/share/nginx/jnpf-app3.4.1;
        #index  index.html;
        try_files $uri $uri/ /home/deploy/front/jnpf-app/index.html;
    }

    # 前端主项目伪静态
    location / {
        try_files $uri $uri/ /index.html;
    }
    # 前端大屏项目伪静态
    location /DataV {
        try_files $uri $uri/ /DataV/index.html;
    }
    # 前端报表项目伪静态
    location /Report/icons/{
        try_files $uri $uri/ /Report/icons/;
    }
    #设置上传文件的大小
    client_max_body_size 100m;

    #添加头部信息
    proxy_set_header Cookie $http_cookie;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    #请求头总长度大于128k时使用large_client_header_buffers设置的缓存区
    client_header_buffer_size 128k;

    #指令参数4为个数,128k为大小,默认是8k。申请4个128k。
    large_client_header_buffers 4 128k;

    # api
    location /api/ {
        add_header Access-Control-Allow-Origin $http_origin;
        add_header Access-Control-Allow-Headers *;
        proxy_pass http://localhost:30000;
        if ($request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$){ }
    }

    # websocket
    location /websocket {
        proxy_pass http://localhost:30000/api/message/websocket;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_read_timeout 600s;
    }

    # Start 报表接口配置
    location /ReportServer/ {
        proxy_pass http://localhost:30007/;
    }

    # 文件预览(jnpf-file-preview)
    location /FileServer {
        proxy_pass http://localhost:30090;
    }
    location ~ /FileServer/*.*\.(js|css)?$ {
        proxy_pass http://localhost:30090;
    }
    # End 报表接口配置

}

  • nginx-deploy目录中创建Dockerfile文件,内容如下:
#基础镜像
FROM nginx:1.23.3

#jnpf的配置文件
COPY jnpf3.4.5.conf /etc/nginx/conf.d/

#开放端口
EXPOSE 80
  • nginx-deploy目录中创建deploy.sh部署脚本,内容如下:
#!/bin/bash
#镜像名称
CONTAINER_IMAGE=nginx:master-$(date +%Y%m%d%H%M)
#容器名称
CONTAINER_NAME=nginx

#构建镜像
docker build -t $CONTAINER_IMAGE .
#停止之前的容器
docker stop $CONTAINER_NAME || true && docker rm -f $CONTAINER_NAME || true
#运行新的容器,/home/deploy/front是JNPF前端项目地址
docker run --network=host -d -p 80:80 -v /home/deploy/front:/home/deploy/front --name $CONTAINER_NAME $CONTAINER_IMAGE
  • 切换到nginx-deploy目录执行sh deploy.sh部署脚本,等待执行完成
  • 执行docker ps -a查看Nginx容器,内容如下:
[root@localhost nginx]# docker ps -a
CONTAINER ID   IMAGE                                             COMMAND                  CREATED        STATUS        PORTS                                           NAMES
8707820ba373   nginx:master-202301111033                         "/docker-entrypoint.…"   25 hours ago   Up 25 hours                                                   nginx
  • 访问http://服务器ip,如果显示欢迎页面说明Nginx安装成功,如果访问不到,可能是开启了防火墙
  • 执行systemctl status firewalld.service查看防火墙,显示active(running)说明开启了防火墙
  • 执行systemctl stop firewalld.service关闭防火墙
  • 执行systemctl disable firewalld.service关闭防火墙开机启动
  • 再次访问http://服务器ip,显示欢迎页面

部署

部署jnpf-java-boot

  • 服务器任意位置创建jnpf-java-boot-deploy目录,用来存放jnpf-java-boot部署文件
  • jnpf-java-boot-deploy目录中创建Dockerfile文件,内容如下:
FROM openjdk:8
ADD jnpf-admin-3.4.5-RELEASE.jar jnpf-boot.jar
ADD jnpf-resources /data/jnpf-resources
EXPOSE 30000
ENTRYPOINT ["java","-jar", "/jnpf-boot.jar"]
  • jnpf-java-boot-deploy目录中创建deploy.sh部署脚本,内容如下:
#!/bin/bash
tag=jnpf/jnpf-admin3.4.5:master_$(date +%Y%m%d%H%M)
psName=jnpf-admin-3.4.5

docker build -t "$tag" .
docker stop $psName || true && docker rm -f $psName || true
docker run -d -p 30000:30000 --name $psName $tag
  • jnpf-resources文件夹复制到jnpf-java-boot-deploy目录中
  • 将项目打包后的文件jnpf-admin-3.4.5-RELEASE.jar复制到jnpf-java-boot-deploy目录中

  • 切换到jnpf-java-boot-deploy目录执行sh deploy.sh部署脚本,等待执行完成

部署jnpf-datareport

  • 服务器任意位置创建jnpf-datareport-deploy目录,用来存放jnpf-datareport部署文件
  • jnpf-datareport-deploy目录中创建Dockerfile文件,内容如下:
FROM openjdk:8
ADD jnpf-datareport-3.4.4-RELEASE.jar app.jar
EXPOSE 30007
ENTRYPOINT ["java","-jar", "/app.jar"]
  • jnpf-datareport-deploy目录中创建deploy.sh部署脚本,内容如下:
#!/bin/bash
tag=jnpf/jnpf-datareport3.4.5:master_$(date +%Y%m%d%H%M)
psName=jnpf-datareport-3.4.5

docker build -t "$tag" .
docker stop $psName || true && docker rm -f $psName || true
docker run -d -p 30007:30007 --name $psName $tag
  • 将项目打包后的文件jnpf-datareport-3.4.4-RELEASE.jar复制到jnpf-datareport-deploy目录中

  • 切换到jnpf-datareport-deploy目录执行sh deploy.sh部署脚本,等待执行完成

部署jnpf-scheduletask

  • 服务器任意位置创建jnpf-scheduletask-deploy目录,用来存放jnpf-scheduletask部署文件
  • jnpf-scheduletask-deploy目录中创建Dockerfile文件,内容如下:
FROM openjdk:8
ADD xxl-job-admin-1.0-RELEASE.jar app.jar
EXPOSE 30020
ENTRYPOINT ["java","-jar", "/app.jar"]
  • jnpf-scheduletask-deploy目录中创建deploy.sh部署脚本,内容如下:
#!/bin/bash
tag=jnpf/jnpf-scheduletask3.4.5:master_$(date +%Y%m%d%H%M)
psName=jnpf-scheduletask-3.4.5

docker build -t "$tag" .
docker stop $psName || true && docker rm -f $psName || true
docker run -d -p 30020:30020 --name $psName $tag
  • 将项目打包后的文件xxl-job-admin-1.0-RELEASE.jar复制到jnpf-scheduletask-deploy目录中

  • 切换到jnpf-scheduletask-deploy目录执行sh deploy.sh部署脚本,等待执行完成

部署jnpf-file-preview

  • 文件预览服务没有部署,因为之前JNPF旧版的jnpf-file-preview服务可以用,如果需要部署方式同上

部署管理端页面jnpf-webjnpf-web-datareportjnpf-web-datascreen

  • 按照官方文档配置端口并构建项目,构建后的jnpf-web目录结构如下:
├── jnpf-web                       # 存放测试或生产环境的前端
     │── DataV                     # 大屏(`jnpf-datascreen`)打包后文件存放目录
     │── Report                    # 报表(`jnpf-datareport`)html下的文件
     └── 主项目前端打包后的文件        # 主项目(`jnpf-web`)打包后存放在根目录
  • 将文件夹jnpf-web中的内容复制到/home/deploy/front/jnpf-web目录下

部署移动端页面jnpf-app

  • 将项目构建的文件复制到/home/deploy/front/jnpf-app目录下
  • 最终/home/deploy/front目录结构如下:
├── front
     ├── jnpf-app                       # 移动端文件夹
     └── jnpf-web                       # 管理端文件夹
          │── DataV                     # 大屏
          │── Report                    # 报表
          └── 主项目前端打包后的文件        # 主项目(`jnpf-web`)打包后存放在jnpf-web目录

部署完成

  • 执行docker ps -a查看容器,内容如下:
[root@localhost nginx]# docker ps -a
CONTAINER ID   IMAGE                                             COMMAND                  CREATED        STATUS        PORTS                                           NAMES
d674d01b114d   jnpf/jnpf-admin3.4.5:master_202301111201          "java -jar /jnpf-boo…"   26 hours ago   Up 26 hours   0.0.0.0:30000->30000/tcp, :::30000->30000/tcp   jnpf-admin-3.4.5
4f6a9f3d5626   jnpf/jnpf-datareport3.4.5:master_202301111045     "java -jar /app.jar"     27 hours ago   Up 27 hours   0.0.0.0:30007->30007/tcp, :::30007->30007/tcp   jnpf-datareport-3.4.5
8707820ba373   nginx:master-202301111033                         "/docker-entrypoint.…"   28 hours ago   Up 28 hours                                                   nginx
3fcbadf01bfd   jnpf/jnpf-scheduletask3.4.5:master_202301110916   "java -jar /app.jar"     29 hours ago   Up 29 hours   0.0.0.0:30020->30020/tcp, :::30020->30020/tcp   jnpf-scheduletask-3.4.5
bfd9831db378   jnpf/jnpf-file-preview3.4.1:master_202301101736   "java -jar /app.jar"     45 hours ago   Up 45 hours   0.0.0.0:30090->30090/tcp, :::30090->30090/tcp   jnpf-file-preview-3.4.1
  • 执行chmod -R 777 /home/deploy/front/*修改前端项目的读写权限,避免因权限造成访问失败

  • 到此部署完成,管理端地址http://主机ip:3000,移动端地址http://主机ip:3001,默认管理员用户名admin 密码123456


对于本文内容有问题或建议的小伙伴,欢迎在文章底部留言交流讨论。