- #安装MySQL服务
- [root@Services ~]# yum clean all; yum repolist -v
- ...
- Total packages: 8,265
- [root@Services ~]# yum -y install mysql.x86_64 mysql-server.x86_64 mysql-devel.x86_64
- ...
- Complete!
- [root@Services ~]#
-
- #启动MySQL服务
- [root@Services ~]# systemctl enable mysqld #设置MySQL服务开机自启动
- [root@Services ~]# systemctl start mysqld #启动MySQL服务
- [root@Services ~]# ss -antpul | grep mysql #确认3306端口被监听
- tcp LISTEN 0 70 *:33060 *:* users:(("mysqld",pid=6875,fd=22))
- tcp LISTEN 0 128 *:3306 *:* users:(("mysqld",pid=6875,fd=25))
- [root@Services ~]#
-
- #初始化MySQL服务
- [root@Services ~]# mysql
- mysql> ALTER USER root@'localhost' IDENTIFIED BY 'Tarena'; #设置root用户密码
- Query OK, 0 rows affected (0.00 sec)
-
- mysql> exit
- Bye
- [root@Services ~]# mysql -hlocalhost -uroot -p'Tarena' -e "STATUS;"
- mysql: [Warning] Using a password on the command line interface can be insecure.
- --------------
- mysql Ver 8.0.26 for Linux on x86_64 (Source distribution)
-
- Connection id: 9
- Current database:
- Current user: root@localhost
- SSL: Not in use
- Current pager: stdout
- Using outfile: ''
- Using delimiter: ;
- Server version: 8.0.26 Source distribution
- Protocol version: 10
- Connection: Localhost via UNIX socket
- Server characterset: utf8mb4
- Db characterset: utf8mb4
- Client characterset: utf8mb4
- Conn. characterset: utf8mb4
- UNIX socket: /var/lib/mysql/mysql.sock
- Binary data as: Hexadecimal
- Uptime: 2 min 0 sec
-
- Threads: 2 Questions: 9 Slow queries: 0 Opens: 130 Flush tables: 3 Open tables: 46 Queries per second avg: 0.075
- --------------
-
- [root@Services ~]#
-
- #创建HIS项目数据库
- [root@Services ~]# mysql -hlocalhost -uroot -p'Tarena'
- mysql> CREATE DATABASE his; #创建his库
- Query OK, 1 row affected (0.00 sec)
-
- mysql> CREATE USER 'his'@'192.168.88.60' IDENTIFIED BY 'hisadmin'; #创建his用户
- Query OK, 0 rows affected (0.01 sec)
-
- mysql> GRANT ALL ON his.* TO 'his'@'192.168.88.60'; #授权his用户
- Query OK, 0 rows affected (0.00 sec)
-
- mysql> SHOW GRANTS FOR 'his'@'192.168.88.60'; #查看his用户权限
- +----------------------------------------------------------+
- | Grants for his@192.168.88.60 |
- +----------------------------------------------------------+
- | GRANT USAGE ON *.* TO `his`@`192.168.88.60` |
- | GRANT ALL PRIVILEGES ON `his`.* TO `his`@`192.168.88.60` |
- +----------------------------------------------------------+
- 2 rows in set (0.00 sec)
-
- mysql> exit
- Bye
- [root@Services ~]#
-
- #导入HIS项目SQL
- [root@Services ~]# ls his.sql
- his.sql
- [root@Services ~]# mysql -hlocalhost -uroot -p'Tarena' his < his.sql
- mysql: [Warning] Using a password on the command line interface can be insecure.
- [root@Services ~]# mysql -hlocalhost -uroot -p'Tarena' -e "SHOW TABLES FROM his;"
- mysql: [Warning] Using a password on the command line interface can be insecure.
- +----------------------------------+
- | Tables_in_his |
- +----------------------------------+
- | bms_bills_record |
- | bms_invoice_exp |
- | bms_invoice_record |
- | bms_operator_settle_record |
- | bms_settlement_cat |
- | dms_case_history |
- | dms_case_model |
- | dms_case_model_catalog |
- | dms_dise |
- | dms_dise_catalog |
- | dms_dosage |
- | dms_drug |
- | dms_drug_model |
- | dms_drug_refund_item_record |
- | dms_herbal_item_record |
- | dms_herbal_model_item |
- | dms_herbal_prescription_record |
- | dms_medicine_item_record |
- | dms_medicine_model_item |
- | dms_medicine_prescription_record |
- | dms_non_drug |
- | dms_non_drug_item_record |
- | dms_non_drug_model |
- | dms_registration |
- | pms_patient |
- | sms_dept |
- | sms_description |
- | sms_frequent_used |
- | sms_login_log |
- | sms_permission |
- | sms_registration_rank |
- | sms_role |
- | sms_role_permission_relation |
- | sms_skd |
- | sms_skd_rule |
- | sms_skd_rule_item |
- | sms_staff |
- | sms_workload_record |
- +----------------------------------+
- [root@Services ~]#
- #安装Redis服务
- [root@Services ~]# yum -y install redis.x86_64
-
- #配置Redis服务
- [root@Services ~]# vim /etc/redis.conf
- [root@Services ~]# sed -rn '69p;88p;507p' /etc/redis.conf
- bind 0.0.0.0 #监听本地所有网络
- protected-mode no #关闭保护模式
- requirepass hisadmin #设置redis访问密码
- [root@Services ~]#
-
- #启动Redis服务
- [root@Services ~]# systemctl enable redis.service #设置Redis服务开机自启动
- [root@Services ~]# systemctl start redis.service #启动Redis服务
- [root@Services ~]# ss -antpul | grep redis #确认6379端口被监听
- tcp LISTEN 0 128 0.0.0.0:6379 0.0.0.0:* users:(("redis-server",pid=7839,fd=6))
- [root@Services ~]#
-
- #测试Redis服务
- [root@Services ~]# redis-cli -h localhost -p 6379 -a hisadmin info


