企业级部署升级:Nginx 反向代理 + ELK 日志监控,让成绩预测平台稳定可追溯

企业级部署升级:Nginx 反向代理 + ELK 日志监控,让成绩预测平台稳定可追溯
 

⭐️个人主页秋邱-ZEEKLOG博客

📚所属栏目:python

前言

上一期的 Docker+Linux 部署,让成绩预测平台实现了局域网共享,但真正落地到团队 / 学校使用,还缺两个关键支撑:访问体验不够专业(IP + 端口难记、无加密),运维排查全靠 “猜”(日志分散、无监控)。

这一期,我们跳出 “步骤式部署” 的框架,以 “问题驱动 + 场景落地” 为核心,先拆解企业级部署的核心诉求,再分模块实现 Nginx 域名化改造和 ELK 日志监控,最后通过实战验收和运维手册,让你既能搞定部署,又能轻松应对后续运维问题,全程聚焦 “实用、稳定、可追溯”。

一、企业级部署的 3 个核心诉求(先明确目标再动手)

为什么互联网公司都在用 “Nginx+ELK”?本质是解决 3 个核心问题,这也是我们本期的落地目标:

  1. 访问层:从 “难用” 到 “好用”
    • 痛点:IP + 端口(192.168.1.100:5000)难记忆、无 HTTPS 加密,数据传输有风险;
    • 目标:用域名(score-pred.school.com)替代 IP,配置 HTTPS 加密,支持多人无感知访问。
  2. 运维层:从 “盲排” 到 “精准定位”
    • 痛点:容器日志、系统日志分散在不同地方,平台报错、访问卡顿找不到原因;
    • 目标:集中收集所有日志,可视化展示运行状态,异常时快速定位问题。
  3. 扩展层:从 “单容器” 到 “可扩容”
    • 痛点:后续用户增多,单容器扛不住并发,无法横向扩展;
    • 目标:通过 Nginx 负载均衡,支持多容器协同,用户量翻倍也不卡顿。

二、核心方案拆解:Nginx 和 ELK 各自解决什么?

1. Nginx:平台的 “门面 + 交通指挥官”

  • 核心角色:反向代理 + 负载均衡 + HTTPS 网关;
  • 3 个关键作用:
    • 域名映射:把 “IP:5000” 转为 “score-pred.school.com”,易记且专业;
    • 安全加密:配置 HTTPS,防止数据传输过程中被窃取;
    • 负载均衡:后续用户增多时,自动分发请求到多个容器,避免单点故障。

2. ELK:平台的 “监控眼 + 黑匣子”

  • 核心角色:日志集中管理 + 可视化监控;
  • 3 个关键作用:
    • 日志采集:把 Nginx 访问日志、平台运行日志、容器日志集中存储;
    • 可视化分析:通过 Kibana 面板,直观看到访问量、报错次数、预测成功率;
    • 异常告警:配置 ERROR 日志触发告警,不用实时盯着,出问题及时提醒。

三、模块一:Nginx 域名化改造(10 分钟搞定 “专业访问”)

前置准备

  • 已备案域名(如score-pred.school.com,测试环境可用本地 hosts 映射);
  • 免费 HTTPS 证书(Let’s Encrypt 提供,全程自动申请);
  • 已部署 Docker 容器的 Linux 服务器(Ubuntu 20.04/22.04)。

实战步骤(直接复制命令 + 配置)

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为你的域名):

# 强制HTTP转HTTPS(安全优先) server { listen 80; server_name score-pred.school.com; return 301 https://$host$request_uri; } # HTTPS核心配置 server { listen 443 ssl; server_name score-pred.school.com; # 后续自动申请的证书路径(无需手动改) ssl_certificate /etc/letsencrypt/live/score-pred.school.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/score-pred.school.com/privkey.pem; # SSL优化(兼容主流浏览器) ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; # 反向代理到Docker容器(容器端口5000) location / { proxy_pass http://127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # 传递真实客户端IP } # 日志记录(方便后续ELK采集) access_log /var/log/nginx/score-pred-access.log; error_log /var/log/nginx/score-pred-error.log; } 
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 # 重启Nginx生效 sudo systemctl restart nginx # 开放443端口(HTTPS默认端口) sudo ufw allow 443 && sudo ufw reload 
  • 验收:浏览器输入https://score-pred.school.com,能正常访问平台且地址栏显示 “小锁”,即配置成功。
5. 负载均衡扩展(用户增多时启用)

如果后续需要扩容,启动多个容器后,修改 Nginx 配置即可:

# 新增负载均衡配置 upstream score_pred_servers { server 127.0.0.1:5000; # 容器1 server 127.0.0.1:5001; # 新增容器2 } # 替换之前的proxy_pass location / { proxy_pass http://score_pred_servers; # 指向负载均衡集群 # 其他配置不变 } 

四、模块二:ELK 日志监控搭建(15 分钟搞定 “精准运维”)

核心逻辑

