设备管理平台项目部署实验流程
一、环境规划与前置准备
1. 节点分配
节点名称 | IP 地址 | 部署服务 | |
---|---|---|---|
mysql | 172.16.0.100 | mysql、filebeat | |
nginx | 172.16.0.10 | nginx、filebeat、kibana | |
java | 172.16.0.11 | openjdk、filebeat | |
redis | 172.16.0.12 | redis | |
elk | 172.16.0.13 | ES(Elasticsearch)、logstash |
2. 前置操作(所有节点执行)
关闭防火墙及增强功能(以 CentOS 系统为例):
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
二、各节点部署流程
1. mysql 节点部署(IP:172.16.0.100)
(1)上传安装包
将mysql5720_rpms.tar.gz
(mysql 安装包)和yl_app.sql
(项目数据库脚本)上传至 mysql 节点任意目录(如/opt
)。
(2)安装 mysql
# 解压安装包
tar zxvf mysql5720_rpms.tar.gz
cd mysql5720_rpms
# 本地安装rpm包(自动处理依赖)
yum localinstall -y *.rpm
(3)配置 mysql
# 启动mysql服务
systemctl start mysqld
systemctl enable mysqld# 提取初始密码并修改为临时密码(Admin@123)
initial_pwd=$(grep "password" /var/log/mysqld.log | awk '{print $NF}')
mysql -uroot -p"$initial_pwd" --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'Admin@123';"# 修改配置文件/etc/my.cnf
vim /etc/my.cnf
# 在[mysqld]模块下添加/修改以下内容(原有配置如datadir、socket保留)
[mysqld]
validate_password_policy=LOW # 降低密码强度策略(仅检查长度)
validate_password_length=6 # 最小密码长度设为6位
log_error = /var/log/mysql/mysql_error.log # 错误日志路径
slow_query_log = ON # 开启慢查询日志(原文档缺失"ON",补充修正)
slow_query_log_file = /var/log/mysql/mysql_slow.log # 慢查询日志路径
long_query_time = 2 # 超过2秒判定为慢查询
log_queries_not_using_indexes = ON # 记录未使用索引的查询# 创建日志目录并授权
mkdir -p /var/log/mysql
chown -R mysql:mysql /var/log/mysql# 重启mysql使配置生效
systemctl restart mysqld
(4)设置项目访问密码并导入数据库
# 将root密码修改为项目使用密码(123456)
mysql -uroot -pAdmin@123 -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';"# 导入项目数据库脚本(假设yl_app.sql在/opt目录)
mysql -uroot -p123456 < /opt/yl_app.sql# 验证导入结果
mysql -uroot -p123456 -e "show databases; use yl_app; show tables;"
# 预期输出:23张表,包括mv_devices、sys_dict、tbl_device_info等
(5)安装并配置 filebeat
# 上传filebeat-6.6.1-x86_64.rpm至/opt目录,执行安装
cd /opt
rpm -ivh filebeat-6.6.1-x86_64.rpm# 备份并修改filebeat配置文件
cd /etc/filebeat
cp filebeat.yml filebeat.yml.bak
vim filebeat.yml# 配置输入(采集mysql日志)和输出(指向logstash)
filebeat.inputs:
- type: logenabled: truepaths:- /var/log/mysql/mysql_error.log # 错误日志路径fields:service_name: mysql_error_loglog_type: mysql_errorfields_under_root: true
- type: logenabled: truepaths:- /var/log/mysql/mysql_slow.log # 慢查询日志路径fields:service_name: mysql_slow_loglog_type: mysql_slowfields_under_root: true# 注释所有Elasticsearch output配置,启用Logstash output
# ------------------------------Elasticsearch output------------------------------
# 所有相关配置行前加#注释
# ------------------------------Logstash output----------------------------------
output.logstash:hosts: ["172.16.0.13:6000"] # 指向elk节点logstash(原文档IP错误,修正为elk节点IP)# 启动filebeat并验证
filebeat -e -c filebeat.yml & # 后台运行
filebeat test output # 验证连接logstash是否正常,预期输出"talk to server... OK"
2. redis 节点部署(IP:172.16.0.12)
(1)上传并安装 redis
# 上传redis-5.0.7.tar.gz至/opt目录
cd /opt
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/# 编译安装(需提前安装gcc,若未安装执行yum install -y gcc)
make && make PREFIX=/usr/local/redis install# 执行脚本配置redis服务
cd /opt/redis-5.0.7/utils
./install_server.sh # 全程回车,出现"Please select the redis executable path"时,输入/usr/local/redis/bin/redis-server# 创建符号链接便于系统调用
ln -s /usr/local/redis/bin/* /usr/local/bin/
(2)修改配置文件并启动
# 编辑redis配置文件(默认端口6379)
vim /etc/redis/6379.conf
# 修改以下内容
bind 0.0.0.0 # 允许所有IP访问(原文档70行)
protected-mode no # 关闭保护模式(原文档89行)# 重启redis服务
/etc/init.d/redis_6379 restart
# 验证启动:redis-cli ping,预期返回PONG
3. java 节点部署(IP:172.16.0.11)
(1)安装 java 环境
# 安装openjdk(默认安装1.8版本,满足项目需求)
yum install -y java-1.8.0-openjdk-devel
# 验证安装:java -version,预期输出openjdk版本信息
(2)部署微服务 jar 包
# 上传项目jar包(yl_application-1.0-SNAPSHOT.jar)至/opt目录
cd /opt# 启动微服务(设置内存:初始512MB,最大2GB)
nohup java -Xms512m -Xmx2g -jar yl_application-1.0-SNAPSHOT.jar &# 验证启动:查看日志(日志自动生成在/opt/logs目录)
tail -f /opt/logs/yulin-2025-09-30.0.log # 日志文件名按实际日期调整,预期无报错
(3)安装并配置 filebeat
# 上传filebeat-6.6.1-x86_64.rpm至/opt目录,执行安装
cd /opt
rpm -ivh filebeat-6.6.1-x86_64.rpm# 备份并修改filebeat配置文件
cd /etc/filebeat
cp filebeat.yml filebeat.yml.bak
vim filebeat.yml# 配置输入(采集微服务日志)和输出(指向logstash)
filebeat.inputs:
- type: logenabled: truepaths:- /opt/logs/yulin-*.log # 采集所有微服务日志fields:service_name: yulin_log # 原文档"yvlin_log"拼写错误,修正为"yulin_log"log_type: java_businessfields_under_root: true# 注释Elasticsearch output,启用Logstash output
# ------------------------------Elasticsearch output------------------------------
# 所有相关配置行前加#注释
# ------------------------------Logstash output----------------------------------
output.logstash:hosts: ["172.16.0.13:6002"] # 指向elk节点logstash(原文档IP错误,修正为elk节点IP)# 启动filebeat并验证
filebeat -e -c filebeat.yml &
filebeat test output # 验证连接,预期"talk to server... OK"
4. nginx 节点部署(IP:172.16.0.10)
(1)安装 nginx 依赖并编译安装
# 安装依赖包
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel unzip# 创建nginx运行用户(无登录权限)
useradd -M -s /sbin/nologin nginx# 上传nginx-1.20.2.tar.gz至/opt目录,解压并编译安装
cd /opt
tar zxvf nginx-1.20.2.tar.gz -C /opt/
cd /opt/nginx-1.20.2/# 配置编译参数
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module# 编译安装
make && make install# 创建符号链接便于系统调用
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
(2)配置 nginx 系统服务并启动
# 创建nginx服务文件
cat > /lib/systemd/system/nginx.service <<EOF
[Unit]
Description=nginx
After=network.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP \$MAINPID # 原文档缺失\,修正为\$MAINPID
ExecStop=/bin/kill -s QUIT \$MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target
EOF# 授权并启动服务
chmod 754 /lib/systemd/system/nginx.service
systemctl daemon-reload
systemctl start nginx.service
systemctl enable nginx.service# 验证启动:curl http://127.0.0.1,预期返回nginx默认页面
(3)部署前端项目并修改 nginx 配置
# 上传前端压缩包dist.zip至/opt目录,解压到nginx html目录
unzip /opt/dist.zip -d /usr/local/nginx/html# 备份并修改nginx配置文件(指向微服务)
cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
vim /usr/local/nginx/conf/nginx.conf# 修改server模块配置(替换原有server内容)
server {listen 80;server_name 172.16.0.10; # nginx节点IPcharset utf-8;index index.html index.htm;root /usr/local/nginx/html/dist; # 前端项目根目录# 反向代理到java微服务location /ylApp {proxy_set_header X-Real-IP \$remote_addr;proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;proxy_set_header Host \$http_host;proxy_set_header X-NginX-Proxy true;proxy_pass http://172.16.0.11:8090; # 原文档IP错误,修正为java节点IPproxy_redirect off;}# 错误页面配置error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}
}# 重启nginx使配置生效
systemctl restart nginx
(4)安装 kibana
# 上传kibana-6.6.1-x86_64.rpm至/opt目录,执行安装
cd /opt
rpm -ivh kibana-6.6.1-x86_64.rpm# 备份并修改kibana配置文件
cp /etc/kibana/kibana.yml /etc/kibana/kibana.yml.bak
vim /etc/kibana/kibana.yml# 修改以下配置(取消注释并调整)
server.port: 5601 # kibana默认端口
server.host: "0.0.0.0" # 允许所有IP访问
elasticsearch.hosts: ["http://172.16.0.13:9200"] # 原文档IP错误,修正为elk节点ES地址
kibana.index: ".kibana" # ES中kibana索引名# 启动kibana并设置开机自启
systemctl start kibana.service
systemctl enable kibana.service# 验证启动:netstat -natp | grep 5601,预期显示5601端口监听
(5)安装并配置 filebeat
# 上传filebeat-6.6.1-x86_64.rpm至/opt目录,执行安装
cd /opt
rpm -ivh filebeat-6.6.1-x86_64.rpm# 备份并修改filebeat配置文件
cd /etc/filebeat
cp filebeat.yml filebeat.yml.bak
vim filebeat.yml# 配置输入(采集nginx日志)和输出(指向logstash)
filebeat.inputs:
- type: logenabled: truepaths:- /usr/local/nginx/logs/access.log # nginx访问日志fields:service_name: nginx_access_loglog_type: nginx_accessfields_under_root: true
- type: logenabled: truepaths:- /usr/local/nginx/logs/error.log # nginx错误日志fields:service_name: nginx_error_loglog_type: nginx_errorfields_under_root: true# 注释Elasticsearch output,启用Logstash output
# ------------------------------Elasticsearch output------------------------------
# 所有相关配置行前加#注释
# ------------------------------Logstash output----------------------------------
output.logstash:hosts: ["172.16.0.13:6001"] # 指向elk节点logstash(原文档IP错误,修正为elk节点IP)# 启动filebeat并验证
filebeat -e -c filebeat.yml &
filebeat test output # 验证连接,预期"talk to server... OK"
5. elk 节点部署(IP:172.16.0.13)
(1)安装 Elasticsearch(ES)
# 安装java环境(ES依赖java)
yum install -y java-1.8.0-openjdk-devel
java -version # 验证安装# 上传elasticsearch-6.6.1.rpm至/opt目录,执行安装
cd /opt
rpm -ivh elasticsearch-6.6.1.rpm# 加载系统服务并设置开机自启
systemctl daemon-reload
systemctl enable elasticsearch.service# 备份并修改ES配置文件
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml# 修改以下配置(取消注释并调整)
node.name: node1 # 节点名称
path.data: /data/elk_data # 数据存储路径
path.logs: /var/log/elasticsearch # 日志存储路径
bootstrap.memory_lock: false # 启动时不锁定内存
network.host: 0.0.0.0 # 允许所有IP访问
http.port: 9200 # ES默认端口# 创建数据目录并授权
mkdir -p /data/elk_data
chown -R elasticsearch:elasticsearch /data/elk_data/# 启动ES并验证
systemctl start elasticsearch.service
# ES启动较慢,等待30秒后验证:curl http://172.16.0.13:9200
# 预期输出:包含"name":"node1"、"version":{"number":"6.6.1"}等信息
(2)安装 logstash
# 上传logstash-6.6.1.rpm至/opt目录,执行安装
cd /opt
rpm -ivh logstash-6.6.1.rpm# 启动logstash并设置开机自启
systemctl start logstash.service
systemctl enable logstash.service# 创建符号链接便于系统调用
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/# 测试logstash基础功能(标准输入输出)
logstash -e 'input { stdin{} } output { stdout{} }'
# 输入"www.baidu.com",预期输出包含"message":"www.baidu.com"的JSON格式数据,按Ctrl+C退出
(3)配置 logstash 多管道(对接各节点 filebeat)
① 配置 mysql 日志管道(端口 6000)
# 创建mysql日志配置文件
cd /etc/logstash/conf.d
vim mysql_log.conf# 写入以下内容
input {beats {port => "6000" # 对应mysql节点filebeat输出端口}
}
output {elasticsearch {hosts => ["http://172.16.0.13:9200"] # 指向本地ESindex => "%{service_name}-%{+YYYY.MM.dd}" # 索引名:服务名+日期}stdout {codec => rubydebug # 控制台输出调试}
}# 校验配置文件语法
logstash -t -f mysql_log.conf
# 预期输出:"Config Validation Result: OK"
② 配置 nginx 日志管道(端口 6001)
# 创建nginx日志配置文件
vim nginx_log.conf# 写入以下内容
input {beats {port => "6001" # 对应nginx节点filebeat输出端口}
}
output {elasticsearch {hosts => ["http://172.16.0.13:9200"]index => "%{service_name}-%{+YYYY.MM.dd}"}stdout {codec => rubydebug}
}# 校验语法
logstash -t -f nginx_log.conf
③ 配置 java 日志管道(端口 6002)
# 创建java日志配置文件
vim java_log.conf# 写入以下内容
input {beats {port => "6002" # 对应java节点filebeat输出端口}
}
output {elasticsearch {hosts => ["http://172.16.0.13:9200"]index => "%{service_name}-%{+YYYY.MM.dd}"}stdout {codec => rubydebug}
}# 校验语法
logstash -t -f java_log.conf
④ 配置 logstash 多管道管理
# 备份并修改管道配置文件
cp /etc/logstash/pipelines.yml /etc/logstash/pipelines.yml.bak
vim /etc/logstash/pipelines.yml# 注释默认配置,添加以下多管道配置
- pipeline.id: mysql_logpath.config: "/etc/logstash/conf.d/mysql_log.conf"
- pipeline.id: nginx_logpath.config: "/etc/logstash/conf.d/nginx_log.conf"
- pipeline.id: java_logpath.config: "/etc/logstash/conf.d/java_log.conf"# 重启logstash使多管道生效
systemctl restart logstash.service# 验证管道运行:查看logstash日志
grep "\[mysql_log\]" /var/log/logstash/logstash-plain.log # 查看mysql管道日志
grep "\[nginx_log\]" /var/log/logstash/logstash-plain.log # 查看nginx管道日志
# 预期无报错信息
三、整体功能验证
1. 项目访问验证
打开浏览器,输入http://172.16.0.10
(nginx 节点 IP),预期跳转至 “设备管理平台” 登录页,使用账号(如 admin,默认密码 123456,文档中用户表含 yang/lyang 等账号)登录,可正常访问 “首页”“设备管理”“系统管理” 等菜单。
2. 日志收集验证
(1)添加测试日志(各节点执行)
# mysql节点:添加测试日志
echo "=== Filebeat Test Log $(date) ===" >> /var/log/mysql/mysql_error.log
echo "=== Filebeat Test Log $(date) ===" >> /var/log/mysql/mysql_slow.log# nginx节点:添加测试日志
echo "=== Filebeat Test Log $(date) ===" >> /usr/local/nginx/logs/access.log
echo "=== Filebeat Test Log $(date) ===" >> /usr/local/nginx/logs/error.log# java节点:添加测试日志(微服务日志目录)
echo "=== Filebeat Test Log $(date) ===" >> /opt/logs/yulin-2025-09-30.0.log
(2)kibana 日志查看
- 浏览器访问
http://172.16.0.10:5601
(nginx 节点 kibana 地址),进入 Kibana 界面。 - 进入 “Index Management”,预期显示
mysql_error_log-2025.09.30
、nginx_access_log-2025.09.30
、yulin_log-2025.09.30
等索引(日期按实际测试日期调整)。 - 进入 “Discover”,创建索引模式(如
*_log-*
),可查询到各节点添加的测试日志,验证日志收集正常。
四、常见问题排查
- filebeat 无法连接 logstash:执行
filebeat test output
验证连接,检查 logstash 端口是否开放(如 6000/6001/6002)、elk 节点防火墙是否关闭。 - logstash 管道报错:执行
logstash -t -f 配置文件路径
校验语法,查看/var/log/logstash/logstash-plain.log
定位错误。 - ES 启动失败:检查
/var/log/elasticsearch/
下日志,确认/data/elk_data
目录权限是否为elasticsearch:elasticsearch
。 - nginx 反向代理失败:查看
/usr/local/nginx/logs/error.log
,确认 java 节点微服务是否正常运行(ps -ef | grep yl_application
)、端口 8090 是否监听。