首页 > 其他分享 >RHEL9练习部署pig4cloud

RHEL9练习部署pig4cloud

时间:2023-01-13 00:44:35浏览次数:68  
标签:pig4cloud -- app 练习 pig mysqld mysql RHEL9

手动安装便于学习理解

本文记录安装过程和遇到问题,仅供复习和参考,有问题欢迎指正

一、环境说明

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

相关文章

  • 莫反的一些练习题(2)
    7.P2231[HNOI2002]跳蚤原题链接题目大意求\(\suma_i\cdotx_i=1\)\((1\leN\leM\le10^8,M^N\le10^{16})\)解的个数分析一道比较有意思的题根据裴蜀定理,\(\s......
  • 寒假练习记录
    \(1.1\)P3067,SP11469,CF525EMeet-in-Middle.P2901\(\text{A}^*\)求解k短路。P3052ID-DFS.P1278记忆化搜索。P4168经典的分块在线求区间众数。\(1.2\)P1074......
  • 莫反的一些练习题(1)
    1.树林里的树.TreesinaWood原题链接题目大意求\(\frac{\sum_{i=-a}^{a}\sum_{j=-b}^{b}\lbrack\lvertgcd(i,j)\rvert=1\rbrack}{(2a+1)(2b+1)-1}(a\le2000,b\le2......
  • 【参考答案】java基础练习:循环结构(while、do...while、for、break、continue、return
    while while实现:输出比i(i=5)小的正整数packagecom.qzcsbj;publicclassTest{publicstaticvoidmain(String[]args){inti=5;while(......
  • Python学习笔记(4)~Python基础练习之常用内置函数(1-10)
    Python基础练习之常用内置函数(1-10)1、abs()作用        求数的绝对值或者复数的模测试demo#!/usr/bin/python3#abs:求绝对值or复数的模#|-1|=1a=abs(-1)#复数......
  • awk习题练习
    1、统计/etc/fstab文件中每个文件系统类型出现的次数2、统计/etc/fstab文件中每个单词出现的次数awk-F"[[:space:]]+|[^[:alpha:]]"-vOFS="\n"'/^./{for(i=1;i<=NF;i++......
  • Python----文件操作练习题
    withopen("./作业.txt","w",encoding="utf-8")asw:w.write("晓出净慈寺送林子方\n毕竟西湖六月中\n风光不与四时同\n接天莲叶无穷碧\n映日荷花别样红")witho......
  • jQuery回到顶部(css对应练习,循环定时器setInterval)
    视频setInterval<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>03_回到顶部</title><style>#to_top{width:30px;height:......
  • 靶机练习 - 温故知新 - Toppo(sudo 提权)
    重新做了一下以前做过的第一个靶机(https://www.cnblogs.com/sallyzhang/p/12792042.html),这个靶机主要是练习sudo提权,当时不会也没理解。开启靶机,直接告诉了IP地址:端口......
  • RHEL9手动安装MySQL5.7.8
    手动安装便于后期维护,并且更加通用本文记录安装过程和遇到问题,仅供复习和参考,有问题欢迎指正新建MySQL目录mkdir/app/mysql5.7.8#主程序目录mkdir/data/mysql#数......