当前位置: 首页 > news >正文

RHCE实验详解

目录

实验分析

环境拓扑结构

项目需求

主机环境描述

实验步骤

一、密钥互信和主机名更改

二、DNS

三、NGINX

四、MARIADB

五、NFS

六、NTP

七、论坛服务

结果展示及痛点解答


实验分析

环境拓扑结构

项目需求

 1. 172.25.250.101 主机上的 Web 服务要求提供 www.exam.com Web站点,该站点在任何路由可达 的主机上被访问,页面内容显示为 "Hello,Welcome to www.exam.com !",并提供 content.exam.com/yum/AppStream和content.exam.com/yum/BaseOS URL 作为网络仓库供所 有主机使用。

2. 172.25.250.102 主机提供基于Chronyd 的 NTP 服务将本主机作为时间服务器,对外提供 NTP 服 务,并设置本服务器为 3 层。

3. 172.25.250.103 主机提供的MySQL 数据库服务,要求使用需求1中提供的仓库进行安装,并将数据 库密码设定为 redhat。创建名称为 bbs 的数据库提供给论坛服务使用。

4. 172.25.250.104 主机提供 NFS 服务,该服务将导出本地的 /bbs 目录作为论坛数据目录,该导出指 定只能论坛所在主机使用,并且开机自动挂载。

5. 172.25.250.105 主机提供 DNS 服务,该服务需要提供对项目中所有主机名的正向和反向解析,并 要求所有服务器的 DNS 配置为该 DNS 服务器。

6. 172.25.250.106 主机提供基于 Discuz 的论坛服务,该论坛服务使用 172.25.250.103 主机提供的数 据库 bbs,使用 172.25.250.104 主机提供的 NFS 作为论坛数据目录,并开机挂载。并使用 172.25.250.101 主机提供的网络仓库,172.25.250.102 主机提供的 NTP 服务,172.25.250.105 主 机提供的 DNS 服务。

7. 所有服务器的防火墙服务和 SELinux 服务必须开启。

8. 所有服务器提供的网络服务必须在系统重启后仍然可以正常提供服务。

9. 根据所有服务的相关代码,编写一键部署shell脚本,最基础的功能为 通过执行该脚本实现所有上面 所有需求,要求脚本必须在 servera.exam.com 主机上运行,并支持多次运行。

主机环境描述

主机名主机地址 需要提供的服务
content.exam.com172.25.250.101提供基于 httpd/nginx 的 YUM仓库服务
ntp.exam.com172.25.250.102提供基于Chronyd 的 NTP 服务
mysql.exam.com172.25.250.103提供基于 MySQL 的数据库服务
nfs.exam.com 172.25.250.104提供基于 NFS 的网络文件系统服务
dns.exam.com  172.25.250.105提供基于 NFS 的网络文件系统服务
bbs.exam.com172.25.250.106提供基于 Discuz 的论坛服务

注意:

172.25.250.101-172.25.250.105 共 5 个 IP 地址由servera.exam.com服务器进行提供。 172.25.250.106 由 serverb.exam.com 服务器进行提供。

实验步骤

一、密钥互信和主机名更改

#!/bin/bash
#密钥互信
echo "" > /etc/yum.repos.d/rpm.repo
cat > /etc/yum.repos.d/rpm.repo << EOF
[haha]
name=baseos
baseurl=/mnt/BaseOS
gpgcheck=0
[xixi]
name=appstream
baseurl=/mnt/AppStream
gpgcheck=0
EOFmount /dev/sr0 /mnt    &>  /dev/null
xs=$(ls  /mnt/GPL)  &> /dev/null
if  [ $xs == "/mnt/GPL" ]thenecho "挂载成功"elseecho "挂载失败"exit 2
fils /root/.ssh/id_rsa &> /dev/null
yz=$(echo $?)if [ $yz -eq 0 ]
thenecho "互信已经完成"
elsessh-keygen -t ed25519 -C "comment" -f /root/.ssh/id_rsa -N ''
fimkdir -p /root/.ssh &> /dev/null
chmod 700 /root/.ssh &> /dev/null
touch /root/.ssh/authorized_keys &> /dev/null
chmod 600 /root/.ssh/authorized_keys &> /dev/nullif ! command -v sshpass &> /dev/null
thenyum install -y sshpass &> /dev/null
fisshpass -p "redhat" ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.250.106
yz1=$(echo $?)
if [ $yz1 -eq 0 ]
thenecho "连接中......."
elseecho "互信失败"exit 1
fissh root@172.25.250.106 <<'ALLEOF'
hostnamectl set-hostname serverb.exam.com
nmcli connection modify ens160 ipv4.addresses 172.25.250.106/24 ipv4.gateway 172.25.250.2 ipv4.dns 172.25.250.105 ipv4.method manual connection.autoconnect yes
nmcli connection up ens160
echo "Modified successfully"
ALLEOFls /root/.ssh/authorized_keys &> /dev/null
yz2=$(echo $?)
if [ $yz2 -eq 0 ]
thenecho "互信完成OK"
elsescp root@172.25.250.106:/root/.ssh/id_rsa.pub /root/.ssh/authorized_keys &> /dev/nullecho "密钥发送"
fihostnamectl set-hostname servera.exam.com  &> /dev/null

 注意:密钥互信的前提是两台主机可以互相登录并且之前没有做过互信,互信使用了sshpass来免密登录,所以需要提前配置仓库下载,密码是106主机上的登录密码,请自行确认密码是否有误。