配置Git工具

配置Maven工具
- #Jenkins主机安装Maven
- [root@Jenkins ~]# ls apache-maven-3.6.3-bin.tar.gz
- apache-maven-3.6.3-bin.tar.gz
- [root@Jenkins ~]# tar -xf apache-maven-3.6.3-bin.tar.gz #解包
- [root@Jenkins ~]# mv apache-maven-3.6.3 /usr/local/maven #移动到指定目录
- [root@Jenkins ~]# ls /usr/local/maven/
- bin boot conf lib LICENSE NOTICE README.txt
- [root@Jenkins ~]#
-
- #配置Maven环境变量
- [root@Jenkins ~]# vim /etc/bashrc #修改bash环境配置
- [root@Jenkins ~]# tail -2 /etc/bashrc
- export MAVEN_HOME="/usr/local/maven/" #声明MAVEN_HOME变量
- export PATH=${MAVEN_HOME}/bin/:$PATH #将MAVEN命令加入PATH
- [root@Jenkins ~]# source /etc/bashrc #刷新bash环境
- [root@Jenkins ~]# echo ${MAVEN_HOME} #测试变量声明
- /usr/local/maven/
- [root@Jenkins ~]# mvn -v #测试mvn命令
- Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
- Maven home: /usr/local/maven
- Java version: 11.0.15, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-11-openjdk-11.0.15.0.9-2.el8_5.x86_64
- Default locale: en_US, platform encoding: UTF-8
- OS name: "linux", version: "4.18.0-372.9.1.el8.x86_64", arch: "amd64", family: "unix"
- [root@Jenkins ~]#
-
- #部署Maven本地仓库
- [root@Jenkins ~]# ls repository.tar.gz
- repository.tar.gz
- [root@Jenkins ~]# tar -xPpf repository.tar.gz -C / #解压Maven仓库
- [root@Jenkins ~]# ls /var/lib/jenkins/.m2/
- repository
- [root@Jenkins ~]# ls /var/lib/jenkins/.m2/repository/
- aopalliance classworlds commons-beanutils commons-io de joda-time net
- backport-util-concurrent cn commons-codec commons-lang io junit org
- ch com commons-collections commons-logging javax mysql
- [root@Jenkins ~]#

- #启动邮件服务
- [root@Jenkins ~]# systemctl enable postfix.service
- [root@Jenkins ~]# systemctl start postfix
- [root@Jenkins ~]# ss -antpul | grep master
- tcp LISTEN 0 100 127.0.0.1:25 0.0.0.0:* users:(("master",pid=1203,fd=13))
- tcp LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=1203,fd=14))
- [root@Jenkins ~]#


- #确认邮件接收情况
- [root@Jenkins ~]# yum -y install mailx #安装邮件客户端命令
- Complete!
- [root@Jenkins ~]# mail -u root #查看root用户邮件
- Heirloom Mail version 12.5 7/5/10. Type ? for help.
- "/var/mail/root": 1 message 1 new
- >N 1 没有配置邮箱地址 Fri Feb 24 12:04 18/640 "Test email #4"
- & 1
- Message 1: #查看邮件内容
- From nobody@nowhere Fri Feb 24 12:04:20 2023
- Return-Path: <nobody@nowhere>
- X-Original-To: root
- Delivered-To: root@Jenkins.localdomain
- Date: Fri, 24 Feb 2023 12:04:20 +0800 (CST)
- From: 没有配置邮箱地址 <nobody@nowhere>
- To: root@Jenkins.localdomain
- Subject: Test email #4
- Content-Type: text/plain; charset=UTF-8
- Status: R
-
- This is test email #4 sent from Jenkins
-
- & quit
- Held 1 message in /var/mail/root
- [root@Jenkins ~]#






