一、企业级部署的三大核心诉求
在成绩预测平台从”能用”到”好用”的升级过程中,企业级部署需要解决三个核心问题:
1. 访问层:从”难用”到”好用”
- 痛点:IP+端口(192.168.1.100:5000)难记忆、无HTTPS加密,数据传输存在安全风险
- 目标:使用域名(score-pred.school.com)替代IP,配置HTTPS加密,支持多人无感知访问
2. 运维层:从”盲排”到”精准定位”
- 痛点:容器日志、系统日志分散在不同地方,平台报错、访问卡顿找不到原因
- 目标:集中收集所有日志,可视化展示运行状态,异常时快速定位问题
3. 扩展层:从”单容器”到”可扩容”
- 痛点:后续用户增多,单容器扛不住并发,无法横向扩展
- 目标:通过Nginx负载均衡,支持多容器协同,用户量翻倍也不卡顿
二、核心方案拆解:Nginx与ELK的分工
2.1 Nginx:平台的”门面+交通指挥官”
Nginx承担反向代理、负载均衡、HTTPS网关三大核心角色:
安全加密:配置HTTPS,防止数据传输过程中被窃取
负载均衡:用户增多时自动分发请求到多个容器,避免单点故障
域名映射:用专业域名替代IP+端口,提升访问体验
2.2 ELK:平台的”监控眼+黑匣子”
ELK(Elasticsearch+Logstash+Kibana)实现日志集中管理+可视化监控:
日志采集:集中存储Nginx访问日志、平台运行日志、容器日志
可视化分析:通过Kibana面板直观展示访问量、报错次数、预测成功率
异常告警:配置ERROR日志触发告警,实现问题主动发现
三、模块一:Nginx域名化改造(10分钟搞定专业访问)
3.1 前置准备
- 已备案域名(如score-pred.school.com,测试环境可用本地hosts映射)
- 免费HTTPS证书(Let’s Encrypt提供,全程自动申请)
- 已部署Docker容器的Linux服务器(Ubuntu 20.04/22.04)
3.2 实战步骤
1. 安装Nginx
sudo apt update && sudo apt install -y nginx
sudo systemctl start nginx && sudo systemctl enable nginx
验证:浏览器访问服务器IP,出现Nginx默认页面即成功。
2. 配置域名反向代理
创建Nginx配置文件,实现”域名→容器”映射:
sudo nano /etc/nginx/conf.d/score-pred.conf
粘贴以下配置(替换score-pred.school.com为你的域名):
server {
listen 80;
server_name score-pred.school.com;
# 反向代理配置
location / {
proxy_pass http://localhost:5000; # 容器端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 超时配置
proxy_connect_timeout 30s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# 长连接支持
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
3. 自动申请HTTPS证书(Let’s Encrypt)
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d score-pred.school.com
证书有效期90天,执行sudo certbot renew --dry-run可测试自动续期。
4. 生效配置并验收
sudo nginx -t # 测试配置是否有误
sudo systemctl restart nginx # 重启Nginx生效
sudo ufw allow 443 && sudo ufw reload # 开放443端口
验收:浏览器输入https://score-pred.school.com,能正常访问平台且地址栏显示”小锁”,即配置成功。
3.3 负载均衡扩展(用户增多时启用)
当需要扩容时,启动多个容器后,修改Nginx配置即可:
upstream backend_servers {
server 192.168.1.11:5000 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.1.12:5000 weight=2 max_fails=3 fail_timeout=30s;
server 192.168.1.13:5000 weight=1 max_fails=3 fail_timeout=30s backup;
# 会话保持
ip_hash;
# 健康检查
check interval=3000 rise=2 fall=3 timeout=1000 type=http;
check_http_send "HEAD /health HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
server {
listen 443 ssl http2;
server_name score-pred.school.com;
location / {
proxy_pass http://backend_servers;
# 其他代理配置保持不变
}
}
四、模块二:ELK日志监控搭建(15分钟搞定精准运维)
4.1 核心逻辑
使用Docker Compose一键启动Elasticsearch(存储日志)、Logstash(采集日志)、Kibana(可视化),无需复杂环境配置。
4.2 实战步骤
1. 安装Docker Compose并创建配置
sudo apt install -y docker-compose-plugin
mkdir -p ~/elk && cd ~/elk
nano docker-compose.yml
粘贴以下配置(限制内存占用,避免服务器卡顿):
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.5.0
container_name: elk_elasticsearch
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms512m -Xmx1024m
- xpack.security.enabled=false
volumes:
- esdata:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elk
logstash:
image: docker.elastic.co/logstash/logstash:8.5.0
container_name: elk_logstash
volumes:
- ./logstash/pipeline:/usr/share/logstash/pipeline
ports:
- 5044:5044
depends_on:
- elasticsearch
networks:
- elk
kibana:
image: docker.elastic.co/kibana/kibana:8.5.0
container_name: elk_kibana
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
ports:
- 5601:5601
depends_on:
- elasticsearch
networks:
- elk
volumes:
esdata:
networks:
elk:
driver: bridge
2. 配置Logstash日志采集规则
mkdir -p ~/elk/logstash/pipeline
nano ~/elk/logstash/pipeline/logstash.conf
粘贴以下配置(解析Nginx和平台日志):
input {
beats {
port => 5044
}
}
filter {
# 解析Nginx访问日志
if [type] == "nginx-access" {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}
# 解析应用错误日志
if [type] == "app-error" {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:message}" }
}
date {
match => [ "timestamp", "ISO8601" ]
}
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
index => "score-pred-%{+YYYY.MM.dd}"
}
}
3. 启动ELK并配置可视化
cd ~/elk && sudo docker compose up -d
sudo docker compose ps # 查看启动状态(所有服务为healthy即成功)
sudo ufw allow 5601 && sudo ufw reload # 开放5601端口(Kibana访问)
4. Kibana可视化配置(浏览器操作)
访问http://服务器IP:5601,进入Kibana界面:
- 创建索引模式:点击”Stack Management”→”Index Patterns”→”Create index pattern”
- 输入score-pred-*(匹配所有日志索引),选择时间字段timestamp,完成创建
- 查看日志:点击”Discover”,选择创建的索引模式,即可看到实时日志
- 可按log_level:ERROR筛选报错日志,或按时间范围查看访问趋势
5. 配置异常告警(可选)
- 点击”Alerts”→”Create alert”
- 触发条件:选择”Elasticsearch query”,查询log_level: “ERROR”,设置”1分钟内出现1条即告警”
- 动作:添加”发送邮件”或”WebHook通知”,确保及时收到异常提醒
五、实战验收:三个场景验证部署效果
5.1 场景一:域名访问测试
操作:用不同设备(电脑、平板)访问https://score-pred.school.com
验收:所有设备能正常打开平台,地址栏显示”小锁”,数据传输加密
5.2 场景二:日志排查测试
操作:在平台输入错误数据(如出勤率120),触发报错
验收:Kibana中能快速筛选到ERROR日志,显示”出勤率需在0-100之间”,定位问题原因
5.3 场景三:负载均衡测试(已扩容时)
操作:启动2个容器(端口5000、5001),配置Nginx负载均衡
验收:多次访问平台,Nginx日志中显示请求均匀分发到2个容器
六、运维必备:常用命令手册
6.1 Nginx相关
sudo systemctl restart nginx # 重启Nginx
sudo nginx -t # 测试配置
sudo tail -f /var/log/nginx/score-pred-error.log # 实时查看错误日志
6.2 ELK相关
cd ~/elk && sudo docker compose ps # 查看ELK状态
sudo docker logs elk_logstash -f # 查看Logstash采集日志
curl -X DELETE "http://localhost:9200/score-pred-*-2024.01.*" # 删除旧日志
6.3 容器相关
sudo docker ps # 查看运行中的容器
sudo docker restart score-pred-container # 重启平台容器
七、总结
通过Nginx反向代理+ELK日志监控的企业级部署升级,成绩预测平台实现了三大核心能力的提升:
访问体验升级:从IP+端口升级为域名+HTTPS,支持多人无感知访问,数据传输安全加密
运维能力升级:从分散日志、盲排问题升级为集中监控、精准定位,异常问题快速发现和解决
扩展能力升级:从单容器部署升级为负载均衡架构,支持横向扩容,用户量翻倍也不卡顿
现在的成绩预测平台,不仅能满足团队共享使用,还具备了企业级系统的稳定性、安全性和可运维性,真正从”能用”升级为”能扛”。
若内容若侵犯到您的权益,请发送邮件至:platform_service@jienda.com我们将第一时间处理!
所有资源仅限于参考和学习,版权归JienDa作者所有,更多请访问JienDa首页。