二、DNS

#!/bin/bash
#dns
nmcli connection modify ens160 +ipv4.addresses 172.25.250.101/24
nmcli connection modify ens160 +ipv4.addresses 172.25.250.102/24
nmcli connection modify ens160 +ipv4.addresses 172.25.250.103/24
nmcli connection modify ens160 +ipv4.addresses 172.25.250.104/24
nmcli connection modify ens160 +ipv4.addresses 172.25.250.105/24
nmcli connection modify ens160 ipv4.dns 172.25.250.105 ipv4.method manual connection.autoconnect yesif [ $? -eq 0 ]
thenecho "网卡配置成功"elseecho "网卡配置失败"exit 2
fi
nmcli connection up ens160 &> /dev/nullpzdns=$(dig | grep SERVER: | awk -F# '{ print $1 }' | awk -F: '{ print $2 }')
if [ "$pzdns" == " 172.25.250.105" ]
thenecho "dns成功修改为172.25.250.105"
elseecho "dns修改失败"
fiecho "" > /etc/yum.repos.d/rpm.repo
cat > /etc/yum.repos.d/rpm.repo << EOF
[haha]
name=baseos
baseurl=/mnt/BaseOS
gpgcheck=0
[xixi]
name=appstream
baseurl=/mnt/AppStream
gpgcheck=0
EOFmount /dev/sr0 /mnt    &>  /dev/null
xs2=$(ls  /mnt/GPL)  &> /dev/null
if  [ $xs2 == "/mnt/GPL" ]thenecho "挂载成功"elseecho "挂载失败"exit 2
fidnf install bind -y  &> /dev/null
if [ $? -eq 0 ]
thenrpm -qa | grep bind &> /dev/nullif [ $? -eq 0 ]thenecho "bind下载成功"elseecho "bind下载不成功"fi
elseecho "bind下载失败"
fisystemctl enable named &> /dev/null
systemctl start named  &> /dev/null
if [ $? -eq 0 ]
thenBINDSTAT=$(systemctl is-active named)if [ $BINDSTAT == "active" ]thenecho "bind启动成功"elseecho "bind启动失败"fi
ficat > /etc/named.conf <<EOF
options {listen-on port 53 { 172.25.250.105; };directory       "/var/named";
};
zone "exam.com" IN {type master;file "named.exam";
};
zone "172.25.250.in-addr.arpa" IN {type master;file "named.fanxiang";
};
EOFcat > /var/named/named.exam <<EOF
\$TTL 1D
@ IN SOA @ admin.exam.com. (01D1D2D1D)IN      NS      ns.exam.com.IN      MX      10 mail.exam.com.
ns      IN      A       172.25.250.99
content IN      A       172.25.250.101
www     IN      A       172.25.250.101
ntp     IN      A       172.25.250.102
mysql   IN      A       172.25.250.103
dns     IN      A       172.25.250.105
nfs     IN      A       172.25.250.104
bbs     IN      A       172.25.250.106
EOFcat  >   /var/named/named.fanxiang  <<EOF
\$TTL   1D
@   IN   SOA    @   admin.exam.com. (11111)IN      NS      dns.exam.com.
105     IN      PTR     dns.exam.com.
101     IN      PTR     www.exam.com.
101     IN      PTR     content.exam.com.
102     IN      PTR     ntp.exam.com.
103     IN      PTR     mysql.exam.com.
104     IN      PTR     nfs.exam.com.
106     IN      PTR     bbs.exam.com.
EOFsystemctl enable named --now &> /dev/null
fhq_dns=`firewall-cmd --list-services | grep -o  dns`
if [ -z $fhq_dns ]
then
firewall-cmd --permanent --add-service=dns &> /dev/null
firewall-cmd --reload   &> /dev/null
elseecho "dns防火墙配置成功"
fisystemctl restart named &> /dev/null
if [ $? -eq 0 ]
thenecho "dns重启成功,dns配置完成"
elseecho "dns重启失败"
fi

注意:网卡配置时,查看自己的网卡名称是否为ens160,不是则更改;在DNS配置文件写入时,对于定义变量的$,在其前面要加上\防止它不能写入。


三、NGINX

#NGINX
cat > /etc/yum.repos.d/rpm.repo << EOF
[haha]
name=baseos
baseurl=/mnt/BaseOS
gpgcheck=0
[xixi]
name=appstream
baseurl=/mnt/AppStream
gpgcheck=0
EOF
mount /dev/sr0 /mnt    &>  /dev/null
xs3=$(ls  /mnt/GPL)  &> /dev/null
if  [ $xs3 == "/mnt/GPL" ]thenecho "挂载成功,本地源配置成功"elseecho "挂载失败"exit 2
fi
dnf install nginx -y &> /dev/null
if [ $? -eq 0 ]
thenrpm -qa | grep nginx &> /dev/nullif [ $? -eq 0 ]thenecho "nginx下载成功"elseecho "nginx下载不成功"fi
elseecho "nginx下载失败"
fisystemctl enable nginx &> /dev/null
systemctl start nginx &> /dev/null
if [ $? -eq 0 ]
thenNGINXSTAT=$(systemctl is-active nginx)if [ $NGINXSTAT == "active" ]thenecho "nginx启动成功"elseecho "nginx启动失败"fi
elseecho "nginx启动失败"
ficat > /etc/nginx/nginx.conf   << EOFuser nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {worker_connections 1024;
}
http {log_format  main  '\$remote_addr - \$remote_user \$time_local "\$request" ''\$status \$body_bytes_sent "\$http_referer" ''"\$http_user_agent" "\$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile            on;tcp_nopush          on;tcp_nodelay         on;keepalive_timeout   65;types_hash_max_size 4096;include             /etc/nginx/mime.types;default_type        application/octet-stream;include /etc/nginx/conf.d/*.conf;
server {listen 172.25.250.101;server_name www.exam.com;root /www;index index.html index.htm;location / {try_files \$uri \$uri/ =404;allow all;}
location /www/ {deny all;allow all;internal;}location /www/yum/ {allow all;deny all;allow all;}
}
}
EOFecho "Hello,Welcome to www.exam.com!" > /www/index.htmlsystemctl start firewalld.service &> /dev/null
fhq_nginx=`firewall-cmd --list-services | grep -o  http`
if [ -z $fhq_nginx ]
then
firewall-cmd --permanent --add-service=http &> /dev/null
firewall-cmd --reload   &> /dev/null
echo "nginx的防火墙配置成功"
else
echo "nginx的防火墙配置成功"
fichcon_http=`ls -Zl /www/index.html | awk '{print $5}' | awk -F: '{print $3}'`
if [ "$chcon_http" = "httpd_sys_content_t" ]
thenecho "标签修改成功"
else
chcon -t httpd_sys_content_t /www/index.html
fiyum="/www/yum"
if [ -d   $yum ]
thenecho "yum文件已经存在,不需要创建了"
elsemkdir -p /www/yum &> /dev/nullecho "yum文件已经创建"
fisystemctl restart nginx &> /dev/null
NGPAGE=$(curl  -s   172.25.250.101)
if [ "$NGPAGE" == "Hello,Welcome to www.exam.com!" ]
thenecho "nginx服务完成"
elseecho "nginx服务出现错误"
fimount=`df -h | grep /dev/sr0 | awk '{print $6}'`
if [ $mount = /www/yum ]
thenecho "挂载成功"
elif [ -z $mount ]; thenumount /dev/sr0 /mnt &> /dev/nullmount /dev/sr0 /www/yum  &> /dev/null
elseumount /dev/sr0    &> /dev/nullmount /dev/sr0 /www/yum &> /dev/null
ficat > /etc/yum.repos.d/rpm.repo << EOF
[baseos]
name=baseos
baseurl=http://content.exam.com/yum/BaseOS
gpgcheck=0
[appstream]
name=appstream
baseurl=http://content.exam.com/yum/AppStream
gpgcheck=0
EOFdnf install -y vim net-tools bash-com*  &> /dev/null
if [ $? -eq 0 ]
thenecho "yum源配置成功"
elseecho "yum源配置失败"
fi

四、MARIADB

#MARIADB
echo "" > /etc/yum.repos.d/rpm.repo
cat > /etc/yum.repos.d/rpm.repo << EOF
[baseos]
name=baseos
baseurl=http://content.exam.com/yum/BaseOS
gpgcheck=0
[appstream]
name=appstream
baseurl=http://content.exam.com/yum/AppStream
gpgcheck=0
EOFmount /dev/sr0 /mnt    &>  /dev/null
xs4=$(ls  /mnt/GPL)  &> /dev/null
if  [ $xs4 == "/mnt/GPL" ]thenecho "挂载成功"elseecho "挂载失败"exit 2
fiyum install mariadb-server -y  &> /dev/null
if [ $? -eq 0 ]
thenrpm -qa | grep mariadb &> /dev/nullif [ $? -eq 0 ]thenecho "mariadb下载成功"elseecho "mariadb下载不成功"fi
elseecho "mariadb下载失败"
fisystemctl enable mariadb &> /dev/null
systemctl start mariadb  &> /dev/null
if [ $? -eq 0 ]
thenMARSTAT=$(systemctl is-active mariadb)if [ $MARSTAT == "active" ]thenecho "mariadb启动成功"elseecho "mariadb启动失败"fi
fimysql -u root -predhat  << EOF
use mysql;
grant all privileges on *.* to 'root'@'%' identified by 'redhat';
CREATE DATABASE IF NOT EXISTS bbs;
FLUSH PRIVILEGES;
\q;
EOFif ! firewall-cmd --quiet --query-port=3306/tcp
thenfirewall-cmd --permanent --add-port=3306/tcpecho "3306端口已成功添加到防火墙规则"
elseecho "3306端口已经在防火墙规则中,无需重复添加"
fiif ! firewall-cmd --quiet --query-service=mysql
thenfirewall-cmd --permanent --add-service=mysqlecho "MYSQL服务已成功添加到防火墙规则"
elseecho "MYSQL服务已经在防火墙规则中,无需重复添加"
fi
firewall-cmd --reload &>/dev/null

注意:在下载mariadb之前请确保主机没有关于mysql的服务,如果有的话可能导致mariadb无法下载和启动;由于mariadb是默认不开启远程登录的,所以需要在数据库开启远程登录


五、NFS

#NFS
echo "" > /etc/yum.repos.d/rpm.repo
cat > /etc/yum.repos.d/rpm.repo << EOF
[baseos]
name=baseos
baseurl=http://content.exam.com/yum/BaseOS
gpgcheck=0
[appstream]
name=appstream
baseurl=http://content.exam.com/yum/AppStream
gpgcheck=0
EOF
mount /dev/sr0 /mnt    &>  /dev/null
xs5=$(ls  /mnt/GPL)  &> /dev/null
if  [ $xs5 == "/mnt/GPL" ]thenecho "挂载成功"elseecho "挂载失败"exit 2
fidnf install nfs-utils -y  &> /dev/null
if [ $? -eq 0 ]
thenrpm -qa | grep nfs &> /dev/nullif [ $? -eq 0 ]thenecho "nfs下载成功"elseecho "nfs下载不成功"fi
elseecho "nfs下载失败"
fisystemctl enable nfs-server  &> /dev/null
systemctl start nfs-server
if [ $? -eq 0 ]
thenNFSSTAT=$(systemctl is-active nfs)if [ $NFSSTAT == "inactive" ]thenecho "nfs启动成功"elseecho "nfs启动失败"fi
fics="/bbs"
if [ -d   $cs ]
thenecho "nfs文件已经存在,不需要创建了"
elsemkdir /bbs &> /dev/nullecho "nfs文件已经创建"
fichmod 777 /bbs/ -R
cat > /etc/exports << EOF
/bbs 172.25.250.106(rw)
EOFsystemctl start firewalld.service &> /dev/null
fhq_nfs=`firewall-cmd --list-services | grep -o  nfs`
if [ -z $fhq_nfs ]
then
firewall-cmd --permanent --add-service=mountd  &> /dev/null
firewall-cmd --permanent --add-service=rpc-bind &> /dev/null
firewall-cmd --permanent --add-service=nfs &> /dev/null
firewall-cmd --reload   &> /dev/null
echo "nfs的防火墙配置成功"
else
echo "nfs的防火墙配置成功"
fisystemctl restart nfs-server
if [ $? -eq 0 ]
thenecho "nfs重启成功"
elseecho "nfs重启失败"
fi

六、NTP

#NTP
echo "" > /etc/yum.repos.d/rpm.repo
cat > /etc/yum.repos.d/rpm.repo << EOF
[baseos]
name=baseos
baseurl=http://content.exam.com/yum/BaseOS
gpgcheck=0
[appstream]
name=appstream
baseurl=http://content.exam.com/yum/AppStream
gpgcheck=0
EOF
mount /dev/sr0 /mnt    &>  /dev/null
xs6=$(ls  /mnt/GPL)  &> /dev/null
if  [ $xs6 == "/mnt/GPL" ]thenecho "挂载成功"elseecho "挂载失败"exit 2
firpm -qa | grep chrony &> /dev/null
if [ $? -eq 0 ]thenecho "chrony已经可以使用"elsednf install chrony -y &> /dev/nullif [ $? -eq 0 ]thenecho "chrony下载成功"elseecho "chrony下载不成功"fi
fisystemctl enable chrony &> /dev/null
systemctl start chrony  &> /dev/null
if [ $? -eq 0 ]
thenCHRONYSTAT=$(systemctl is-active named)if [ $CHRONYSTAT == "inactive" ]thenecho "chrony启动成功"elseecho "chrony启动失败"fi
fiif grep -q '^#pool 2.rhel.pool.ntp.org iburst' /etc/chrony.conf
thenecho "chrony——pool 2.rhel.pool.ntp.org iburst已被注释,无需修改"
elsesudo sed -i '/pool 2.rhel.pool.ntp.org iburst/s/^/#/' /etc/chrony.confecho "chrony——已成功注释pool 2.rhel.pool.ntp.org iburst"
fi
chrony_server="server 172.25.250.102 iburst"if grep -q "$chrony_server" /etc/chrony.conf
thenecho "chrony——server 172.25.250.102 iburst已存在,无需添加"
elsesudo sed -i '$a'"$chrony_server" /etc/chrony.confecho "chrony——server 172.25.250.102 iburst已成功添加!"
fi
chrony_allow="allow 172.25.250.0/24"if grep -q "$chrony_allow" /etc/chrony.conf
thenecho "chrony——allow 172.25.250.0/24已存在,无需添加"
elsesudo sed -i '$a'"$chrony_allow" /etc/chrony.confecho "chrony——allow 172.25.250.0/24已成功添加"
fi
chrony_stratum="local stratum 3"if grep -q "$chrony_stratum" /etc/chrony.conf
thenecho "chrony——local stratum 3已存在,无需添加"
elsesudo sed -i '$a'"$chrony_stratum" /etc/chrony.confecho "chrony——local stratum 3已成功添加"
fi
sudo sed -i '/^#log measurements statistics tracking/s/^#//' /etc/chrony.confsystemctl restart chronyd.service
if [ $? -eq 0 ]
thenecho "chrony重启成功"
elseecho "chrony重启失败"
fisystemctl enable --now cockpit.socketfhq_ntp=`firewall-cmd --list-services | grep -o  ntp`
if [ -z $fhq_ntp ]
then
firewall-cmd --permanent --add-service=ntp &> /dev/null
firewall-cmd --reload   &> /dev/null
echo "ntp的防火墙配置成功"
else
echo "ntp的防火墙配置成功"
fissh root@172.25.250.106 << ALLEOF
if grep -q '^#pool 2.rhel.pool.ntp.org iburst' /etc/chrony.conf
thenecho "chrony——pool 2.rhel.pool.ntp.org iburst已被注释,无需修改"
elsesudo sed -i '/pool 2.rhel.pool.ntp.org iburst/s/^/#/' /etc/chrony.confecho "chrony——已成功注释pool 2.rhel.pool.ntp.org iburst"
fi
chrony_server="server 172.25.250.102 iburst"
if grep -q "\$chrony_server" /etc/chrony.conf
thenecho "chrony——server 172.25.250.102 iburst已存在,无需添加"
elsesudo sed -i '\$a'"\$chrony_server" /etc/chrony.confecho "chrony——server 172.25.250.102 iburst已成功添加"
fi
sudo sed -i '/^#log measurements statistics tracking/s/^#//' /etc/chrony.conffhq_ntp1=`firewall-cmd --list-services | grep -o  ntp`
if [ -z \$fhq_ntp1 ] 
then
firewall-cmd --permanent --add-service=ntp &> /dev/null
firewall-cmd --reload   &> /dev/null
echo "ntp的防火墙配置成功"
else
echo "ntp的防火墙配置成功"
fi
ALLEOF

 

七、论坛服务

#luntan
ssh root@172.25.250.106   << ALLEOF
rm -rf /etc/yum.repos.d/*
cat << EOFA > /etc/yum.repos.d/base.repo
[BaseOS]
name=BaseOS
baseurl=/mnt/BaseOS
enabled=1
gpgcheck=0
[Appstream]
name=AppStream
baseurl=/mnt/AppStream
enabled=1
gpgcheck=0
EOFAmount /dev/sr0 /mnt & > /dev/null
dnf install chrony nfs-utils  bind bind-utils php* unzip nginx -y &> /dev/null
mkdir -p /var/www/html/bbs & > /dev/null
mount 172.25.250.104:/bbs /var/www/html/bbs  & > /dev/null
echo '172.25.250.104:/bbs /var/www/html/bbs       nfs   defaults  0 0' >> /etc/fstab
mount -a & > /dev/null
systemctl restart nfs-server  & > /dev/null
cd /var/www/html/bbs
if [ -d "upload" ]
thenecho "Discuz压缩包已解压"
elserm -rf *unzip /root/Discuz_X3.5_SC_UTF8_20230520.zipcdchmod -R 777 /var/www/html/bbs
firm -rf  /etc/nginx/conf.d/* & > /dev/nullcat > /etc/nginx/conf.d/php-fpm.conf << 'EOFA'
upstream php-fpm {server unix:/run/php-fpm/www.sock;
}
EOFAcat > /etc/nginx/conf.d/vhost.conf << 'EOFR'
server {listen 80;server_name bbs.exam.com; # 替换为你的域名root /var/www/html/bbs;       # Discuz源码目录index index.php index.html index.htm;location / {try_files \$uri \$uri/ /index.php?\$args;}
location ~ \.php$ {fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;include fastcgi_params;}location ~ /\.ht {deny all;}
}
EOFRcat >> /etc/resolv.conf << EOFC
search localdomain
nameserver 172.25.250.105
EOFCfirewall-cmd --permanent --add-service=http &> /dev/null
if [ $? -eq 0 ]
thenecho "HTTP service added to firewall successfully."
elseecho "Failed to add HTTP service to firewall."exit 1
fifirewall-cmd --reload &> /dev/null
if [ $? -eq 0 ]
thenecho "Firewall reloaded successfully."
elseecho "Failed to reload firewall."exit 1
fisetsebool -P httpd_use_nfs 1 &> /dev/null
if [ $? -eq 0 ]
thenecho "SELinux boolean httpd_use_nfs set successfully."
elseecho "Failed to set SELinux boolean httpd_use_nfs."exit 1
fisetsebool -P httpd_can_network_connect_db 1 &> /dev/null
if [ $? -eq 0 ]
thenecho "SELinux boolean httpd_can_network_connect_db set successfully."
elseecho "Failed to set SELinux boolean httpd_can_network_connect_db."exit 1
fisystemctl restart nginx.service
ALLEOF

 注意:在远程登录时写入文件时\无法再使得$可以正常写入,于是需要将写入文件时结尾的EOFR加上单引号,来避免这种情况;请确保论坛服务的压缩包在106的主机上。


结果展示及痛点解答

一、若出现404错误则首先查看论坛的nginx服务配置是否正确,检查/etc/nginx/conf.d/目录下面的是否除了php和配置文件有其他文件。

二、若出现数据库连接拒绝访问,则检查mariadb是否支持远程登录。

三、若站点安装之后需要重新安装,由于安装锁定,则请到服务器上删除./data/install.lock,才能重新安装。

四、若在安装时关闭安装界面,则会使得安装失败并且报错,则请恢复快照或者执行三步骤。

五、若nginx由于80端口被占用无法启动,使用fuser -n tcp 80 查看占用端口,并杀死再重新启动。

六、若第一次运行出现了服务无法运行,无法启动请再次运行。

若遇到不可解决问题请留言 ......

 

相关文章:

RHCE实验详解

目录 实验分析 环境拓扑结构 项目需求 主机环境描述 实验步骤 一、密钥互信和主机名更改 二、DNS 三、NGINX 四、MARIADB 五、NFS 六、NTP 七、论坛服务 结果展示及痛点解答 实验分析 环境拓扑结构 项目需求 1. 172.25.250.101 主机上的 Web 服务要求提供 www.ex…...

备赛蓝桥杯之第十五届职业院校组省赛第二题:分享点滴

提示&#xff1a;本篇文章仅仅是作者自己目前在备赛蓝桥杯中&#xff0c;自己学习与刷题的学习笔记&#xff0c;写的不好&#xff0c;欢迎大家批评与建议 由于个别题目代码量与题目量偏大&#xff0c;请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…...

MyBatis 注解开发详解

MyBatis 注解开发详解 MyBatis 支持使用注解来进行数据库操作。注解方式将 SQL 语句直接写在 Java 接口中&#xff0c;通过注解来完成 CRUD&#xff08;增删改查&#xff09;操作&#xff0c;省去了使用 XML 配置的繁琐步骤。这种方式适合简单项目或快速原型开发&#xff0c;因…...

Kivy App开发之UX控件VideoPlayer视频播放

kivy使用VideoPlayer控件实现视频播放,可以控制视频的播放,暂停,音量调节等功能。 在使用VideoPlayer视频播放器时,可以参考下表属性来设置其样式和触发事件。 属性说明source视频路径,默认为空state视频状态,值play,pause,stop,默认为stopthumbnail显示视频的缩略图…...

简单排序算法

异或运算及异或运算实现的swap方法 ^(异或): ^运算是计算机中的位运算&#xff0c;运算规则为相同为0&#xff0c;不同为1&#xff08;也被称为无进位相加&#xff09;。位运算处理效率比常规运算符效率更高。 异或运算遵循的法则&#xff1a; 0^N N N^N 0 异或运算…...

C语言初阶牛客网刷题——JZ17 打印从1到最大的n位数【难度:入门】

1.题目描述 牛客网OJ题链接 题目描述&#xff1a; 输入数字 n&#xff0c;按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3&#xff0c;则打印出 1、2、3 一直到最大的 3 位数 999。 用返回一个整数列表来代替打印n 为正整数&#xff0c;0 < n < 5 示例1 输入&…...

基于springboot+vue的校园二手物品交易系统的设计与实现

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

开发环境搭建-2:配置 python 运行环境(使用 uv 管理 python 项目)

在 WSL 环境中配置&#xff1a;WSL2 (2.3.26.0) Oracle Linux 8.7 官方镜像 UV 介绍 uv软件官网&#xff08;github 需要梯子&#xff0c;没错这个软件的官网真就是 github 页面&#xff09;&#xff1a;https://github.com/astral-sh/uv 中文官网&#xff08;github 需要梯…...

STM32 ST7735 128*160

ST7735 接口和 STM32 SPI 引脚连接 ST7735 引脚功能描述STM32 引脚连接&#xff08;示例&#xff0c;使用 SPI1&#xff09;SCLSPI 时钟信号 (SCK)PA0(SPI1_SCK)SDASPI 数据信号 (MOSI)PA1 (SPI1_MOSI)RST复位信号 (Reset)PA2(GPIO 手动控制)DC数据/命令选择 (D/C)PA3 (GPIO 手…...

【面试总结】FFN(前馈神经网络)在Transformer模型中先升维再降维的原因

FFN&#xff08;前馈神经网络&#xff09;在Transformer模型中先升维再降维的设计具有多方面的重要原因&#xff0c;以下是对这些原因的总结&#xff1a; 1.目标与动机 高维映射空间&#xff1a;FFN的设计目的是通过一系列线性变换来拟合一个高维的映射空间&#xff0c;而不仅…...

VB读写ini配置文件将运行文件放入任务计划程序设置为开机自启动

本示例使用设备&#xff1a; https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1bWmhJZJ&ftt&id562957272162 Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpAppl…...

Java基础 (一)

基础概念及运算符、判断、循环 基础概念 关键字 数据类型 分为两种 基本数据类型 标识符 运算符 运算符 算术运算符 隐式转换 小 ------>>> 大 强制转换 字符串 拼接符号 字符 运算 自增自减运算符 ii赋值运算符 赋值运算符 包括 强制转换 关系运算符 逻辑运算符 …...

数据结构——实验六·散列表

嗨~~欢迎来到Tubishu的博客&#x1f338;如果你也是一名在校大学生&#xff0c;正在寻找各种编程资源&#xff0c;那么你就来对地方啦&#x1f31f; Tubishu是一名计算机本科生&#xff0c;会不定期整理和分享学习中的优质资源&#xff0c;希望能为你的编程之路添砖加瓦⭐&…...

springboot网上书城

摘 要 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括网上书城管理系统的网络应用&#xff0c;在国外网上书城管理系统已经是很普遍的方式&#xff0c;不过国内的书城管理系统可能还处于起步阶段。网上书城管理系统具有网上…...

如何在 Pytest 中使用命令行界面和标记运行测试

关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理&#xff0c;构建成功的基石 在自动化测试工作之前&#xff0c;你应该知道的10条建议 在自动化测试中&#xff0c;重要的不是工具 在前文你已经初步尝试编写了代码和单元测试&#xff0c;并且想要确保它能正常运行。…...

不建模,无代码,如何构建一个3D虚拟展厅?

在数字化浪潮的推动下&#xff0c;众多企业正积极探索线上3D虚拟展厅这一新型展示平台&#xff0c;旨在以更加生动、直观的方式呈现其产品、环境与综合实力。然而&#xff0c;构建一个既专业又吸引人的3D虚拟展厅并非易事&#xff0c;它不仅需要深厚的技术支持&#xff0c;还需…...

github汉化

本文主要讲述了github如何汉化的方法。 目录 问题描述汉化步骤1.打开github&#xff0c;搜索github-chinese2.打开项目&#xff0c;打开README.md3.下载安装脚本管理器3.1 在README.md中往下滑动&#xff0c;找到浏览器与脚本管理器3.2 选择浏览器对应的脚本管理器3.2.1 点击去…...

Unity Line Renderer Component入门

Overview Line Renderer 组件是 Unity 中用于绘制连续线段的工具。它通过在三维空间中的两个或两个以上的点的数组&#xff0c;并在每个点之间绘制一条直线。可以绘制从简单的直线到复杂的螺旋线等各种图形。 1. 连续性和独立线条 连续性&#xff1a;Line Renderer 绘制的线条…...

数据库的三级模式结构与两级映像

三级模式结构与两级映像 什么是数据库的三级模式结构&#xff1f;1. 模式&#xff08;Conceptual Schema&#xff0c;概念模式&#xff09;定义特点作用示例 2. 外模式&#xff08;External Schema&#xff0c;外部模式&#xff09;定义特点作用举例 3. 内模式&#xff08;Inte…...

TCP断开通信前的四次挥手(为啥不是三次?)

1.四次握手的过程 客户端A发送 FIN&#xff08;终止连接请求&#xff09; A&#xff1a;我要断开连接了&#xff08;FIN&#xff09;。A进入FIN_WAIT_1状态&#xff0c;表示请求断开&#xff0c;等待对方确认。 服务器B回复 ACK&#xff08;确认断开请求&#xff0c;但还未准备…...

蓝牙抓包不求人:从HCI日志里‘挖’出Link Key的两种实用方法(附安卓路径)

蓝牙安全逆向实战&#xff1a;从HCI日志中提取Link Key的深度解析在蓝牙协议安全研究领域&#xff0c;Link Key作为设备配对认证的核心凭证&#xff0c;其获取方式一直是逆向工程师关注的焦点。许多安全审计场景下&#xff0c;我们往往只能获得加密后的HCI通信日志&#xff0c;…...

基于LM22678的树莓派硬盘专用电源设计:解决供电不稳与电流冲击

1. 项目概述&#xff1a;为什么我们需要一个“专用”电源&#xff1f;如果你正在用树莓派搭配一块机械硬盘搭建一个家庭服务器或者个人云存储&#xff0c;可能已经遇到了一个不大不小的麻烦&#xff1a;供电不稳。树莓派官方推荐的5V/3A电源&#xff0c;单独带树莓派4B跑满负载…...

极致精简,功能强大的PDF编辑工具

这是一款功能全面的PDF编辑工具 你只需要导入一份PDF格式文件 就可以快速的对它进行插入 批注编辑保护转换等各种操作 而且无需登录 也可以直接使用 在插入选项中可以进行插入文字图片 页面页眉页脚页码文档背景水印视频音频等 在批注选项中可以管理批注隐藏批注 高亮显示 文本…...

2026长沙智能家居品牌实测,这些本地老牌值得选

2026年&#xff0c;长沙的智能家居市场已经从“概念热”转向“落地战”。我走访了长沙多个本地服务商&#xff0c;实测了不同品牌在别墅、酒店、大平层等场景的真实表现。今天&#xff0c;结合数据与案例&#xff0c;分享几个值得关注的本地品牌&#xff0c;尤其是深耕8年以上的…...

CANoe诊断测试没CDD文件怎么办?手把手教你用Fault Memory窗口和CAPL脚本读取解析DTC故障码

CANoe诊断测试无CDD文件的实战解决方案&#xff1a;从Fault Memory到CAPL脚本全解析当CDD文件缺失或定义不清晰时&#xff0c;诊断测试工程师常常陷入困境。本文将深入探讨如何利用Fault Memory窗口的基础功能&#xff0c;并通过CAPL脚本实现更灵活、更强大的故障码读取与解析方…...

CSharpVerbalExpressions常见问题解答:解决开发者遇到的10个典型挑战

CSharpVerbalExpressions常见问题解答&#xff1a;解决开发者遇到的10个典型挑战 【免费下载链接】CSharpVerbalExpressions 项目地址: https://gitcode.com/gh_mirrors/cs/CSharpVerbalExpressions CSharpVerbalExpressions是一个强大的C#库&#xff0c;它通过类自然语…...

脉冲神经网络加速器设计与边缘计算优化

1. 脉冲神经网络加速器的设计挑战与突破在边缘计算领域&#xff0c;脉冲神经网络(SNN)正以其独特的生物启发特性引发新一轮技术变革。与传统人工神经网络(ANN)相比&#xff0c;SNN通过离散的脉冲信号传递信息&#xff0c;模拟生物神经元的工作机制&#xff0c;理论上可实现超低…...

HoRain云--CLAUDE.md 使用指南

&#x1f3ac; HoRain云小助手&#xff1a;个人主页 &#x1f525; 个人专栏: 《Linux 系列教程》《c语言教程》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站&#xff0c;性价比超高&#xff0c;大内存超划算&#xff01;…...

Keil µVision反汇编窗口内容导出方案与调试技巧

1. 问题背景与需求解析在嵌入式开发过程中&#xff0c;调试环节往往占据大量时间。Keil Vision作为业界广泛使用的集成开发环境(IDE)&#xff0c;其调试器功能强大但某些细节功能仍有提升空间。最近我在使用C251架构开发汽车电子控制单元时&#xff0c;就遇到了一个看似简单却影…...

学习日志(三)【php语法学习,iscc校赛wp】

1. 任务 1.1.1.1.1.1. 知识部分 rce看【之前的笔记&#xff1f;】php的知识点学习继续jwt token好像是比赛的题目考察内容&#xff0c;我看看php伪协议 1.1.1.1.1.2. 题目 参加iscc比赛【五一】rce题目 1.1.1.1.1.3. 环境配置 把vscode搞好&#xff0c;上学期没有把Php配…...