本文档为日志分析系统完整部署指南,涵盖本地测试部署、服务器正式部署全流程,包含环境准备、依赖安装、数据库启动、服务部署、日志导入、访问验证、问题排查及生产优化等核心内容,适用于内网日志分析后台搭建落地。该系统基于Python+Streamlit+FastAPI+ClickHouse构建,包含日志上传服务、前端分析页面、日志数据存储与解析能力。
一、环境前置要求
基础环境
- Python:需安装适配版本Python,用于运行Web服务及日志解析程序
- Docker & Docker Compose:用于快速部署ClickHouse数据库容器
- 系统环境:支持Windows、Linux等主流系统,本文以Windows操作命令为例,Linux可适配对应指令
项目目录结构
将项目放置于固定无中文、无特殊字符目录(示例:D:\logs、E:\wwwroot\logs),必须保留核心文件及目录,缺一不可:
- 核心启动文件:py、start_app.py、upload_server.py
- 数据库配置文件:docker-compose.yml、sql
- 功能模块目录:views/(页面逻辑)、utils/(工具方法)
- 日志存储目录:raw_logs/(存放待导入日志文件)
二、详细部署步骤
创建Python虚拟环境并安装依赖
项目无自带依赖配置文件,需手动创建虚拟环境、升级pip并安装全部所需依赖包,避免环境冲突。
在项目根目录打开CMD,依次执行以下命令:
| Plain Text python -m venv .venv .venv\Scripts\activate python -m pip install –upgrade pip pip install streamlit pandas altair fastapi uvicorn python-multipart clickhouse-connect duckdb user-agents geoip2 |
依赖包作用说明:
- streamlit:搭建前端日志分析页面
- fastapi、uvicorn、python-multipart:实现日志上传接口服务
- clickhouse-connect:对接ClickHouse数据库,实现日志数据读写
- duckdb:兼容项目预留代码逻辑
- pandas、altair、user-agents、geoip2:用于日志解析、数据可视化、客户端信息解析
生产建议:部署完成后可执行 pip freeze > requirements.txt 生成依赖版本锁定文件,保障后续环境一致性。
启动ClickHouse数据库
项目通过Docker Compose一键部署ClickHouse,自动完成端口映射、数据库初始化、数据表创建。
在项目根目录执行启动命令(适配新旧Docker版本):
| Plain Text # 旧版Docker docker-compose up -d # 新版Docker docker compose up -d |
容器端口映射规则
- HTTP端口:宿主机18123 映射 容器8123
- Native端口:宿主机19000 映射 容器9000
数据库初始化说明
容器首次启动会自动挂载执行init.sql,完成库表创建,默认生成logs数据库,包含access_logs、error_logs数据表及多个物化视图。
启动验证命令
| Plain Text # 查看容器运行状态 docker ps # 验证数据表是否创建成功 docker exec clickhouse-test clickhouse-client -q “SHOW TABLES FROM logs” |
执行成功则输出所有初始化的数据表及物化视图,代表数据库启动正常。
数据库连接配置确认
项目默认采用单机部署模式,数据库连接信息硬编码在核心配置文件中:
- 配置文件:py、utils/log_importer.py
- 默认配置:host=localhost、port=18123、username=default、密码为空
部署适配规则:
- 单机部署:无需修改配置,服务与数据库同机运行,直接适配
- 分布式部署:需手动修改上述两个文件,将localhost替换为远端数据库服务器IP
启动项目Web服务
支持一键启动和分步启动两种方式,推荐新手使用一键启动,简化操作流程。
一键启动(推荐)
执行脚本自动同时启动日志上传服务、Streamlit分析页面:
| Plain Text python start_app.py |
分步启动(自定义调试)
| Plain Text # 启动日志上传服务 python upload_server.py # 启动前端分析页面 streamlit run app.py –server.port 8501 |
服务默认端口
- 日志上传服务 & 健康检查:8765端口
- 前端日志分析页面:8501端口
日志文件导入配置
系统支持两种日志导入方式,仅识别.log、.txt格式文件,最终文件均存储至raw_logs/目录。
本地文件直接导入
将Nginx日志文件直接复制到项目raw_logs/目录,前端页面可自动读取识别。
前端页面上传导入
确保上传服务正常运行,通过分析页面「日志导入管理」模块的上传组件上传文件,上传完成后系统自动合并文件至raw_logs/目录。
执行日志数据导入
- 浏览器访问前端分析页面:http://localhost:8501
- 进入「日志导入管理」标签页,刷新文件列表,选中待导入日志文件
- 自定义填写站点名,设置批量写入大小
- 点击「开始导入全部日志」,执行数据入库操作
- 若站点已有历史数据,可根据需求选择「清空该站点后导入」或「追加导入」
三、服务访问方式
本地访问地址
- 日志分析系统页面:http://localhost:8501
- 上传服务健康检查接口:http://127.0.0.1:8765/health
外网/局域网访问配置
若需其他设备访问服务,需提前开放服务器端口权限:
- 系统防火墙放行:8501、8765端口
- 如需外部调试数据库,额外放行18123端口
- 访问地址替换为服务器公网/内网IP,示例:http://服务器IP:8501
四、生产部署优化与安全规范
原生系统安全短板
项目原生为内网调试工具,不建议直接暴露公网,核心风险点:
- 上传接口无任何鉴权认证,任意访问者均可上传文件
- CORS跨域全开放,允许所有浏览器来源访问
- 数据库连接信息硬编码,无配置分层,不利于运维管理
- Streamlit默认模式仅适用于内部后台,不支持公网高并发访问
正式生产部署架构(推荐)
用户浏览器 → Nginx反向代理 → 内部服务集群,具体分层:
- 统一入口:Nginx反向代理,统一端口、统一流量管控
- 前端服务:Streamlit(8501),配置账号密码或企业SSO认证
- 上传服务:FastAPI(8765),限制仅内网IP访问,关闭公网权限
- 数据层:ClickHouse容器,禁止公网暴露,仅内网服务调用
生产部署优先级步骤
- Docker启动ClickHouse数据库,验证库表初始化正常
- 虚拟环境安装全部Python依赖,确保无版本冲突
- 一键启动项目服务,导入少量测试日志验证全链路通畅
- 功能验证无误后,配置Nginx反向代理、访问权限控制
- 优化配置,抽离硬编码数据库参数,新增接口鉴权机制
相关阅读:《独立站日志分析入门:从404、爬虫访问到异常流量的排查清单》
-
广告合作
-
QQ群号:4114653



