1、使用Docker部署SpringBoot项目
1.1、首先安装docker、安装JDK17
安装docker和docker的一些常用命令在如下文章里有写到。
安装JDK17
yum search java | grep -i --color jdk 查看yum,JDK版本 yum install -y java-11-openjdk* 安装 java -version 查看版本,默认安装路径/usr/lib/jvm安装成功 cd /usr/local 进入程序安装目录 mkdir java 创建一个文件夹 上传 jdk-17.0.4_linux-x64_bin.tar.gz jdk文件到该目录 tar -zxvf jdk-17.0.4_linux-x64_bin.tar.gz 解压 rm -rf jdk-17.0.4_linux-x64_bin.tar.gz 删除安装目录 vi /etc/profile 配置环境变量 JAVA_HOME=/usr/local/java/jdk-17.0.4 CLASSPATH=$JAVA_HOME/lib/ PATH=$PATH:$JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH source /etc/profile 让环境变量生效 31641e4c00a2c523ee6e3c15e142d59d
1.2、第一种部署方式,使用shell脚本部署项目
使用maven将springboot项目打成jar包。
在xshell会话里创建一个文件夹
将项目jar包名字改成1.jar
mkdir springboot cd springboot
将已有的run.sh\start.sh\stop.sh\catalina.out四个文件也上传到该文件夹。
执行下面命令,就可以一直在服务器启动SpringBoot项目
./run/sh
1.3、第二种部署方式
1、首先使用dockerfile自定义一个JDK17的镜像。
创建一个文件夹,并创建如下dockerfile文件。
# 建立一个新的镜像文件,配置模板:新建立的镜像是以centos为基础模板 FROM centos:7 # 作者名 作者邮箱 MAINTAINER chw <185338353@qq.com> # 创建一个新目录来存储jdk文件 RUN mkdir /usr/local/java WORKDIR /usr/local/java #将jdk压缩文件复制到镜像中,它将自动解压缩tar文件 ADD jdk-17.0.4_linux-x64_bin.tar.gz /usr/local/java/ # 创建软连接 ln -s 源文件 目标文件 # RUN ln -s /usr/local/java/jdk-17.0.4 /usr/local/java/jdk # 设置环境变量 ENV JAVA_HOME /usr/local/java/jdk-17.0.4 ENV JRE_HOME /usr.local.java/jdk-17.0.4 ENV CLASSPATH .:${JAVA_HOME}/LIB:${JRE_HOME}/LIB ENV PATH $JAVA_HOME/bin:$PATH
在这个文件夹下,执行如下命令创建镜像:
docker build -t jdk17:1.0 .
2、其次基于JDK17镜像使用dockerfile自定义SpringBoot项目的镜像,然后使用该自定义镜像去创建并启动容器。
创建一个文件夹,并创建如下dockerfile文件。
FROM jdk17:1.0 Maintainer chw <185338353@qq.com> ADD invoicing_system.jar /app.jar # 运行jar包 RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-jar","/app.jar"] ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
在这个文件夹下,执行如下命令创建镜像并创建启动容器:
docker build -f ./invoicing_dockerfile -t app . docker run -d --name=app -p 9999:9999 -v /invoicing_system/images:/invoicing_system/images -v /invoicing_system/file:/invoicing_system/file app
docker部署mysql
拉取mysql docker pull mysql:5.7 创建运行容器 docker run -id -p 3306:3306 --name=mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -e MYSQL_ROOT_PASSWORD=写密码 mysql:5.7 进入容器 docker exec -it mysql5.7(ID) bash
常用命令
拷贝容器的配置到宿主机文件夹中 docker cp 容器ID:/etc/nginx/nginx.conf ./ docker cp 容器ID:/etc/nginx/conf.d/default.conf ./conf/ #授权 chmod -R 777 文件夹名字
2、使用Docker部署VUE项目
2.1、首先在docker上安装nginx
1、下载镜像 docker pull nginx 2、运行nginx docker run -d --name nginx -p 80:80 nginx 3、docker ps 如果成功会看到容器的存在 4、数据卷的挂载(1、配置文件 2、部署的项目) #在主机/mnt目录下执行 mkdir -p ./nginx/{conf,html,logs}创建挂载目录 cd /mnt mkdir -p ./nginx/{conf,html,logs} cd nginx 5、拷贝容器的配置到宿主机文件夹中 docker cp 容器ID:/etc/nginx/nginx.conf ./ docker cp 容器ID:/etc/nginx/conf.d/default.conf ./conf/ #授权 chmod -R 777 nginx 6、删除nginx容器 docker ps docker stop 容器ID docker rm 容器ID 7、创建挂载了数据卷的nginx docker run -d --name nginx -p 80:80 -v /mnt/nginx/nginx.conf:/etc/nginx/nginx.conf -v /mnt/nginx/logs:/var/log/nginx -v /mnt/nginx/html:/usr/share/nginx/html -v /mnt/nginx/conf:/etc/nginx/conf.d --privileged=true nginx
配置代理
使用vim命令修改nginx容器里的conf 目录下的default.conf文件,添加
location /路径别名/ { proxy_pass http://ip地址:端口号; proxy_cookie_path / /路径别名; proxy_redirect default; rewrite ^.+路径别名/?(.*)$ /$1 break; client_max_body_size 500m; }
location / { root /usr/share/nginx/html; index index.html index.htm; #避免界面重新刷新的问题 try_files $uri $uri/ /index.html; }
2.2、打包前端项目
在vue项目的控制台输入(npm run build)将前端vue项目打包,打包内容会在项目目录的dist文件夹下。将dish文件夹下所有内容复制到nginx容器里的html文件夹下,并重启nginx的docker容器。
3、使用kkFileView在线预览文件
kkFileView官网如下:
我们根据官网的文档的步骤一步一步执行命令就可以。
Docker容器环境环境运行
拉取镜像
# 网络环境方便访问docker中央仓库 docker pull keking/kkfileview:4.1.0 # 网络环境不方便访问docker中央仓库 wget http://kkfileview.keking.cn/kkFileView-4.1.0-docker.tar docker load -i kkFileView-4.1.0-docker.tar
运行
docker run -it -p 8012:8012 keking/kkfileview:4.1.0
浏览器访问容器8012端口
http://ip地址:8012
即可看到项目演示用首页
文件管理系统
可以根据文件名称模糊查询文件
可以点击预览该文件按钮查看该文件的pdf在线预览
写入项目里,在前端界面里写一个预览按钮,预览该文件按钮执行的方法如下:
由于我是Java工程师,所以选择在后端进行base64转码!
//预览文件pdf lookFile(row){ let fileNewname = row.fileNewname; axios.get('/chw/file/lookFile?fileNewname='+fileNewname).then(resp=>{ //在后端进行base64Encode转码 let url = resp.data; window.open('http://ip地址:端口号/onlinePreview?url='+url); }) },
后台控制器接口
/** * 预览文件 * @return */ @GetMapping("/lookFile") public String lookFile(String fileNewname) { log.info("预览文件..."); Base64.Encoder encoder = Base64.getEncoder(); String str = "http://ip地址:端口/files/"+fileNewname; return encoder.encodeToString(str.getBytes()); }
预览文件效果
4、frp网络穿透实现外网访问
frp官网
https://github.com/fatedier/frp
手把手教你用frp做内网穿透
如果你有一台云服务器(有公网IP),或者有使用权,那么在kkFileView - 在线文件预览程序压缩包。
frp 是一个专注于内网穿透的反向代理应用程序,使用时需要花钱申请公网IP和云服务器,可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
4.1、认识frp
frp的作用
利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。配置说明
1、实现功能外网通过ssh访问内网机器
自定义绑定域名访问内网web服务
2、配置前准备公网服务器1台
内网服务器1台4.2、使用frp
1、首先需要准备两个压缩包如下
解压frp_0.37.0_windows_386文件
2、修改 frp_0.37.0_windows_386文件下的frpc.ini配置文件
[common] server_addr = 127.0.0.1(这个ip需要搞成自己服务器的地址ip) server_port = 7000(服务器端口) token =12345678 (自定义一个token) [ssh] type = tcp local_ip = 127.0.0.1(本地内网地址) local_port = 9999(本地内网端口,你默认是8080,就写8080) remote_port = 7100(服务器端口)
- 7000端口(内网frp端口)和7100端口(外网frp端口)一个对外公网访问,一个对应本地端的访问,此时服务器理解是“跳板”!个人云服务器的防火墙一定要开启这两个端口!
- server_addr : 需要填写上你个人云服务器的公网 ip 地址,这个一定要填写正确,不然无法和服务器进行通信;
- server_port :就是服务器监听的端口,如果你服务器这个是默认7000,那这里就不用修改;这两部分就是用来和我们服务器进行通信的配置。
- token:为了服务器安全,加密鉴权的
- [ssh] 这部分就是创建隧道,也就映射对应的应用,这里映射的是 ssh;
- 内网的本地电脑需要开启7000端口
在当前文件夹用cmd运行本地电脑端程序:
frpc.exe -c frpc.ini
提示服务器端开启成功,它会监听7000端口消息,这个端口用于与本地端的通讯。
运行过程中,CMD窗口要一直保持开启
3、将frp_0.37.0_linux_amd64.tar部署到个人云服务器
首先创建一个文件夹、将frp_0.37.0_linux_amd64.tar压缩包上传到该文件夹下。
解压压缩包
tar -zxvf frp_0.37.0_linux_amd64.tar.gz
进入解压目录里
cd frp_0.37.0_linux_amd64/
修改服务端配置文件
vim frps.ini
[common] # frp监听的端口,默认是7000,可以改成其他的 bind_port = 7000 # 授权码,请改成更复杂的,这个token之后在客户端会用到 # 跟前面的token写成一样的 token =12345678 # frp管理后台端口,请按自己需求更改 dashboard_port = 7500 # frp管理后台用户名和密码,请改成自己的 dashboard_user = *** dashboard_pwd = 123456 enable_p`rometheus = true
设置frps服务并启动
这种方式,当xshell关闭后,frps服务也将关闭了
./frps -c frps.ini
下面方法用于frps服务开机自启动且一直运行
sudo mkdir -p /etc/frp -- 创建/etc/frp目录 sudo cp frps.ini /etc/frp -- 将frps.ini文件复制到/etc/frp中 sudo cp frps /usr/bin -- 将frps服务复制到/usr/bin中 sudo cp systemd/frps.service /usr/lib/systemd/system/ -- 将sustemd/frps.services 服务注册配置信息迁移到/usr/lib/systemd/system/ sudo systemctl enable frps -- 设置开机自启动 sudo systemctl start frps -- 启动frps服务 sudo systemctl status frps -- 查看启动日志 sudo systemctl restart frps -- 重启服务 sudo systemctl stop frps -- 关闭服务
验证服务端是否启动成功
可以输入 http://公网IP:dashboard端口 访问管理后台页面。见到以下页面即可