用 Docker Compose 一键启动 Elasticsearch(存储日志)、Logstash(采集日志)、Kibana(可视化),无需复杂的环境配置,新手也能快速搭建。

实战步骤

1. 安装 Docker Compose 并创建配置
# 安装Docker Compose sudo apt install -y docker-compose-plugin # 创建ELK目录并进入 mkdir -p ~/elk && cd ~/elk # 创建docker-compose.yml(一键启动ELK) nano docker-compose.yml 

粘贴以下配置(限制内存占用,避免服务器卡顿):

version: '3.8' services: # 日志存储:Elasticsearch elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0 container_name: elk-es environment: - discovery.type=single-node # 单节点模式(适合中小型部署) - ES_JAVA_OPTS=-Xms512m -Xmx512m # 限制内存 - xpack.security.enabled=false # 关闭安全验证(测试/内网用) ports: - "9200:9200" volumes: - es-data:/usr/share/elasticsearch/data # 数据持久化 restart: always # 日志采集:Logstash logstash: image: docker.elastic.co/logstash/logstash:8.11.0 container_name: elk-logstash volumes: - ./logstash/pipeline:/usr/share/logstash/pipeline # 采集规则 - /var/log/nginx:/var/log/nginx # 挂载Nginx日志 - /home/ubuntu/score-logs:/app/logs # 挂载平台日志 depends_on: - elasticsearch # 先启动Elasticsearch restart: always # 日志可视化:Kibana kibana: image: docker.elastic.co/kibana/kibana:8.11.0 container_name: elk-kibana ports: - "5601:5601" # Kibana访问端口 environment: - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 depends_on: - elasticsearch restart: always volumes: es-data: # 持久化Elasticsearch数据 
2. 配置 Logstash 日志采集规则
# 创建Logstash配置目录 mkdir -p ~/elk/logstash/pipeline # 创建采集规则文件 nano ~/elk/logstash/pipeline/logstash.conf 

粘贴以下配置(解析 Nginx 和平台日志):

# 输入:采集哪些日志 input { # Nginx访问日志 file { path => "/var/log/nginx/score-pred-access.log" type => "nginx-access" start_position => "beginning" } # 平台运行日志(之前的企业级日志) file { path => "/app/logs/app.log" type => "app-log" start_position => "beginning" } } # 过滤:解析日志格式(让日志结构化) filter { # 解析Nginx访问日志 if [type] == "nginx-access" { grok { match => { "message" => '%{IPORHOST:client_ip} %{USER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:method} %{URIPATH:path} %{HTTPVERSION:http}" %{NUMBER:status} %{NUMBER:bytes}' } } date { match => [ "timestamp", "dd/MMM/yyyy:H:m:s Z" ] } } # 解析平台日志 if [type] == "app-log" { grok { match => { "message" => '%{TIMESTAMP_ISO8601:timestamp} - %{LOGLEVEL:log_level} - %{DATA:module} - %{DATA:msg} - \(file:%{DATA:file}, line:%{NUMBER:line}\)' } } date { match => [ "timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ] } } } # 输出:把解析后的日志存到Elasticsearch output { elasticsearch { hosts => ["elasticsearch:9200"] index => "score-pred-%{type}-%{+YYYY.MM.dd}" # 按日期分索引 } } 
3. 启动 ELK 并配置可视化
# 启动ELK(后台运行) cd ~/elk && sudo docker compose up -d # 查看启动状态(所有服务为healthy即成功) sudo docker compose ps # 开放5601端口(Kibana访问) sudo ufw allow 5601 && sudo ufw reload 
4. Kibana 可视化配置(浏览器操作)
  1. 访问http://服务器IP:5601,进入 Kibana 界面;
  2. 创建索引模式:
    • 点击 “Stack Management”→“Index Patterns”→“Create index pattern”;
    • 输入score-pred-*(匹配所有日志索引),选择时间字段timestamp,完成创建;
  3. 查看日志:
    • 点击 “Discover”,选择创建的索引模式,即可看到实时日志;
    • 可按 “log_level:ERROR” 筛选报错日志,或按时间范围查看访问趋势。
5. 配置异常告警(可选)
  • 点击 “Alerts”→“Create alert”;
  • 触发条件:选择 “Elasticsearch query”,查询log_level: "ERROR",设置 “1 分钟内出现 1 条即告警”;
  • 动作:添加 “发送邮件” 或 “WebHook 通知”,确保及时收到异常提醒。

五、实战验收:3 个场景验证部署效果

场景 1:域名访问测试

  • 操作:用不同设备(电脑、平板)访问https://score-pred.school.com
  • 验收:所有设备能正常打开平台,地址栏显示 “小锁”,数据传输加密。

场景 2:日志排查测试

  • 操作:在平台输入错误数据(如出勤率 120),触发报错;
  • 验收:Kibana 中能快速筛选到 ERROR 日志,显示 “出勤率需在 0-100 之间”,定位问题原因。

场景 3:负载均衡测试(已扩容时)

  • 操作:启动 2 个容器(端口 5000、5001),配置 Nginx 负载均衡;
  • 验收:多次访问平台,Nginx 日志中显示请求均匀分发到 2 个容器。

