Docker部署项目
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
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.7ID 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端口 访问管理后台页面。见到以下页面即可