- #Maven打包参数:Maven执行打包操作时需要调用pom.xml文件,所以需要指定pom.xml文件位置
- clean package -Dmaven.test.skip=true #清理旧文件、跳过测试直接打包
测试HIS-BACKEND工程构建



- #Jenkins主机确认HIS-BACKEND构建情况
- [root@Jenkins ~]# ls /var/lib/jenkins/workspace/ #确认拉取HIS-BACKEND代码
- HIS-BACKEND HIS-FONTEND
- [root@Jenkins ~]# ls /var/lib/jenkins/workspace/HIS-BACKEND/
- HIS-api HIS-common HIS-demo HIS-mbg HIS-service pom.xml
- [root@Jenkins ~]# ls /var/lib/jenkins/workspace/HIS-BACKEND/HIS-api/
- mvnw mvnw.cmd pom.xml src target
- [root@Jenkins ~]# ls /var/lib/jenkins/workspace/HIS-BACKEND/HIS-api/target/ #确认打包
- classes generated-sources HIS-api-1.0-SNAPSHOT.jar HIS-api-1.0-SNAPSHOT.jar.original maven-archiver maven-status
- [root@Jenkins ~]#
-
- #清理HIS-BACKEND本次构建
- [root@Jenkins ~]# rm -rf /var/lib/jenkins/workspace/HIS-BACKEND/
- [root@Jenkins ~]#


HIS-BACKEND工程配置自动发布




- #安装OpenJDK-1.8
- [root@Backend ~]# yum clean all; yum repolist -v
- ...
- Total packages: 8,265
- [root@Backend ~]# yum -y install java-1.8.0-openjdk-devel.x86_64 #安装jdk-1.8
-
- #配置JDK环境变量
- [root@Backend ~]# ln -s /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.332.b09-1.el8_5.x86_64/ /usr/lib/jvm/jdk #制作软链接
- [root@Backend ~]# vim /etc/bashrc #配置JAVA相关环境变量
- [root@Backend ~]# tail -3 /etc/bashrc
- export JAVA_HOME="/usr/lib/jvm/jdk/" #声明JAVA_HOME
- export PATH=${JAVA_HOME}/bin/:$PATH #将JAVA_HOME加入PATH
- export CLASSPATH=. #声明类库路径
- [root@Backend ~]# source /etc/bashrc #刷新bash环境
- [root@Backend ~]# echo ${JAVA_HOME} #测试变量声明
- /usr/lib/jvm/jdk/
- [root@Backend ~]# java -version
- openjdk version "1.8.0_332"
- OpenJDK Runtime Environment (build 1.8.0_332-b09)
- OpenJDK 64-Bit Server VM (build 25.332-b09, mixed mode)
- [root@Backend ~]#
- #HIS项目采用外置配置文件方式
- [root@Backend ~]# mkdir /opt/his/
- [root@Backend ~]# scp 192.168.88.10:/root/HIS/HIS-CONFIG/*.yml /opt/his/
- application-prod.yml 100% 2690 912.9KB/s 00:00
- application.yml 100% 257 374.1KB/s 00:00
- [root@Backend ~]# ls /opt/his/
- application-prod.yml application.yml
- [root@Backend ~]#