六、运维必备:常用命令手册(直接复制使用)

Nginx 相关

sudo systemctl restart nginx # 重启Nginx sudo nginx -t # 测试配置 sudo tail -f /var/log/nginx/score-pred-error.log # 实时查看错误日志 

ELK 相关bash

cd ~/elk && sudo docker compose ps # 查看ELK状态 sudo docker logs elk-logstash -f # 查看Logstash采集日志 curl -X DELETE "http://localhost:9200/score-pred-*-2024.01.*" # 删除旧日志 

容器相关

sudo docker ps # 查看运行中的容器 sudo docker restart score-pred-container # 重启平台容器 

七、本期总结

这一期我们以 “问题驱动” 完成了企业级部署升级:Nginx 解决了 “访问体验” 和 “扩展性” 问题,让平台从 “IP + 端口” 升级为 “域名 + HTTPS”,支持横向扩容;ELK 解决了 “运维排查” 问题,让日志从 “分散混乱” 变为 “集中可视化”,异常问题能快速定位。

现在的成绩预测平台,不仅能满足团队共享使用,还具备了企业级系统的稳定性、安全性和可运维性,真正从 “能用” 升级为 “能扛”。

Read more

Windows安装Node.js及环境配置

Node.js安装及环境配置之Windows篇 Node.js安装及环境配置之Windows篇 一、安装环境 二、安装node.js步骤 三、前期准备 四、开始安装 五、环境配置 Node.js安装及环境配置之Windows篇 一、安装环境 1、本机系统:Windows 10(64位) 2、Node.js:vnode-v25.2.1-x64.msi(64位) 二、安装node.js步骤 1、下载对应你系统的Node.js版本:https://nodejs.org/zh-cn/download/ 2、选安装目录进行安装 3、环境配置 4、测试 三、

By Ne0inhk

MySQL 查看本地用户名和密码

文章目录 * 0.启动MySQL服务 * 1. 查看 MySQL 用户名 * 方法 1:使用命令行 * 2. 查看 MySQL 密码(已加密存储,无法直接查看) * 3. 重置 MySQL 密码 * 方法 1:使用命令行重置 root 密码 * 步骤 1:停止 MySQL * 步骤 2:启动 MySQL(跳过权限验证) * 步骤 3:重新打开一个终端,登录 MySQL * 步骤 4:修改密码 * 步骤 5:重启 MySQL * 方法 2:直接修改 `my.

By Ne0inhk
KingbaseES数据库:ksql 命令行从建表到删表实战(含避坑指南)

KingbaseES数据库:ksql 命令行从建表到删表实战(含避坑指南)

KingbaseES数据库:ksql 命令行从建表到删表实战(含避坑指南) 本文围绕 KingbaseES 中 ksql 命令行操作表展开,涵盖表 “创建→查看→数据增删改查→结构修改→删除” 全生命周期。前置准备需连接数据库并切换目标模式,可选确认表空间;创建表要明确数据类型与约束,含基础单表、进阶复合主键表示例;查看表结构可通过 \dt、\d、\d + 命令分别获取表列表、基本结构、详细信息;数据操作聚焦 INSERT(单条 / 批量)、SELECT(全量 / 条件 / 排序)、UPDATE(必加 WHERE)、DELETE(必加 WHERE);结构修改含增列、改列、删列、加约束、改表名;还梳理了三类常见报错解决方案。全文搭配实操命令与验证方法,助力新手快速掌握表操作核心技巧。

By Ne0inhk
Flutter 组件 analyzer_testing 适配鸿蒙 HarmonyOS 实战:分析器插件测试,构建 AST 仿真与编译器级别静态诊断验证架构

Flutter 组件 analyzer_testing 适配鸿蒙 HarmonyOS 实战:分析器插件测试,构建 AST 仿真与编译器级别静态诊断验证架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 analyzer_testing 适配鸿蒙 HarmonyOS 实战:分析器插件测试,构建 AST 仿真与编译器级别静态诊断验证架构 前言 在鸿蒙(OpenHarmony)生态迈向深度定制化研发、涉及高性能自定义 Lint 规则集开发、代码自动化重构工具链及严苛的编译器插件质量底线的背景下,如何实现一套能够精确模拟抽象语法树(AST)、支持在无文件系统环境下执行实时代码分析且具备“像素级”错误定位能力的“分析器测试基座”,已成为决定研发工具链稳定性与代码诊断准确性的命脉。在鸿蒙项目涉及海量 eTS 与 Flutter 代码混合静态检查的复杂场景下,如果开发的分析器插件未经严格的语法全集覆盖测试,由于由于分析引擎的内部状态复杂性,极易由于由于“误报”或“漏报”导致鸿蒙应用在编译期发生难以排查的元数据错误。 我们需要一种能够解耦物理磁盘、支持声明式代码片段输入且具备 AST 结构断言能力的验证方案。 analyzer_testing 为

By Ne0inhk