top部署成果展示
访问 http://192.168.159.128,如下:
登录页面
首页
特长人才列表
调度管理
审批管理
用户管理
营队管理
队员管理
修复意见
游客登录页面
下面进入正题
一. 为什么要用docker
1. 快速交付应用程序
标准的image构建开发容器,可以快速部署,docker容器轻、快
2. 更容易部署和扩展
docker容器可以在几乎所有的环境中运行,物理机、虚拟机、公有私有云、个人电脑等,兼容多种平台
3. 效率更高
docker容器不需要hypervisor,内核级的虚拟化
4. 快速部署
更简单的管理,小小的改变可以替代以往巨型和大量的工作。
二、开发背景
随着科技的发达以及官兵素质的不断提升,很多的官兵学历水平逐渐变高,在部队有很多的官兵都拥有自己的技术特长,并且也有很多的官兵在部队经久锤炼通过各种的集训学习有了自己的专业特长,精彩军旅生涯,但是这些官兵分散的各个不同的营、连分队,有的时候机关或者分队急需人才的时候需要通过不断地协调,过程繁琐麻烦。
基于这样的背景下试想如果开发一个人才库管理系统,把全旅有技术特长的官兵全部都统计到数据库里,统一进行调配管理,比如机关需要一个有计算机特长的同志,便可以直接从数据库里查询,在全旅的范围内寻找,然后通过系统告知他所在的单位,单位首长予以回馈,这样就会大大的减少琐碎的流程,从而实现方便快捷。
三、环境准备(虚拟机部署)
1. 准备所需的环境
centos 7 软件系统 一个
vmware 虚拟机 一台
docker 服务工具 一个
虚拟机上安装centos7就不过多讲解了,主要是讲以下docker安装吧,还有docker-compose的安装
1.1 安装docker:
sudo yum update
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
更新所有软件命令 sudo yum update
安装指定的软件 sudo yum install -y yum-utils
设置yum源 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装docker所需的东西 sudo yum install -y docker-ce docker-ce-cli containerd.io
开启docker服务 sudo systemctl start docker
开机自启动 sudo systemctl enable docker
1.2 离线安装docker-compose
国外镜像比较慢
推荐用国内镜像
先将docker-compose下载好,我们选择
下载这个就可以直接用,等会后面讲到,接着就要构建dockerfile和docker-compose.yml文件了
2. 构建后端的dockerfile文件
在springboot项目的后端src目录下创建dockerfile文件,写入以下内容:
FROM openjdk:8-jdk
ADD personManagementSystem-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"
CMD java -jar app.jar $JAVA_OPTS
按照上面的dockerfile文件中的内容,只需要动两个地方,一个是ADD 添加jar包到容器中并更名为app.jar 将后端打包好的jar名称替换即可,第二个是监听端口EXPOSE 8080 端口可根据自己项目启动的端口进行替换即可
3. 构建docker-compose.yml文件
version: "3" # 版本号
services:
nginx: # 服务名称,用户自定义
image: nginx:latest #latest最近版本镜像版本
ports:
- 80:80 #暴露端口
volumes: # 挂载 前面是宿主机上文件位置:docker容器里面nginx资源位置 提示:宿主机上文件目录必须要存在
- /root/nginx/html:/usr/share/nginx/html
- /root/nginx/nginx.conf:/etc/nginx/nginx.conf
privileged: true # 这个必须要,解决nginx的文件调用的权限问题
mysql:# 服务名称,用户自定义
image: mysql:8.0 #指定的镜像版本
ports:
- 3306:3306#暴露端口
environment:
- MYSQL_ROOT_PASSWORD=root # 指定用户root的密码
server:# 服务名称,用户自定义
image: server:latest
build: . #表示以当前目录下的Dockerfile开始构建镜像
ports:
- 8080:8080 #暴露端口
还有一个地方需要更改以下,项目中的application.yml文件中
因为等会用docker-compose就会生成mysql服务,然后我们只需要替换原本服务器上的mysql服务路径即可。好了现在咱们讲以下docker-compose的安装
之前下载的docker-compose文件,应该下载完成了吧,现在我们将他移入centos服务器的/user/local/bin/下,直接重命名为docker-compose即可,然后赋予执行权限
chmod +x /usr/local/bin/docker-compose
docker-compose -v
# Docker Compose version v2.20.2
赋予权限过后,查看docker-compose版本,出现版本号自己下载的版本号,则表示安装成功了
4. 前端vue打包前设置及打包
vue.config.js文件内容
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
transpileDependencies: true,
runtimeCompiler:true,
publicPath:"./",
devServer: {
proxy: {
'/api': {
target: 'http://192.168.159.128:8080', // Spring Boot后端服务器地址
changeOrigin: true, // 为true host会变成target的值。
pathRewrite: {
'^/api': ''
}
}
}
}
})
request.js文件下,我们需要在每个请求的url上都加上/api,这样的话匹配到/api就知道这是需要跨域的请求,就会直接访问后端服务器的网址,如下:
import axios from "axios";
import { Message} from 'element-ui';
axios.defaults.baseURL="/api"
const service = axios.create({
// baseURL="/api", // 这种方式应该也可以,因为测试的时候用的上面那种,可以尝试以下
timeout:10*1000
})
service.interceptors.response.use(response=>{
let res = response.data;
if(response.config.responseType==='blob'){
return res;
}
if(typeof res === 'string'){
res = res?JSON.parse(res):res
}
return res;
},error=>{
if (error && error.response) {
// 1.公共错误处理
// 2.根据响应码具体处理
switch (error.response.status) {
case 400:
error.message = '错误请求'
break;
case 401:
error.message = '未授权,请重新登录'
break;
case 403:
error.message = '拒绝访问'
break;
case 404:
error.message = '请求错误,未找到该资源'
window.location.href = "/NotFound"
break;
case 405:
error.message = '请求方法未允许'
break;
case 408:
error.message = '请求超时'
break;
case 500:
error.message = '服务器端出错'
break;
case 501:
error.message = '网络未实现'
break;
case 502:
error.message = '网络错误'
break;
case 503:
error.message = '服务不可用'
break;
case 504:
error.message = '网络超时'
break;
case 505:
error.message = 'http版本不支持该请求'
break;
default:
error.message = `连接错误${error.response.status}`
}
}else{
if (JSON.stringify(error).includes('timeout')) {
Message.error('服务器响应超时,请刷新当前页')
}
error.message = '连接服务器失败'
return Promise.resolve(error.response)
}
})
export default service
修改完成之后,我们通过packjson.json文件中查看打包命令我的是默认 npm run build打包就可,会在项目的根目录中生成dist文件
5. nginx.conf文件
#user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name 192.168.159.128; # nginx服务器地址80端口
location / {
root /usr/share/nginx/html; # nginx中放前端打包好的dist文件下内容
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /api/ {
proxy_pass http://192.168.159.128:8080; # 后端springBoot项目地址
proxy_redirect default;
rewrite ^/api/(.*) /$1 break;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
6. 打包后端springboot项目
可以用maven命令打包,也可选择,maven插件进行install打包即可,我们只需要打包后的jar包文件
7. 准备好的东西,上传到服务器中(非常重要的步骤)
首先将springboot项目的jar包 personManagementSystem-0.0.1-SNAPSHOT.jar 、dockerfile、docker-compose.yml文件放在服务器的同一目录下,例如放在/opt/army_system文件目录下,然后将打包好的dist目录下的内容上传至服务器的/root/nginx/html 如果忘记了可以看看docker-compose.yml文件中的nginx挂在目录位置。然后将准备好的nginx.config 上传至/root/nginx/目录下面。这下我们上传云上的工作已经做完,我们开始执行以下命令
# 进入/army_system目录
cd /opt/army_system
# 启动DockerCompose项目中定义的服务的,并且让这些服务在后台以守护进程(daemon)模式运行。
docker-compose up -d
# 查看docker容器
docker ps
一切没问题之后,我们就可以访问项目了在宿主机上访问 http://192.168.159.128就能够访问到nginx部署的项目了
8.提示相关软件版本
docker 26.1.3
docker-compose 2.20.2
mysql8
vue2.0
maven3.8.1
centos 7
nginx 1.20.1
这此就是整个部署的全过程了,记录以下,自己用一天才摸索出来的东西,希望遇到困难的你,能够对你有一些帮助!如何有即将毕业的毕业生看上这个项目,可以找我了解,技术栈springboot+mybaits+mysql+vue+docker+linux+nginx 如果需要加技术栈还可加redis对项目做整体优化。