- #Jenkins主机确认HIS-BACKEND打包成功
- [root@Jenkins ~]# ls /var/lib/jenkins/workspace/HIS-BACKEND/HIS-api/target/HIS-api-1.0-SNAPSHOT.jar
- /var/lib/jenkins/workspace/HIS-BACKEND/HIS-api/target/HIS-api-1.0-SNAPSHOT.jar
- [root@Jenkins ~]#
-
- #Backend主机确认jar包发布情况
- [root@Backend ~]# ls /opt/his/
- application-prod.yml application.yml HIS-api-1.0-SNAPSHOT.jar
- [root@Backend ~]#
-
- #手工运行jar包测试HIS后端程序
- [root@Backend his]# java -jar HIS-api-1.0-SNAPSHOT.jar #前台进程
- /opt/his/.
-
- . ____ _ __ _ _
- /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
- ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
- \\/ ___)| |_)| | | | | || (_| | ) ) ) )
- ' |____| .__|_| |_|_| |_\__, | / / / /
- =========|_|==============|___/=/_/_/_/
- :: Spring Boot :: (v2.1.3.RELEASE)
- ...
- 2023-02-24 13:00:24.881 INFO 9629 --- [ main] com.neu.his.HisApiApplication : Started HisApiApplication in 13.82 seconds (JVM running for 14.352)
-
-
- #另开终端验证
- [root@Backend ~]# ss -antpu | grep :8888 #确认8888端口被监听
- tcp LISTEN 0 100 *:8888 *:* users:(("java",pid=9629,fd=63))
- [root@Backend ~]# ss -antpu | grep java
-
- #访问测试
- [root@Backend ~]# curl http://localhost:8888
- DOCTYPE html>
- <html lang="cn">
- <head>
- <meta charset="UTF-8">
- <title>Title
- head>
- <body>
- <h1>HIS
- body>
- html>[root@Backend ~]# curl http://localhost:8888/actuator/health?pretty
- {"status":"UP","details":{"rabbit":{"status":"UP","details":{"version":"3.11.5"}},"diskSpace":{"status":"UP","details":{"total":10725883904,"free":8431407104,"threshold":10485760}},"db":{"status":"UP","details":{"database":"MySQL","hello":1}},"elasticsearch":{"status":"UP","details":{"clusterName":"elasticsearch","numberOfNodes":1,"numberOfDataNodes":1,"activePrimaryShards":22,"activeShards":22,"relocatingShards":0,"initializingShards":0,"unassignedShards":20}},"elasticsearchRest":{"status":"UP","details":{"cluster_name":"elasticsearch","status":"yellow","timed_out":false,"number_of_nodes":1,"number_of_data_nodes":1,"active_primary_shards":22,"active_shards":22,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":20,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":52.38095238095239}},"redis":{"status":"UP","details":{"version":"5.0.3"}}}}[root@Backend ~]#
- #修改his.conf虚拟主机配置
- [root@Fontend ~]# vim /etc/nginx/conf.d/his.conf
- [root@Fontend ~]# cat /etc/nginx/conf.d/his.conf
- server {
- listen 80 default_server;
- server_name __;
- access_log "/opt/his/log/$host.log";
-
- location / {
- root "/opt/his/web/";
- index index.html index.htm;
- }
- #配置api转发
- location /prod-api/ {
- proxy_pass http://192.168.88.60:8888/;
- }
- }
- [root@Fontend ~]# systemctl restart nginx.service #重启nginx服务
- [root@Fontend ~]# ss -antpul | grep nginx
- tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=952,fd=6),("nginx",pid=951,fd=6),("nginx",pid=950,fd=6))
- [root@Fontend ~]#
- #确保HIS后端程序正常运行
- [root@Fontend ~]# curl http://192.168.88.60:8888/
- <!DOCTYPE html>
- <html lang="cn">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <h1>HIS</h1>
- </body>
- </html>
- [root@Fontend ~]#
-
- #浏览器访问HIS前端页面:http://192.168.88.70/

