手动安装便于学习理解
本文记录安装过程和遇到问题,仅供复习和参考,有问题欢迎指正
一、环境说明
pig4cloud 3.6的环境要求
工具 | 版本 | 下载 | 备注 |
---|---|---|---|
pig4cloud | 3.6 | https://gitee.com/log4j/pig | 微服务平台 |
JDK | 1.8(强制) | https://www.oracle.com/java/technologies/downloads/ | 服务器环境 |
Maven | 3.5+ | https://maven.apache.org/download.cgi | 服务端环境 |
MySQL | 5.7.8+ | https://downloads.mysql.com/archives/community/ | 服务端环境 |
Redis | 3.2+ | https://redis.io/download/ | 服务端环境 |
node | 16 | https://nodejs.org/zh-cn/download/ | 前端环境 |
本文的环境选择
除了JDK,pig支持最新的环境,直接选最新最快的版本
工具 | 版本 | 下载 | 备注 |
---|---|---|---|
VMware Workstation | 17 Pro | https://www.vmware.com/cn/products/workstation-pro.html | 虚拟化部署 |
RHEL | 9.1 | https://developers.redhat.com/products/rhel/download | 企业级Linux版本 |
pig4cloud | 3.6 | https://gitee.com/log4j/pig | 微服务平台 |
JDK | 1.8.0_351 | https://www.oracle.com/java/technologies/downloads/ | 服务器环境 |
Maven | 3.8.7 | https://dlcdn.apache.org/maven/maven-3/3.8.7/binaries/apache-maven-3.8.7-bin.tar.gz | 服务端环境 |
MySQL | 8.0.3 | https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz | 服务端环境 |
node | 16 | YUM下载 | 前端环境 |
系统 | IP地址 | 安装方式 | |
---|---|---|---|
后端 | RHEL9 | 192.168.2.20 | 默认“带GUI的服务器“,安装后的纯净系统 |
前端 | RHEL9 | 192.168.2.21 | 默认“带GUI的服务器“,安装后的纯净系统 |
红帽系统需要激活许可,系统安装过程不作记录,网上很多
二、后端部署
JDK安装
新建JDK目录
mkdir /app/ # 应用目录
mkdir /app/jdk1.8.0_351/ # 主程序目录
解压JDK安装包
没有直链,官网下载: https://www.oracle.com/java/technologies/downloads/
最简单是wget官网点下载得到的临时链接,觉得慢就自行下载上传,直接拖进虚拟机会解压出错
tar -xvzf jdk-8u351-linux-x64.tar.gz # 解压到当前目录
mv jdk1.8.0_351/* /app/jdk1.8.0_351/ # 移动到主程序目录
rmdir jdk1.8.0_351/ # 删除剩下的空目录,非空会报错
配置JDK环境变量
echo 'export JAVA_HOME="/app/jdk1.8.0_351/"' >> /etc/profile # 写入环境变量文件末尾
echo 'export PATH="$JAVA_HOME/bin/:$PATH"' >> /etc/profile # 写入环境变量文件末尾
source /etc/profile # 刷新环境变量
java -version # 测试是否生效
# 环境变量生效
>> java version "1.8.0_351"
Maven安装
新建Maven目录
mkdir /app/maven3.8.7/ # 主程序目录
解压Maven安装包
有直链,复制wget下载即可
觉得慢就自行下载上传,直接拖进虚拟机会解压出错
wget https://dlcdn.apache.org/maven/maven-3/3.8.7/binaries/apache-maven-3.8.7-bin.tar.gz # 下载安装包
tar -xvzf apache-maven-3.8.7-bin.tar.gz # 解压到当前目录
mv apache-maven-3.8.7/* /app/maven3.8.7/ # 移动到主程序目录
rmdir apache-maven-3.8.7/ # 删除剩下的空目录,非空会报错
配置Maven环境变量
echo 'export MAVEN_HOME="/app/maven3.8.7/"' >> /etc/profile # 写入环境变量文件末尾
echo 'export PATH="$MAVEN_HOME/bin/:$PATH"' >> /etc/profile # 写入环境变量文件末尾
source /etc/profile # 刷新环境变量
mvn -version # 测试是否生效
# 环境变量生效
>> Apache Maven 3.8.7 (b89d5959fcde851dcb1c8946a785a163f14e1e29)
# 如果前面的JDK_HOME环境变量没配置会提示这个错误
>> The JAVA_HOME environment variable is not defined correctly,
MySQL安装
手动安装便于后期维护,并且更加通用
本文记录安装过程和遇到问题,仅供复习和参考,有问题欢迎指正
新建MySQL目录
mkdir /app/mysql8.0.30 # 主程序目录
mkdir /data/mysql # 数据库目录
mkdir /config # 配置目录
新建MySQL用户
useradd -s /sbin/nologin mysql # -s指定登录的ssh,/sbin/nologin为禁止ssh登录。
解压MySQL安装包
有直链,可以直接复制下文wget下载
觉得慢就自行下载上传,直接拖进虚拟机会解压出错
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz # 下载安装包
tar -xvf mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz # 解压到当前目录
mv mysql-8.0.30-linux-glibc2.12-x86_64/* /app/mysql8.0.30/ # 移动到主程序目录
rmdir mysql-8.0.30-linux-glibc2.12-x86_64/ # 删除剩下的空目录,非空会报错
配置MySQL环境变量
echo 'export PATH="/app/mysql8.0.30/bin:$PATH"' >> /etc/profile # 写入环境变量文件末尾
source /etc/profile # 刷新环境变量
mysql -V # 测试是否生效
# 变量有效,但发生报错,缺少libtinfo.so.5组件
>> mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
# 查看/usr/lib64目录,发现RHEL9使用了新版本组件,这里使用软链接解决
ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5
mysql -V # 再次测试
# 变量生效
>> mysql Ver 8.0.30 for Linux on x86_64 (MySQL Community Server - GPL)
初始化MySQL数据库
mysqld --initialize-insecure --user=mysql --basedir=/app/mysql8.0.30/ --datadir=/data/mysql/ # 初始化命令
ls /data/mysql/ # 查看生成的数据库文件
新建MySQL配置
vi /config/mysql.cnf # 新建配置
#服务端配置
[mysqld]
#主程序目录
basedir=/app/mysql8.0.30
#数据库目录
datadir=/data/mysql
#MySQL用户
user=mysql
#服务器id号
server_id=1
#端口号
port=3306
修改MySQL文件所有权
chown -R mysql:mysql /app/mysql8.0.30/* # 主程序目录
chown -R mysql:mysql /data/mysql/* # 数据库目录
chown -R mysql:mysql mysql.cnf # 配置文件
配置SELinux安全上下文
非默认目录运行会被SELinux阻止,需要为目录添加安全上下文
semanage fcontext -a -t mysqld_initrc_exec_t /app/mysql8.0.30/bin/mysqld # mysqld添加 mysqld_initrc_exec_t 类型安全上下文
restorecon -v /app/mysql8.0.30/bin/mysqld # 恢复安全上下文配置
semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?" # 数据库目录添加mysqld_db_t类型的安全上下文
restorecon -Rv /data/mysql/ # 恢复安全上下文配置
semanage fcontext -a -t mysqld_etc_t /config/mysql.cnf # 配置文件添加mysqld_etc_t类型的安全上下文
restorecon -v /config/mysql.cnf # 恢复安全上下文配置
# semanage fcontext -l | grep -i mysqld 列出mysqld相关安全上下文
# semanage fcontext -a -t mysqld_var_run_t "/app/mysql5.7.8(/.*)" # 主程序目录添加 mysqld_var_run_t 类型安全上下文(旧版本需要)
# semanage fcontext -a -f s -t mysqld_var_run_t "/tmp/mysql\.sock" # sock文件安全上下文(可能需要)
# semanage fcontext -a -t mysqld_var_run_t "/data/mysql/*.pid" pid文件安全上下文(可能需要)
配置systemd服务
vi /etc/systemd/system/mysqld.service # 新建服务
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/app/mysql8.0.30/bin/mysqld --defaults-file=/config/mysql.cnf
LimitNOFILE = 5000
启动systemd服务
systemctl daemon-reload # 重载服务
systemctl start mysqld.service # 启动服务
systemctl status mysqld.service # 查看状态
systemctl enable mysqld.service # 加入启动项
# journalctl -xe 查看日志
设置MySQL密码
mysqladmin -u root password 123456
允许MySQL远程登录
mysql -uroot -p123456 # root登录MySQL
mysql> use mysql; # 选择MySQL系统数据库
mysql> update user set host="%" where host="localhost" and User="root"; # 更新用户表
mysql> flush privileges; # 刷新数据库
mysql> quit; # 退出数据库
放行MySQL端口
firewall-cmd --zone=public --permanent --add-service=mysql # public是默认接口,mysql是系统预配置
firewall-cmd --reload # 重载防火墙
# firewall-cmd --list-all 查看防火墙状态
# firewall-cmd --get-services 查看可用的系统预配置
Pig后端安装和运行
下载pig后端项目
mkdir /app/pig4cloud/ # 创建程序目录
mkdir /app/pig4cloud-code/ # 创建代码目录
yum -y install git # 安装git
git clone https://gitee.com/log4j/pig.git /app/pig4cloud-code/ # 下载项目代码
下载pig后端依赖包
cd /app/pig4cloud-code/ # 进入代码目录
mvn dependency:copy-dependencies # maven下载依赖包
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 43:27 min
[INFO] Finished at: 2023-01-12T20:29:39+08:00
[INFO] ------------------------------------------------------------------------
编译pig后端代码
cd /app/pig4cloud-code/ # 进入程序目录
mvn compile # maven编译
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.214 s
[INFO] Finished at: 2023-01-12T23:11:40+08:00
[INFO] ------------------------------------------------------------------------
提取pig后端程序
cp $(find /app/pig4cloud-code/ -type f -name "*.jar") /app/pig4cloud/ # 提取代码目录所有编译好的jar文件到程序目录
ls /app/pig4cloud # 查看文件
>> pig-auth.jar pig-common-feign.jar pig-common-seata.jar pig-gateway.jar pig-upms-api.jar
>> pig-codegen.jar pig-common-job.jar pig-common-security.jar pig-monitor.jar pig-upms-biz.jar
>> pig-common-core.jar pig-common-log.jar pig-common-swagger.jar pig-register.jar pig-xxl-job-admin.jar
>> pig-common-datasource.jar pig-common-mybatis.jar pig-common-xss.jar pig-sentinel-dashboard.jar
配置hosts
项目要求必须配置hosts,禁止在代码中修改成IP
vi /etc/hosts # 尾部追加以下内容
127.0.0.1 pig-mysql
127.0.0.1 pig-redis
127.0.0.1 pig-gateway
127.0.0.1 pig-register
127.0.0.1 pig-sentinel
127.0.0.1 pig-monitor
127.0.0.1 pig-job
127.0.0.1 pig-seata
ping pig-mysql # 测试是否生效
>> PING pig-mysql (127.0.0.1) 56(84) 比特的数据。
>> 64 比特,来自 localhost (127.0.0.1): icmp_seq=1 ttl=64 时间=0.075 毫秒
导入pig后端数据库
mysql -uroot -p123456 <"/app/pig4cloud/db/pig.sql" # 核心数据库
mysql -uroot -p123456 <"/app/pig4cloud/db/pig_config.sql" # nacos配置
mysql -uroot -p123456 <"/app/pig4cloud/db/pig_codegen.sql" # 代码生成脚本
mysql -uroot -p123456 <"/app/pig4cloud/db/pig_job.sql" # 暂时不知道是啥
mysql -uroot -p123456 -se "show databases;" # 查看数据库
修改pig后端数据库配置
vi /app/pig4cloud/pig-register/src/main/resources/application.yml # 修改以下内容
# 修改前
db:
num: 1
user: ${MYSQL-USER:root} #修改:用户名
password: ${MYSQL-PWD:root} #修改:密码, 特殊字符使用 '包裹'
# 修改后
db:
num: 1
user: ${MYSQL-USER:root}
password: ${MYSQL-PWD:123456}
运行pig后端
java -jar /app/pig4cloud/pig-register.jar # 灵活运行需要的模块即可
>>
,--.'|
,--,: : | Nacos
,`--.'`| ' : ,---. Running in stand alone mode, All function modules
| : : | | ' ,'\ .--.--. Port: 8848
: | \ | : ,--.--. ,---. / / | / / ' Pid: 57083
| : ' '; | / \ / \. ; ,. :| : /`./ Console: http://192.168.2.20:8848${server.servlet.contextPath}/index.html
' ' ;. ;.--. .-. | / / '' | |: :| : ;_
| | | \ | \__\/: . .. ' / ' | .; : \ \ `. https://nacos.io
' : | ; .' ," .--.; |' ; :__| : | `----. \
| | '`--' / / ,. |' | '.'|\ \ / / /`--' /
' : | ; : .' \ : : `----' '--'. /
; |.' | , .-./\ \ / `--'---'
'---' `--`---' `----'
放行Pig后端端口
firewall-cmd --zone=public --permanent --add-port=8848/tcp # public是默认接口,8848是后端端口
firewall-cmd --reload # 重载防火墙
# firewall-cmd --list-all 查看防火墙状态
# firewall-cmd --get-services 查看可用的系统预配置
三、前端部署
Node安装
Yum安装Node
手动安装的话步骤和上面一样,下载安装包然后配置环境变量就可以了
这里偷懒直接YUM安装了
yum -y install nodejs.x86_64
node -v # 测试是否生效
Pig前端安装和运行
下载Pig前端项目
mkdir /app/ # 创建应用目录
mkdir /app/pig4cloud-ui # 创建程序目录
yum -y install git # 安装git
git clone https://gitee.com/log4j/pig-ui.git /app/pig4cloud-ui/ # 下载项目程序
安装Pig前端依赖
cd /app/pig4cloud-ui/ # 进入程序目录
npm install --registry=https://registry.npmmirror.com
配置systemd服务
vi /etc/systemd/system/pig4cloud-ui.service # 新建服务
[Unit]
Description=pig4cloud-ui server
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=root
Group=root
WorkingDirectory=/app/pig4cloud-ui/
ExecStart=npm run dev
LimitNOFILE = 5000
尝试启动systemd服务
systemctl daemon-reload # 重载服务
systemctl start pig4cloud-ui.service # 启动服务
systemctl enable pig4cloud-ui.service # 加入启动项
systemctl status pig4cloud-ui.service # 查看服务状态
# 启动失败
>> Active: failed (Result: core-dump) since Thu 2023-01-12 21:41:28 CST; 33min ago
# journalctl -xe 查看日志
>> SELinux 正在阻止 /usr/bin/node 对进程使用 execmem 访问
配置SELinux安全上下文
查看日志发现SELinux默认阻止了execmem访问,需要为目录添加安全上下文或设置为默认允许来解决
但系统并无预置node/npm相关的安全上下文类型,尝试execmem访问全允许也没有成功
因为不想自己写策略,这里使用系统提供的audit2allow工具,能自动分析报错信息并根据需要的权限,生成程序专用的安全上下文策略,缺点就是要根据报错生成,不够优雅(但我不想找策略找半天了,开摆)
journalctl -xe # 查看日志,发现报错
>> SELinux 正在阻止 /usr/bin/node 对进程使用 execmem 访问
ausearch -c 'npm' --raw | audit2allow -M my-npm # 根据报错信息生成安全上下文策略模块
semodule -X 300 -i my-npm.pp # 应用策略模块
systemctl start pig4cloud-ui.service # 再次启动服务
journalctl -xe # 查看日志,发现新报错
>> SELinux 正在阻止 /usr/bin/node 对 create 文件...
>> SELinux 正在阻止 /usr/bin/node 对 read 文件 ...
>> SELinux 正在阻止 /usr/bin/node 对 write 文件 ...
ausearch -c 'npm run dev' --raw | audit2allow -M my-npmrundev # 根据报错信息生成安全上下文策略模块
semodule -X 300 -i my-npmrundev.pp # 应用策略模块
systemctl start pig4cloud-ui.service # 再次启动服务
journalctl -xe # 再看日志,又有新报错
>> SELinux 正在阻止 /usr/bin/node 对 open 文件 ...
ausearch -c 'npm' --raw | audit2allow -M my-npm # 根据报错信息生成安全上下文策略模块
semodule -X 300 -i my-npm.pp # 应用策略模块
systemctl start pig4cloud-ui.service # 再次启动服务
journalctl -xe # 再看日志,终于没报错了,自己配的话头都配秃
systemctl status pig4cloud-ui.service # 查看服务状态
>> Active: active (running)
>> Started pig4cloud-ui server.
>> [email protected] dev
>> vite --host
>> VITE v3.1.4 ready in 227 ms
>> Local: http://localhost:8080/
>> Network: http://192.168.2.21:8080/
# semanage fcontext -l | grep -i node 列出node相关安全上下文类型,未发现预置类型
# semanage fcontext -l | grep -i npm 列出npm相关安全上下文类型,未发现预置类型
# getsebool -a | grep execmem 列出execmem相关策略,全部on依然无效
放行Pig前端端口
firewall-cmd --zone=public --permanent --add-port=8080/tcp # public是默认接口,8080是前端端口
firewall-cmd --reload # 重载防火墙
# firewall-cmd --list-all 查看防火墙状态
# firewall-cmd --get-services 查看可用的系统预配置
四、外部测试
数据库连接测试
后端连接测试
前端连接测试
五、完事
问题与思考
一、遇到VM17直接拖压缩包拖进RHEL9会解压出错的bug
二、audit2allow工具靠分析失败权限来生成安全策略的方式并不稳妥,可能存在程序运行一段时间或者用户特定操作后才会用到的权限,所以实际生产中应该确保SELinux策略完善,或者一锤子关掉SELinux
参考文章
https://www.yuque.com/pig4cloud/pig
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/9
标签:pig4cloud,--,app,练习,pig,mysqld,mysql,RHEL9 From: https://www.cnblogs.com/YoakeX5/p/17042709.html