# HP_bi_auto **Repository Path**: hupoyinian/hp_bi_auto ## Basic Information - **Project Name**: HP_bi_auto - **Description**: 智能BI项目的自动化脚本 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-07-03 - **Last Updated**: 2024-03-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 储巢-智能数据分析平台-自动化部署脚本 # 项目描述 本项目基于linux,使用shell编写了自动化部署脚本,并借助docker完成项目搭建
只需进行简单配置,便可“**一键**”部署该项目(一次配置,到处部署) # 项目架构 ![](img/1688393390107-813b6217-3f51-4a01-964a-1a714574e096.jpeg)
将前端项目部署到了nginx中对外提供服务
将后端项目拆成了两个部分,bi_backend处理主要请求,bi_queue单独处理rabbitMQ中的请求
redis提供限流服务,rabbitMQ存储AI请求,mysql进行数据存储 # 部署 ## 配置 linux:cenos7 1.5G内存 为项目预留10G空间
预计时间:16min35s985ms ## 先决条件 ### 下载脚本 (也可以不下载,本文最后提供了文本,手动创建对应文件并复制也行)
链接:[https://pan.baidu.com/s/1hzUB-GKgC2pHnlo2e0KqPQ?pwd=1111](https://pan.baidu.com/s/1hzUB-GKgC2pHnlo2e0KqPQ?pwd=1111)
提取码:1111
必须下载: | 清单 | 作用 | | --- | --- | | redis.conf | redis配置文件 | | build.sh | 核心脚本 | | nginx.conf | nginx配置文件 | | settings.xml | maven镜像配置文件 | | create.sql | sql初始化脚本 | | config.sh | 配置脚本 | ### 修改config.sh配置文件 配置文件中都有注释,依照注释填即可,部分项给了默认值,其中
`docker_aliyun_image`项是可选的,其余都是必填的
`git_bi_queue`项的默认值是我的[bi_queue仓库](https://gitee.com/hupoyinian/hp_bi_queue)
`git_bi_backend`项的默认值是我的[bi_backend仓库](https://gitee.com/hupoyinian/hp_bi_backend)
`git_bi_frontend`项的默认值是我的[bi_frontend仓库](https://gitee.com/hupoyinian/hp_bi_frontend)
注意:
服务们的**端口项**不要修改。并没有对服务的端口项做对应的适配,修改后会导致服务无法运行
如果设置了域名,则需要注意**域名**与**真实IP**的跨域问题 ### (可选)关闭PackageKit服务 在linux刚安装好,或自动系统更新时,会自动运行PackageKit服务长时间占用`yum`命令
关闭,依次运行以下命令即可 ```bash systemctl stop packagekit systemctl disable packagekit yum remove PackageKit ``` ### (可选)下载离线镜像包 docker的镜像下载会消耗大量时间,可以使用离线包直接加载这些镜像
链接:[https://pan.baidu.com/s/1hzUB-GKgC2pHnlo2e0KqPQ?pwd=1111](https://pan.baidu.com/s/1hzUB-GKgC2pHnlo2e0KqPQ?pwd=1111)
提取码:1111 | 清单 | 描述 | | --- | --- | | redis_7.0.11.tar | redis:7.0.11 | | mysql_latest.tar | mysql:latest | | mavne_3.8.5_jdk17.tar | maven:3.8.5-eclipse-temurin-17-alpine | | rabbit_management.tar | rabbitmq:management | | nodejs_16.tar | node:16-alpine3.17 | | nginx.tar | nginx:latest | ### (可选)获得阿里云docker镜像地址 [https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors](https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors)
自行登录该网站,并获取地址
![image.png](img/1688382766302-f1d81944-5cea-4fad-a4f6-ef3d275d16fd.png) ### (可选)开启魔法 仅限VMware虚拟机的本地linux。(公网就各显神通,看自己本事了)
可极大加快git安装速度 编辑配置文件 ```shell vim /etc/profile ``` 在该配置文件的最后添加代理配置
如果虚拟机是以NAT形式上网的
在**主机**的cmd输入 ```bash ipconfig ``` 寻找到`以太网适配器 VMware Network Adapter VMnet8`项
![image.png](img/1688383783766-effe1953-09ce-4f5d-b29d-50927de38d18.png)
填写这里的ipv4地址,端口就是magic的代理端口 ```bash export http_proxy='http://ip:port' //代理服务器ip地址和端口号 export https_proxy='http://ip:port' //代理服务器ip地址和端口号 ``` 退出profile文件并保存 ```bash source /etc/profile ``` ## 开始部署 将必须的[脚本](#NUIi2)和可选的[镜像](#ewwuh)复制到linux的`~`目录中,**后序的所有操作都是在**`~`**目录下进行**
注意:自动化脚本应在root权限下运行 ```bash su root ``` 修改文件权限 ```bash chmod u+x build.sh ``` 运行 ```bash source ./build.sh ``` 运行脚本后,首先选择部署模式
完成静默部署的前提是:要git的仓库必须是公开的,否则得手动输入账号密码
![image.png](img/1688384657545-14c4bc47-5edd-4132-ba29-0f9fb4db7386.png)
然后选择清理策略
选是的话,在项目部署完后,会清理掉所有相关文件,使得`~`目录与之前别无二致
![image.png](img/1688385364031-b084cc29-8993-427c-9d2f-c78f05c658cf.png)
之后就会自动进行项目部署,会依次进行: | 关闭防火墙 | | | --- | --- | | 安装gcc | | | 安装zlib | | | 安装git | 如果未设置魔法,则该项会耗时较长时间,大约在2min左右 | | 安装docker | 如果未设置阿里云的docker镜像,则该项之后的操作都会耗时非常长,甚至失败
如果使用了离线镜像的话,就无所谓了 | | 打包bi_frontend | 该项已设置了taobao镜像,但node_modules模块仍然有1G之多,耗时较长 | | 使用nginx部署bi_frontend | | | 部署mysql | | | 部署redis | | | 部署rabbitmq | 该项使用了命令来创建交换机、管道、绑定,不需要手动运行BiInitMain.java来进行初始化 | | 打包并部署bi_queue | 该项的maven下载依赖可能会失败(概率较低),即使设置了maven镜像仓库也是如此
该项是不稳定的一项 | | 打包并部署bi_backend | 该项的maven下载依赖可能会失败(概率较低),即使设置了maven镜像仓库也是如此
该项是不稳定的一项 | 最后项目部署完成输出: ```latex 项目完成部署完成 995s985ms rabbitmq管理用户为xxx,密码为xxx 网站测试用户为'testuser' '12345678' ``` # 其他 项目的测试用户是在create.sql里写死的(40行),可以自行更改
对于bi_frontend的nodejs,已隐式的设置了taobao镜像,提高下载速度,避免失败
对于bi_queue的maven,已隐式的设置了阿里云镜像,提高下载速度,尽量避免失败
对于bi_backend的maven,已隐式的设置了阿里云镜像,提高下载速度,尽量避免失败
bi_auto仓库:[https://gitee.com/hupoyinian/hp_bi_auto](https://gitee.com/hupoyinian/hp_bi_auto)
bi_backend仓库:[https://gitee.com/hupoyinian/hp_bi_backend](https://gitee.com/hupoyinian/hp_bi_backend)
bi_queue仓库:[https://gitee.com/hupoyinian/hp_bi_queue](https://gitee.com/hupoyinian/hp_bi_queue)
bi_frontend仓库:[https://gitee.com/hupoyinian/hp_bi_frontend](https://gitee.com/hupoyinian/hp_bi_frontend) # 改进 ## 未做文件检测 如果必要文件缺失,仍然可以运行,只是很多步骤会失败,最后用不了罢了 ## 未做项成功运行检测 应该为每一项是否运行成功做检测
比如git安装失败,就应该自动终止,而不是继续运行
毕竟都git不下来文件了,再运行也没用 # 问题 ## 项目左下角的名字乱码 原名字为:嗨嗨嗨
![image.png](img/1688386953341-f8b0b610-f333-4234-a80a-72c2b5470c56.png) # 文件们 ## redis.conf ```latex bind 0.0.0.0 protected-mode yes port redisport tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no pidfile /var/run/redis_6379.pid loglevel notice logfile "" databases 16 always-show-logo no set-proc-title yes proc-title-template "{title} {listen-addr} {server-mode}" stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb rdb-del-sync-files no dir ./ replica-serve-stale-data yes replica-read-only yes repl-diskless-sync yes repl-diskless-sync-delay 5 repl-diskless-sync-max-replicas 0 repl-diskless-load disabled repl-disable-tcp-nodelay no replica-priority 100 acllog-max-len 128 requirepass redispassword lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no lazyfree-lazy-user-del no lazyfree-lazy-user-flush no oom-score-adj no oom-score-adj-values 0 200 800 disable-thp yes appendonly no appendfilename "appendonly.aof" appenddirname "appendonlydir" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes aof-timestamp-enabled no slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-listpack-entries 512 hash-max-listpack-value 64 list-max-listpack-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-listpack-entries 128 zset-max-listpack-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4096 stream-node-max-entries 100 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes jemalloc-bg-thread yes ``` ## build.sh ```shell #!/usr/bin/env bash source config.sh mode=6 clear=6 #将文本特定行修改 #p1:目标行的特征语句 #p2:目标文件 #p3:目标语句 #$()返回0 function changeText() { line=$(sed -n "/$1/=" "$2") if test "$line" = "0"; then echo "$1参数修改失败" return fi str="${line}s/.*/$3/" echo "${str}" sed -i "${str}" "$2" } #检查指定文件是否存在 #p1:目标文件 #r: 1:存在 2:不存在 function fileExist() { if test -f "$1"; then echo "$1 exist" return 1 else echo "$1 no exist" return 0 fi } #部署前确认 #p1:mode部署模式 #p2:即将操作描述 function buildConfirm() { case $mode in 1) ;; 2) printf "\n5s后:%s\n\n" "$1" sleep 5s ;; 3) printf "\n即将%s\n\n" "$1" echo "输入任意字符确认" # shellcheck disable=SC2034 read -r temp ;; *) ;; esac } #执行时间计算 #p1:start时间 #p2:end时间 function getTiming() { start=$(($1 / 1000000)) end=$(($2 / 1000000)) timeT=$((end - start)) timeS="$((timeT / 1000))s$((timeT % 1000))ms" echo "$timeS" } #部署前确认 echo "部署模式:" echo " 1.完全静默(脚本会自动且安静的完成所有部署,注意:如果git仓库是私有的,需要必须手动输入账户与密码,无法做到完全静默!!)" echo " 2.部分提醒(每执行一步前,会有5秒的提示)" echo " 3.手动进行(每一步都需要手动确认)" echo " 0.退出部署(?)" read -r mode until [ "$mode" -ge 0 ] && [ "$mode" -le 3 ]; do echo "你输入的什么?" echo "重新键入" read -r mode done if test "$mode" -eq 0; then echo "bye~" exit fi echo "是否清理脚本运行文件以及中间产物?" echo " 1.是" echo " 2.否" echo " 0.润" read -r clear until [ "$clear" -ge 0 ] && [ "$clear" -le 2 ]; do echo "你输入的什么?" echo "重新键入" read -r clear done if test "$clear" -eq 0; then echo "bye~" exit fi project_start=$(date +%s%N) #关闭防火墙 buildConfirm "关闭防火墙" start=$(date +%s%N) systemctl stop firewalld systemctl disable firewalld echo "防火墙已关闭" end=$(date +%s%N) getTiming "$start" "$end" #安装gcc buildConfirm "安装gcc" start=$(date +%s%N) echo "正在安装gcc" sudo yum -y install gcc gcc-c++ kernel-devel #验证gcc gcc -v if test $? = "127"; then echo "gcc安装失败" exit 1 fi echo "gcc安装成功" end=$(date +%s%N) getTiming "$start" "$end" #安装zlib buildConfirm "安装zlib" start=$(date +%s%N) echo "正在安装zlib" yum install -y zlib-devel.x86_64 echo "zlib安装成功" end=$(date +%s%N) getTiming "$start" "$end" #安装git buildConfirm "安装git" echo "正在安装git" start=$(date +%s%N) wget --no-check-certificate https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.7.0.tar.gz #这两个组件提供 remote-http 命令 yum install -y libcurl-devel yum install -y curl-devel #这个组件提供其他命令 yum install -y perl-devel tar -zxf git-2.7.0.tar.gz cd git-2.7.0 ./configure --prefix=/usr/local/git make && make install echo "export PATH=$PATH:/usr/local/git/bin" >>~/.bashrc echo "export PATH=$PATH:/usr/local/git/libexec/git-core" >>~/.bashrc source ~/.bashrc git version #git验证 if test $? = "127"; then echo "git安装失败" exit 1 fi echo "git安装成功" if test "$clear" -eq 1; then cd ~ rm -rf git-2.7.0.tar.gz rm -rf git-2.7.0 fi end=$(date +%s%N) getTiming "$start" "$end" cd ~ #安装docker buildConfirm "安装docker" echo "正在安装docker" start=$(date +%s%N) curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun #配置docker镜像加速 length=${#docker_aliyun_image} if test "$length" -ge 20; then echo "{\"registry-mirrors\":[\"$docker_aliyun_image\"]}" >/etc/docker/daemon.json fi #重启docker sudo systemctl daemon-reload sudo systemctl restart docker echo "docker安装成功" end=$(date +%s%N) getTiming "$start" "$end" cd ~ #bi_frontend #需要的文件:nodejs_16.tar buildConfirm "打包bi_frontend" echo "正在打包bi_frontend" start=$(date +%s%N) git clone $git_bi_frontend cd hp_bi_frontend/src changeText "baseURL" "app.tsx" " baseURL: \"http:\/\/${bi_backend_ip}:${bi_backend_port}\"," cd ~ #手动加载镜像node:16-alpine3.17 fileExist "./nodejs_16.tar" if test $? -eq 0; then docker pull node:16-alpine3.17 else docker load -i nodejs_16.tar fi echo "FROM node:16-alpine3.17" >./BI_frontend_Dockerfile echo "WORKDIR /app" >>./BI_frontend_Dockerfile echo "COPY ./hp_bi_frontend ." >>./BI_frontend_Dockerfile echo "RUN npm install --silent --no-cache --registry=https://registry.npm.taobao.org \ && npm run build \ && tar -czf dist.tar.gz dist" >>./BI_frontend_Dockerfile docker build -f ./BI_frontend_Dockerfile -t bi-frontend:test . docker run --name bi_frontend_service -d bi-frontend:test /bin/bash docker cp bi_frontend_service:/app/dist.tar.gz . docker kill bi_frontend_service docker rm bi_frontend_service echo "bi_frontend打包完成" if test "$clear" -eq 1; then cd ~ rm -rf hp_bi_frontend rm -rf nodejs_16.tar rm -rf BI_frontend_Dockerfile fi end=$(date +%s%N) getTiming "$start" "$end" cd ~ #部署nginx #需要的文件:nginx.tar,nginx.conf buildConfirm "使用nginx部署bi_frontend" echo "正在部署nginx" start=$(date +%s%N) #修改nginx.conf的listen、server_name、server_name changeText "nginxlisten" "nginx.conf" " listen $bi_frontend_port; " changeText "nginxservername" "nginx.conf" " server_name $bi_frontend_server_name;" changeText "nginxapiproxypass" "nginx.conf" " proxy_pass http:\/\/$bi_backend_ip:$bi_backend_port\/;" tar -zxvf dist.tar.gz mv dist html dir=$(pwd) fileExist "./nginx.tar" if test $? -eq 0; then docker pull nginx:latest else docker load -i nginx.tar fi docker run --name nginx_service -p $bi_frontend_port:$bi_frontend_port -d nginx docker exec nginx_service rm -rf /etc/nginx/conf.d/default.conf docker cp "$dir"/nginx.conf nginx_service:/etc/nginx/conf.d/nginx.conf docker exec nginx_service rm -rf /usr/share/nginx/html docker cp "$dir"/html nginx_service:/usr/share/nginx docker exec nginx_service nginx -s reload echo "nginx部署成功" if test "$clear" -eq 1; then cd ~ rm -rf nginx.conf rm -rf dist.tar.gz rm -rf nginx.tar rm -rf html fi end=$(date +%s%N) getTiming "$start" "$end" cd ~ #部署mysql #需要的文件:mysql_latest.tar,create.sql buildConfirm "部署mysql" echo "正在部署mysql" start=$(date +%s%N) echo "CREATE USER '$mysql_username'@'%' IDENTIFIED BY '@mysql_password';" >./Permission.sql echo "GRANT ALL ON *.* TO '$mysql_username'@'%';" >>./Permission.sql echo "ALTER USER '$mysql_username'@'%' IDENTIFIED BY '$mysql_password' PASSWORD EXPIRE NEVER;" >>./Permission.sql echo "ALTER USER '$mysql_username'@'%' IDENTIFIED WITH mysql_native_password BY '$mysql_password';" >>./Permission.sql echo "flush privileges;" >>./Permission.sql fileExist "./mysql_latest.tar" if test $? -eq 0; then docker pull mysql:latest else docker load -i mysql_latest.tar fi dir=$(pwd) docker run --name mysql_service -v "$dir"/Permission.sql:/docker-entrypoint-initdb.d/Permission.sql -v "$dir"/create.sql:/docker-entrypoint-initdb.d/create.sql -p $mysql_port:$mysql_port -e MYSQL_ROOT_PASSWORD=$mysql_password -d mysql echo "mysql部署成功" if test "$clear" -eq 1; then cd ~ rm -rf Permission.sql rm -rf mysql_latest.tar rm -rf create.sql fi end=$(date +%s%N) getTiming "$start" "$end" cd ~ #部署redis #需要的文件:redis_7.0.11.tar,redis.conf buildConfirm "部署redis" echo "正在部署redis" start=$(date +%s%N) changeText "redisport" "redis.conf" "port $redis_port" changeText "redispassword" "redis.conf" "requirepass $redis_password" fileExist "./redis_7.0.11.tar" if test $? -eq 0; then docker pull redis:7.0.11 else docker load -i redis_7.0.11.tar fi dir=$(pwd) docker create --name redis_service -p $redis_port:$redis_port redis:7.0.11 redis-server /data/redis.conf --appendonly yes docker cp "$dir"/redis.conf redis_service:/data/redis.conf docker start redis_service echo "redis部署成功" if test "$clear" -eq 1; then cd ~ rm -rf redis.conf rm -rf redis_7.0.11.tar fi end=$(date +%s%N) getTiming "$start" "$end" cd ~ #部署rabbitmq #需要的文件:rabbit_management.tar, buildConfirm "部署rabbitmq" echo "正在部署rabbitmq" start=$(date +%s%N) fileExist "./rabbit_management.tar" if test $? -eq 0; then docker pull rabbitmq:management else docker load -i rabbit_management.tar fi docker run --name rabbitmq_service -p $rabbitmq_port:$rabbitmq_port -p $rabbitmq_management_port:$rabbitmq_management_port -d rabbitmq:management #用户初始化 sleep 10s docker exec rabbitmq_service rabbitmqctl delete_user 'guest' docker exec rabbitmq_service rabbitmqctl add_user $rabbitmq_user $rabbitmq_password docker exec rabbitmq_service rabbitmqctl set_user_tags $rabbitmq_user administrator docker exec rabbitmq_service rabbitmqctl set_permissions -p '/' "$rabbitmq_user" '.*' '.*' '.*' docker exec rabbitmq_service rabbitmqadmin --vhost=/ --username=$rabbitmq_user --password=$rabbitmq_password declare exchange name=bi_exchange type=direct docker exec rabbitmq_service rabbitmqadmin --vhost=/ --username=$rabbitmq_user --password=$rabbitmq_password declare queue name=bi_queue durable=true auto_delete=false docker exec rabbitmq_service rabbitmqadmin --vhost=/ --username=$rabbitmq_user --password=$rabbitmq_password declare binding source=bi_exchange destination_type=queue destination=bi_queue routing_key=bi_routingKey end=$(date +%s%N) getTiming "$start" "$end" echo "rabbitmq部署成功" if test "$clear" -eq 1; then cd ~ rm -rf rabbit_management.tar fi echo "新用户为$rabbitmq_user,密码为$rabbitmq_password" cd ~ #拉取项目,并打包镜像 #bi_queue #需要的文件:mavne_3.8.5_jdk17.tar,settings.xml buildConfirm "打包并部署bi_queue" echo "正在打包bi_queue镜像" start=$(date +%s%N) fileExist "./mavne_3.8.5_jdk17.tar" if test $? -eq 0; then docker pull maven:3.8.5-eclipse-temurin-17-alpine else docker load -i mavne_3.8.5_jdk17.tar fi git clone $git_bi_queue cd hp_bi_queue/src/main/resources #修改mysql的ip:port、username、password changeText "jdbc:mysql" "application.yml" " url: jdbc:mysql:\/\/$mysql_ip:$mysql_port\/bi_xiangmu?useSSL=false" changeText "mysqlusername" "application.yml" " username: $mysql_username" changeText "mysqlpassword" "application.yml" " password: $mysql_password" #修改rabbitmq的host、port、username、password changeText "rabbitmqhost" "application.yml" " host: $rabbitmq_host" changeText "rabbitmqport" "application.yml" " port: $rabbitmq_port" changeText "rabbitmqusername" "application.yml" " username: $rabbitmq_user" changeText "rabbitmqpassword" "application.yml" " password: $rabbitmq_password" #修改该项目的port changeText "biqueueport" "application.yml" " port: $bi_queue_port" #修改鱼api的ak、sk changeText "yuapiak" "application.yml" " access-key: $yuapi_ak" changeText "yuapisk" "application.yml" " secret-key: $yuapi_sk" cd ~ echo "FROM maven:3.8.5-eclipse-temurin-17-alpine" >./BI_queue_Dockerfile echo "WORKDIR /app" >>./BI_queue_Dockerfile echo "COPY ./hp_bi_queue/pom.xml ." >>./BI_queue_Dockerfile echo "COPY ./hp_bi_queue/src ./src" >>./BI_queue_Dockerfile #准备一个maven的镜像配置文件 echo "COPY ./settings.xml /root/.m2/settings.xml" >>./BI_queue_Dockerfile echo "RUN mvn package -DskipTests" >>./BI_queue_Dockerfile echo "CMD [\"java\",\"-jar\",\"./target/bi-queue-0.0.1-SNAPSHOT.jar\",\"--spring.profiles.active=prod\"]" >>./BI_queue_Dockerfile docker build -f ./BI_queue_Dockerfile -t bi-queue:0.0.1 . docker run --name bi_queue_service -p $bi_queue_port:$bi_queue_port -d bi-queue:0.0.1 echo "bi_queue镜像打包并运行成功" if test "$clear" -eq 1; then cd ~ rm -rf hp_bi_queue rm -rf BI_queue_Dockerfile fi end=$(date +%s%N) getTiming "$start" "$end" cd ~ #bi_backend #需要的文件:settings.xml buildConfirm "打包并部署bi_backend" echo "正在打包bi_backend镜像" start=$(date +%s%N) git clone $git_bi_backend cd hp_bi_backend/src/main/resources #修改mysql的ip:port、username、password changeText "jdbc:mysql" "application.yml" " url: jdbc:mysql:\/\/$mysql_ip:$mysql_port\/bi_xiangmu?useSSL=false" changeText "mysqlusername" "application.yml" " username: $mysql_username" changeText "mysqlpassword" "application.yml" " password: $mysql_password" #修改redis的host、port、password changeText "redishost" "application.yml" " host: $redis_host" changeText "redisport" "application.yml" " port: $redis_port" changeText "redispassword" "application.yml" " password: $redis_password" #修改rabbitmq的host、port、username、password changeText "rabbitmqhost" "application.yml" " host: $rabbitmq_host" changeText "rabbitmqport" "application.yml" " port: $rabbitmq_port" changeText "rabbitmqusername" "application.yml" " username: $rabbitmq_user" changeText "rabbitmqpassword" "application.yml" " password: $rabbitmq_password" #修改该项目的port changeText "bibackendport" "application.yml" " port: $bi_backend_port" #修改鱼api的ak、sk changeText "yuapiak" "application.yml" " access-key: $yuapi_ak" changeText "yuapisk" "application.yml" " secret-key: $yuapi_sk" cd ~ echo "FROM maven:3.8.5-eclipse-temurin-17-alpine" >./BI_backend_Dockerfile echo "WORKDIR /app" >>./BI_backend_Dockerfile echo "COPY ./hp_bi_backend/pom.xml ." >>./BI_backend_Dockerfile echo "COPY ./hp_bi_backend/src ./src" >>./BI_backend_Dockerfile #准备一个maven的镜像配置文件 echo "COPY ./settings.xml /root/.m2/settings.xml" >>./BI_backend_Dockerfile echo "RUN mvn package -DskipTests" >>./BI_backend_Dockerfile echo "CMD [\"java\",\"-jar\",\"./target/bi-backend-0.0.1-SNAPSHOT.jar\",\"--spring.profiles.active=prod\"]" >>./BI_backend_Dockerfile docker build -f ./BI_backend_Dockerfile -t bi-backend:0.0.1 . docker run --name bi_backend_service -p $bi_backend_port:$bi_backend_port -d bi-backend:0.0.1 echo "bi_backend镜像打包并运行成功" if test "$clear" -eq 1; then cd ~ rm -rf mavne_3.8.5_jdk17.tar rm -rf settings.xml rm -rf hp_bi_backend rm -rf BI_backend_Dockerfile fi end=$(date +%s%N) getTiming "$start" "$end" cd ~ echo "项目完成部署完成" if test "$clear" -eq 1; then cd ~ rm -rf config.sh rm -rf build.sh fi project_end=$(date +%s%N) getTiming "$project_start" "$project_end" echo "rabbitmq管理用户为$rabbitmq_user,密码为$rabbitmq_password" echo "网站测试用户为'testuser' '12345678'" #BI_backend_Dockerfile:6 #-------------------- # 4 | COPY ./hp_bi_backend/src ./src # 5 | COPY ./settings.xml /root/.m2/settings.xml # 6 | >>> RUN mvn package -DskipTests # 7 | CMD ["java","-jar","./target/bi-backend-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"] # 8 | #-------------------- #ERROR: failed to solve: process "/bin/sh -c mvn package -DskipTests" did not complete successfully: exit code: 1 ``` ## nginx.conf ```latex server { #监听端口和域名 listen nginxlisten; server_name nginxservername; #添加头部信息 #proxy_set_header Cookie $http_cookie; #proxy_set_header X-Forwarded-Host $host; #proxy_set_header X-Forwarded-Server $host; #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #添加拦截路径和代理地址 location /api/ { proxy_pass nginxapiproxypass; } #添加拦截路径和根目录 location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html; } } ``` ## settings.xml ```xml /usr/share/maven/ref/repository alimaven aliyun maven https://maven.aliyun.com/nexus/content/repositories/central/ central junit junit Address/ http://jcenter.bintray.com/ central mirrorId central Human Readable Name http://repo1.maven.org/maven2/ ``` ## create.sql ```plsql -- 创建库 create database if not exists bi_xiangmu; -- 切换库 use bi_xiangmu; -- 用户表 create table if not exists user ( id bigint auto_increment comment 'id' primary key, userAccount varchar(256) not null comment '账号', userPassword varchar(512) not null comment '密码', userName varchar(256) null comment '用户昵称', userAvatar varchar(1024) null comment '用户头像', userRole varchar(256) default 'user' not null comment '用户角色:user/admin', createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间', updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间', isDelete tinyint default 0 not null comment '是否删除', index ind_userAccount (userAccount) ) comment '用户' collate = utf8mb4_unicode_ci; -- 图表信息表 create table if not exists chart ( id bigint auto_increment comment 'id' primary key, goal text null comment '分析目标', `name` varchar(128) null comment '图表名称', chartData text null comment '图表数据', chartType varchar(128) null comment '图表类型', genChart text null comment '生成的图表数据', genResult text null comment '生成的分析结论', status varchar(128) default 'wait' not null comment 'wait,running,succeed,failed', execMessage text null comment '执行信息', userId bigint null comment '创建用户id', createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间', updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间', isDelete tinyint default 0 not null comment '是否删除' ) comment '图表信息表' collate = utf8mb4_unicode_ci; insert into `user` (`id`, `userAccount`, `userPassword`, `userName`, `userAvatar`, `userRole`, `createTime`, `updateTime`, `isDelete`) values('1677329879382142977','testuser','9710c945062180c8f53e61c5e6523594','嗨嗨嗨',' https://himg.bdimg.com/sys/portrait/item/pp.1.f8935f85.Doze4zaABPc92wxH3z_JNA?_t=1684462904344','user','2023-05-18 10:23:35','2023-05-19 10:22:13','0'); ``` ## config.sh ```bash docker_aliyun_image="" #docker的阿里云镜像 git_bi_queue="https://gitee.com/hupoyinian/hp_bi_queue.git" #bi_queue项目git地址 git_bi_backend="https://gitee.com/hupoyinian/hp_bi_backend.git" #bi_backend项目git地址 git_bi_frontend="https://gitee.com/hupoyinian/hp_bi_frontend.git" #bi_frontend项目git地址 # mysql_ip="xxx.xxx.xxx.xxx" #mysql服务所在的ip mysql_port="3306" #mysql服务所在的port mysql_username="root" #mysql服务的username mysql_password="123456" #mysql服务的password # redis_host="xxx.xxx.xxx.xxx" #redis服务所在的ip redis_port="6379" #redis服务所在的port redis_password="123456" #redis服务的password # rabbitmq_host="xxx.xxx.xxx.xxx" #rabbitmq服务所在的ip rabbitmq_port="5672" #rabbitmq服务所在的port rabbitmq_management_port="15672" #rabbitmq服务管理UI所在的port rabbitmq_user="root" #rabbitmq服务的username rabbitmq_password="123456" #rabbitmq服务的password # bi_queue_port="8103" #bi_queue项目的port bi_backend_ip="xxx.xxx.xxx.xxx" #bi_backend项目的ip bi_backend_port="8081" #bi_backend项目的port bi_frontend_port="80" #bi_frontend项目的port bi_frontend_server_name="xxx" #bi_frontend项目的域名 # yuapi_ak="xxx" #鱼聪明api的ak yuapi_sk="xxx" #鱼聪明api的sk # #bi_backend_rabbitmq_BI_EXCHANGE_NAME="bi_exchange" #没用 #bi_backend_rabbitmq_BI_QUEUE_NAME="bi_queue" #没用 #bi_backend_rabbitmq_BI_ROUTING_KEY="bi_routingKey" #没用 ```