- #手工清理Jenkins工作目录
- [root@Jenkins ~]# rm -rf /var/lib/jenkins/workspace/*
- [root@Jenkins ~]#
- #更新HIS-FONTEND工程
- 1、构建前清理/opt/his/web/下原有代码
- 2、构建后自动解压fontend.tar.gz压缩包
- 3、删除fontend.tar.gz压缩包
-
- #构建前操作
- rm -rf /opt/his/web/* #清理旧版本文件
-
- #构建后操作
- cd /opt/his/web/ #切换到前端代码存放目录
- tar -xf fontend.tar.gz #解压fontend.tar.gz压缩包
- rm -rf fontend.tar.gz #清理fontend.tar.gz压缩包






后端全流程
- #更新HIS-FONTEND工程
- 1、构建前终止HIS后端jar进程
- 2、清理/opt/his/目录下原有jar包
- 3、发送jar后远程启动jar包
-
- #构建前操作
- jps | grep jar | awk '{print $1}' | xargs kill #查找HIS后端jar包pid并杀死进程
- rm -rf /opt/his/HIS-api-1.0-SNAPSHOT.jar #清理旧版本jar包
-
- #构建后操作
- cd /opt/his/ #切换到jar包目录
- nohup java -jar HIS-api-1.0-SNAPSHOT.jar > ./his.log 2>&1 & #后台启动jar包






- #查看现有首页内容,注意title内容为"东软云"
- [root@Fontend ~]# vim /opt/his/web/index.html
- [root@Fontend ~]#
-
- #Programer主机更新前端代码,title更新为"达内云"
- [root@Programer HIS-FONTEND]# vim index.html #修改title内容
- [root@Programer HIS-FONTEND]#
-
- [root@Programer HIS-FONTEND]# git add ./ #添加修改到暂存区
- [root@Programer HIS-FONTEND]# git commit -m "modify index.html" #生成新版本
- [master 33da040] modify index.html
- 1 file changed, 1 insertion(+), 1 deletion(-)
- [root@Programer HIS-FONTEND]# git tag v2 #打v2标签
- [root@Programer HIS-FONTEND]# git push #推送分支到服务器
- 枚举对象中: 5, 完成.
- 对象计数中: 100% (5/5), 完成.
- 使用 2 个线程进行压缩
- 压缩对象中: 100% (3/3), 完成.
- 写入对象中: 100% (3/3), 345 字节 | 345.00 KiB/s, 完成.
- 总共 3(差异 1),复用 0(差异 0),包复用 0
- To http://192.168.88.20/devops/HIS-FONTEND.git
- 2c9f9bb..33da040 master -> master
- [root@Programer HIS-FONTEND]# git push --tags #推送标签到服务器
- 总共 0(差异 0),复用 0(差异 0),包复用 0
- To http://192.168.88.20/devops/HIS-FONTEND.git
- * [new tag] v2 -> v2
- [root@Programer HIS-FONTEND]#





- #Fontend主机验证构建结果
- [root@Fontend ~]# ls /opt/his/web/ #确认fontend.tar.gz清理情况
- favicon.ico index.html static
- [root@Fontend ~]# vim /opt/his/web/index.html #查看页面内title内容是否为"达内云"
- [root@Fontend ~]#
-
- #Jenkins主机确认自动清理工作目录
- [root@Jenkins ~]# ls /var/lib/jenkins/workspace/
- [root@Jenkins ~]#
- #此时HIS后端jar包应为之前的手工启动前台进程
- [root@Fontend ~]# curl http://192.168.88.60:8888/
- <!DOCTYPE html>
- <html lang="cn">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <h1>HIS</h1> #页面展示为HIS
- </body>
- </html>[root@Fontend ~]#
-
-
- #Programer主机更新HIS-BACKEND代码
- [root@Programer ~]# cd HIS/HIS-BACKEND/
- [root@Programer HIS-BACKEND]# vim HIS-api/src/main/resources/static/index.html
- [root@Programer HIS-BACKEND]# cat HIS-api/src/main/resources/static/index.html
- <!DOCTYPE html>
- <html lang="cn">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <h1>医疗信息系统</h1> #修改后端首页内容
- </body>
- </html>
- [root@Programer HIS-BACKEND]# git add . #添加修改到暂存区
- [root@Programer HIS-BACKEND]# git commit -m "modify index.html" #生成版本库
- [master 8343263] modify index.html
- 1 file changed, 2 insertions(+), 2 deletions(-)
- [root@Programer HIS-BACKEND]# git tag v2 #打v2标签
- [root@Programer HIS-BACKEND]# git push --all #推送所有分支到服务器
- 枚举对象中: 15, 完成.
- 对象计数中: 100% (15/15), 完成.
- 使用 2 个线程进行压缩
- 压缩对象中: 100% (6/6), 完成.
- 写入对象中: 100% (8/8), 607 字节 | 607.00 KiB/s, 完成.
- 总共 8(差异 4),复用 0(差异 0),包复用 0
- To http://192.168.88.20/devops/HIS-BACKEND.git
- f582569..8343263 master -> master
- [root@Programer HIS-BACKEND]# git push --tags #推送所有标签到服务器
- 总共 0(差异 0),复用 0(差异 0),包复用 0
- To http://192.168.88.20/devops/HIS-BACKEND.git
- * [new tag] v2 -> v2
- [root@Programer HIS-BACKEND]#



- #确认结果
- 2023-02-24 15:29:58.229 INFO 9629 --- [ Thread-5] AnnotationNacosInjectedBeanPostProcessor : class com.alibaba.nacos.spring.beans.factory.annotation.AnnotationNacosInjectedBeanPostProcessor was destroying!
- [root@Backend his]# #手工运行jar包的前台进程退出
-
- #确认jar包后台运行
- [root@Backend his]# ss -antpu | grep :8888
- tcp LISTEN 0 100 *:8888 *:* users:(("java",pid=9934,fd=63))
- [root@Backend his]#
-
- #测试访问后台首页
- [root@Backend his]# curl http://localhost:8888/
- <!DOCTYPE html>
- <html lang="cn">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <h1>医疗信息系统</h1>
- </body>
- </html>
- [root@Backend his]#
