OpsStack:小型企业全栈运维一体化平台(本地单机测试,非服务器最终配置)
| 原有层级 | 原有技术选型 | 后续新增/升级技术选型 |
| 操作系统与网络 | IPTABLES 防火墙(替代/补充 Firewalld)、CentOS Stream 9 |
|
| 自动化运维 | Shell 脚本 + Cron、Ansible 自动化部署/配置 + Git 版本控制 |
|
| 高可用 | LVS+Keepalived 负载均衡(单服务器模拟双节点) |
|
| 监控告警 | Prometheus + Grafana | 新增 Zabbix 监控(双监控方案) |
| 脚本编程 | Shell 脚本 | Python 运维脚本(备份、巡检、告警增强) |
| 云平台整合 | 基础云服务器 | 阿里云/腾讯云 OSS(备份存储)+ 云监控联动 |
| Web 服务 | Nginx 反向代理、Apache 服务(双 Web 服务器对比部署) |
|
架构图

1、操作系统与网络搭建
1.1 IPTABLES 规则配置
- IPTABLES 规则配置( IPTABLES 防火墙配置):
- 清空默认规则,配置链策略(INPUT/OUTPUT/FORWARD 默认为 DROP)
- 开放核心端口:22(SSH)、80(HTTP)、443(HTTPS)、10050(Zabbix Agent)、9100(node_exporter)
- 配置端口转发:将公网 80 端口转发至 LVS 虚拟 IP 端口(模拟负载均衡入口)
- 配置防 DDOS 规则:限制单 IP 每秒连接数(如 100 个),防止恶意攻击
- 保存 IPTABLES 规则(iptables-save > /etc/sysconfig/iptables),设置开机自启
1.1.1 操作前置说明
- 操作环境:CentOS 7(默认使用
firewalld,需先禁用,改用iptables)- 权限要求:必须以
root用户执行(或sudo权限)- 核心原则:先清空默认规则→配置链策略→开放必要端口→配置转发 / 防护规则→保存并开机自启
1.1.2 具体操作步骤
1. 禁用
firewalld,安装并启用iptablesCentOS 7 默认使用
firewalld,需先禁用,避免与iptables冲突:
# 1. 停止 firewalld 服务
systemctl stop firewalld
# 2. 禁用 firewalld 开机自启
systemctl disable firewalld
# 3. 安装 iptables-services(提供 iptables 服务管理功能)
yum install -y iptables-services
# 4. 启动 iptables 服务
systemctl start iptables
# 5. 设置 iptables 开机自启
systemctl enable iptables
2. 清空现有规则,配置默认链策略(INPUT/OUTPUT/FORWARD 默认为 DROP)
默认链策略设为
DROP(最严格防护),后续仅开放必要端口,避免误放风险:注意:执行完 iptables -P INPUT DROP 会断开当前的ssh链接,也就是端口22被禁
后续继续配到端口开放就能解决当前问题
# 1. 清空 nat 表规则(端口转发需用到 nat 表)
iptables -t nat -F
# 2. 清空 filter 表规则(核心过滤表,控制端口、连接等)
iptables -F
# 3. 清空 mangle 表规则(可选,本项目暂用不到,清空避免干扰)
iptables -t mangle -F
# 4. 删除自定义链(若有,避免残留)
iptables -X
iptables -t nat -X
iptables -t mangle -X
# 5. 配置默认链策略(关键:默认拒绝所有流入、转发,允许所有流出)
iptables -P INPUT DROP # 默认拒绝所有外部流入连接
iptables -P FORWARD ACCEPT # 允许转发流量
iptables -P OUTPUT ACCEPT # 默认允许所有内部流出连接(不影响服务器主动访问外部)
# 3. 补充关键的“响应流量允许”规则
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
3. 开放核心端口(按项目需求精准开放,不冗余)
开放 SSH(22)、HTTP(80)、HTTPS(443)、Zabbix Agent(10050)、node_exporter(9100),同时添加状态匹配(仅允许已建立的连接回流):
# 1. 允许 SSH 连接(仅允许已建立的连接,防止暴力破解)
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
# 2. 允许 HTTP 连接(80 端口,LVS 负载均衡入口)
iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
# 2. 允许 HTTP 连接(8080 端口)
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
# 3. 允许 HTTPS 连接(443 端口,项目若需 HTTPS 可保留,暂不启用也可先开放)
iptables -A INPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
# 4. 允许 Zabbix Agent 连接(10050 端口,Zabbix Server 采集数据用)
iptables -A INPUT -p tcp --dport 10050 -m state --state NEW,ESTABLISHED -j ACCEPT
# 5. 允许 node_exporter 连接(9100 端口,Prometheus 采集性能指标用)
iptables -A INPUT -p tcp --dport 9100 -m state --state NEW,ESTABLISHED -j ACCEPT
# 6. 允许回环地址(lo 接口,服务器内部进程通信必需,如 MySQL 本地连接)
iptables -A INPUT -i lo -j ACCEPT
4. 配置端口转发(公网 80 → LVS 虚拟 IP 端口,模拟负载均衡入口)
我的LVS 虚拟 IP(VIP)为
124.126.0.100,本地的IP地址为:192.168.30.12,后端 Web 服务端口为8080(需与后续 Nginx/Apache 配置一致):LVS VIP 提前配置
虚拟机配置:添加第二块网卡
https://blog.csdn.net/weixin_64378412/article/details/154087131?fromshare=blogdetail&sharetype=blogdetail&sharerId=154087131&sharerefer=PC&sharesource=weixin_64378412&sharefrom=from_link
云服务器配置:
在云平台(如阿里云、腾讯云),需先在云控制台的 “弹性网卡” 功能中添加
192.168.30.100作为辅助私网 IP,否则云平台会拦截该 IP 的流量,导致配置不生效。
# 1. 开启 IP 转发(必需,否则无法实现转发功能)
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p # 生效配置
# 2. 配置 nat 表转发规则(公网 80 端口流量转发到 LVS VIP 的 8080 端口)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 124.126.0.100:8080
# 3. 配置回流规则(后端服务响应流量需通过 VIP 回流,避免客户端无法接收响应)
iptables -t nat -A POSTROUTING -d 124.126.0.100 -p tcp --dport 8080 -j SNAT --to-source 192.168.30.12 (服务器实际内网 IP)
5. 配置防 DDOS 规则(限制单 IP 每秒连接数)
通过
connlimit模块限制单 IP 每秒最大连接数(100 个),防止恶意攻击:
# 1. 限制单 IP 每秒连接数(针对 80 端口,HTTP 服务)
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 100 --connlimit-mask 32 -j DROP
# 2. 限制单 IP 总连接数(可选,进一步加强防护)
iptables -A INPUT -p tcp -m connlimit --connlimit-above 200 --connlimit-mask 32 -j DROP
6. 保存规则并验证
# 1. 保存规则到 /etc/sysconfig/iptables(永久生效)
iptables-save > /etc/sysconfig/iptables
# 2. 验证规则是否生效(查看 filter 表和 nat 表规则)
iptables -L -n # 查看 filter 表规则(开放的端口、防 DDOS 规则)
iptables -t nat -L -n # 查看 nat 表规则(端口转发规则)
三、注意事项
- 端口冲突:若后续部署 Nginx/Apache 时提示 80 端口被占用,需确认
iptables规则是否正确,或检查是否有其他服务(如httpd)占用 80 端口。- 云服务器特殊配置:部分云服务器(如阿里云、腾讯云)有「安全组」功能,需在云控制台开放对应端口(22、80、443 等),否则
iptables规则生效但公网无法访问。- 规则备份:修改
iptables规则前,建议先备份现有规则:iptables-save > /etc/sysconfig/iptables.bak,避免误操作导致服务中断。- LVS 联动调整:后续部署 LVS+Keepalived 时,需确保
FORWARD链策略为ACCEPT(或添加针对性转发规则),否则 LVS 无法转发流量到后端服务。
四、验证步骤(确保配置生效)
- 本地验证:在服务器本地执行
curl http://127.0.0.1:80,应能看到 LVS 转发后的 Web 服务页面(后续部署 Nginx 后验证)。- 远程验证:从另一台机器(或本地电脑)执行
curl http://服务器公网 IP,应能正常访问 Web 服务,且单 IP 超过 100 连接时会被拒绝(可通过ab -n 200 -c 100 http://服务器公网 IP/测试)。- 监控端口:执行
netstat -tulpn | grep iptables,确认iptables服务正常运行,且监听对应端口。
2、Web服务:Nginx+Apache双服务部署(新增“OpsStack企业展示站+PHP博客”)
2.2 Step 1:环境依赖安装
1. 系统更新与基础工具安装
# 系统更新(确保软件源最新)
dnf update -y
# 安装基础工具(wget下载模板、unzip解压、mariadb数据库)
dnf install -y wget unzip mariadb-server mariadb
2. 安装 Nginx(静态资源服务)
# 安装EPEL仓库(Nginx依赖)
yum install -y epel-release
# 安装Nginx
yum install -y nginx
# 启动并设置开机自启
systemctl start nginx
systemctl enable nginx
# 验证Nginx状态
systemctl status nginx
3. 安装 Apache+PHP(动态 PHP 服务,适配 WordPress)
(1)卸载旧版 MariaDB
# 停止旧服务(若存在)
systemctl stop mariadb 2>/dev/null
# 卸载旧包
yum remove -y mariadb-server mariadb 2>/dev/null
(2)添加 MariaDB 10.6 IPv4 兼容仓库(解决网络不可达问题)
# 删除旧仓库配置(若存在)
rm -f /etc/yum.repos.d/MariaDB.repo
# 创建新仓库(使用阿里云IPv4镜像,稳定性更高)
cat < /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = https://mirrors.aliyun.com/mariadb/yum/10.6/centos7-amd64/
gpgkey = https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1
EOF
(3)安装 MariaDB 10.6
# 清理缓存并更新
yum clean all && yum makecache
# 安装MariaDB服务和客户端
yum install -y MariaDB-server MariaDB-client
# 启动MariaDB并设置开机自启
systemctl start mariadb
systemctl enable mariadb
# 初始化MariaDB(设置root密码,删除匿名用户等)
mariadb-secure-installation
# 按提示操作:设置root密码(如123456)→ 移除匿名用户(Y)→ 禁止root远程登录(Y)→ 删除测试数据库(Y)→ 刷新权限(Y)
# 查看版本(需显示10.6+)
mysql -u root -p -e "SELECT VERSION();"
4. 升级 PHP 到 8.3+(WordPress 版本要求)
(1)启用 Remi 仓库(提供 PHP 8.3)
# 安装Remi仓库
yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# 安装 yum-utils
yum install -y yum-utils
# 启用PHP 8.3仓库
yum-config-manager --enable remi-php83
清理 YUM 缓存并更新
yum clean all
yum makecache
(2)安装 PHP 8.3 及 WordPress 必需扩展
yum install -y php php-cli php-mysqlnd php-zip php-devel php-gd php-mbstring php-curl php-xml php-json php-xmlrpc
(3)验证 PHP 版本
# 查看版本(需显示8.3+)
php -v
2.2 Step 2:Apache 核心配置(端口 + MPM 模块)
1. 修改 Apache 监听端口为 8080
# 安装Apache(httpd)
yum install -y httpd
# 编辑Apache主配置文件
vim /etc/httpd/conf/httpd.conf
# 找到"Listen 80",修改为:
Listen 8080
# 保存退出(ESC→:wq→回车)
2. 启用 prefork MPM 模块
# 编辑MPM模块配置文件
vim /etc/httpd/conf.modules.d/00-mpm.conf
# 关键:启用prefork模块,注释event/worker模块(默认已注释worker)
# 正确配置如下:
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# LoadModule mpm_event_module modules/mod_mpm_event.so # 注释掉
# LoadModule mpm_worker_module modules/mod_mpm_worker.so # 注释掉
# 保存退出
3. 启动 Apache 并验证配置
# 启动Apache
systemctl start httpd
systemctl enable httpd
# 验证Apache状态(需显示Active: active (running))
systemctl status httpd
# 验证端口监听(需显示8080端口)
ss -tulpn | grep httpd # 输出示例:tcp6 0 0 :::8080 :::* LISTEN 1234/httpd
# 验证MPM模块(需显示prefork模块)
httpd -M | grep mpm # 输出示例:mpm_prefork_module (shared)
2.3、Step 3:Nginx 配置(静态企业站 + 动静分离)
1. 部署自定义企业展示站模板
# 1. 创建Nginx静态目录
mkdir -p /usr/share/nginx/html/opsstack-static
# 安装 Unrar 来解压缩
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
sudo yum install -y unrar
# 2. 假设模板压缩包已上传至/tmp(替换为你的模板文件名)
unrar x /opt/202504007.rar -d /tmp/
mkdir -p /usr/share/nginx/html/opsstack-static
mv /tmp/html /tmp/corp-king-template
cp -r /tmp/corp-king-template/* /usr/share/nginx/html/opsstack-static/
# 3. 修复权限(Nginx需读写权限)
chown -R nginx:nginx /usr/share/nginx/html/opsstack-static/
chmod -R 755 /usr/share/nginx/html/opsstack-static/
2. 配置 Nginx 虚拟主机(静态 + PHP 转发)
# 创建Nginx配置文件
vim /etc/nginx/conf.d/opsstack-web.conf
# 粘贴以下配置
server {
listen 80;
server_name localhost;
# 静态企业站处理
location / {
root /usr/share/nginx/html/opsstack-static;
index index.html index.htm;
try_files $uri $uri/ /index.html; # 避免静态文件404
}
# 静态资源缓存(图片/CSS/JS缓存7天)
location ~* .(jpg|jpeg|png|gif|css|js|ico)$ {
root /usr/share/nginx/html/opsstack-static;
expires 7d;
access_log off; # 关闭缓存文件日志
}
# PHP请求转发给Apache(动静分离核心)
location ~ .php$ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 30s;
proxy_read_timeout 60s;
}
}
# 检查Nginx配置语法(需显示Syntax OK)
nginx -t
# 重启Nginx生效
systemctl restart nginx
2.4、Step 4:Apache 配置(WordPress 部署)
1. 配置 Apache 虚拟主机(8080 端口)
# 创建虚拟主机配置文件
vim /etc/httpd/conf.d/wordpress-blog.conf
# 粘贴以下配置
ServerName localhost
DocumentRoot /var/www/html/wordpress
ErrorLog /var/log/httpd/wordpress_error.log
CustomLog /var/log/httpd/wordpress_access.log combined
# 目录权限(允许Apache读写)
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
# PHP解析规则(确保Apache识别.php文件)
SetHandler application/x-httpd-php
# 默认首页(优先加载index.php)
DirectoryIndex index.php index.html
# 检查Apache配置语法(需显示Syntax OK)
httpd -t
# 添加
vim /var/www/html/wordpress/.htaccess
# BEGIN WordPress
RewriteEngine On
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
# END WordPress
# 重启Apache生效
systemctl restart httpd
2. 下载并部署 WordPress 源码
# 1. 创建WordPress目录
mkdir -p /var/www/html/wordpress
# 2. 下载WordPress最新稳定版 这里我选择的是本地安装包,所以
# wget -O /tmp/wordpress.zip https://wordpress.org/latest.zip
# 3. 解压到Apache目录
unzip /opt/wordpress-6.8.3-zh_CN.zip -d /var/www/html/
# 4. 修复权限(Apache需读写权限,否则无法安装)
chown -R apache:apache /var/www/html/wordpress/
chmod -R 755 /var/www/html/wordpress/
2.5、Step 5:MariaDB 配置(WordPress 数据库)
# 登录MariaDB(输入root密码,如123456)我设置为系统的root用户密码
mysql -u root -p
# 执行SQL创建数据库和用户
CREATE DATABASE IF NOT EXISTS wordpress_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'WpUser@123';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
# 验证数据库连接(输入WpUser@123)
mysql -u wp_user -p
USE wordpress_db;
SHOW TABLES; # 初始无表,显示Empty set即为正常
EXIT;
3、Step 6:WordPress 初始化(浏览器操作)
浏览器输入
http://虚拟机IP:80 或者 http://虚拟机IP:8080(如
http://192.168.30.12:80)
填写数据库信息:
- 数据库名:
wordpress_db- 用户名:
wp_user- 密码:
WpUser@123- 数据库主机:
localhost- 表前缀:
wp_(默认)- 点击「提交」

setenforce 0 可以解决数据库连接失败!但是不建议
1. 安装 SELinux 管理工具(若未安装)
yum install -y setools-console
2. 查看当前是否允许 Apache 连接数据库
getsebool -a | grep httpd_can_network_connect_db
3. 允许 Apache 连接数据库(永久生效)
setsebool -P httpd_can_network_connect_db on
4. 验证设置是否生效
getsebool -a | grep httpd_can_network_connect_db

创建管理员账号:
- 站点标题:
OpsStack运维博客- 用户名:
admin- 密码:
Admin@123(自定义强密码)- 邮箱:
admin@opsstack.com(自定义)- 点击「安装 WordPress」


最终效果总结
| 访问地址 | 处理服务 | 显示内容 |
|---|---|---|
http://192.168.30.12 | Nginx(80 端口) | 静态企业展示站 |
http://192.168.30.12/wordpress/ | Nginx 转发 → Apache(8080 端口) | WordPress 博客 |


外网卡124.126.0.100也可以正常访问









