本技术栈覆盖全域数字经济的数据采集、数据存储、数据可视化、轻量API服务4个核心模块,所有工具均为开源免费,单服务器最低配置2核4G、20G SSD即可运行。
直接复制粘贴以下完整命令行,按回车执行即可自动完成配置:
```bash 更新源索引 sudo apt update 安装必要依赖 sudo apt install ca-certificates curl gnupg lsb-release -y 导入Docker官方GPG密钥 sudo mkdir -m 0755 -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg 添加Docker稳定版源 echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null 再次更新源索引并安装Docker全家桶 sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y 配置当前用户免sudo运行Docker(需重新登录服务器生效) sudo usermod -aG docker $USER ```重新登录服务器后,输入`docker -v`和`docker compose version`验证安装,出现版本号即为成功。
本技术栈使用4个经过验证的轻量开源工具:Telegraf(数据采集)、InfluxDB 2.x(时序+键值数据存储)、Grafana(数据可视化)、FastAPI(轻量API服务),全部通过Docker Compose编排,无需手动配置单个容器。
粘贴以下完整配置,注意修改第24、25、26行的InfluxDB初始账号密码(密码需至少8位,包含大小写字母+数字):
```yaml version: '3.8' services: 数据存储:InfluxDB 2.x influxdb: image: influxdb:2.7.4 container_name: digital-economy-influxdb restart: always ports: - "8086:8086" volumes: - influxdb-data:/var/lib/influxdb2 - influxdb-config:/etc/influxdb2 environment: - DOCKER_INFLUXDB_INIT_MODE=setup - DOCKER_INFLUXDB_INIT_USERNAME=admin - DOCKER_INFLUXDB_INIT_PASSWORD=Digital123456 - DOCKER_INFLUXDB_INIT_ORG=digital-economy - DOCKER_INFLUXDB_INIT_BUCKET=core-data - DOCKER_INFLUXDB_INIT_RETENTION=30d 数据采集:Telegraf telegraf: image: telegraf:1.28.4 container_name: digital-economy-telegraf restart: always depends_on: - influxdb volumes: - ./telegraf.conf:/etc/telegraf/telegraf.conf:ro 数据可视化:Grafana grafana: image: grafana/grafana:10.2.3 container_name: digital-economy-grafana restart: always ports: - "3000:3000" volumes: - grafana-data:/var/lib/grafana depends_on: - influxdb 轻量API服务:FastAPI fastapi: image: tiangolo/uvicorn-gunicorn-fastapi:python3.11-slim container_name: digital-economy-fastapi restart: always ports: - "8000:80" volumes: - ./app:/app depends_on: - influxdb volumes: influxdb-data: influxdb-config: grafana-data: ```粘贴完成后按`Ctrl+O`保存,按`Enter`确认文件名,再按`Ctrl+X`退出nano编辑器。

粘贴以下完整配置,注意第7行的token需要等部署后从InfluxDB获取,先保留占位符:
```toml [global_tags] env = "digital-economy-demo" [agent] interval = "10s" round_interval = true metric_batch_size = 1000 metric_buffer_limit = 10000 collection_jitter = "0s" flush_interval = "10s" flush_jitter = "0s" precision = "" hostname = "" omit_hostname = false [[outputs.influxdb_v2]] urls = ["http://influxdb:8086"] token = "INFLUXDB_TOKEN_PLACEHOLDER" organization = "digital-economy" bucket = "core-data" 示例采集模块:服务器基础指标(CPU、内存、磁盘、网络) [[inputs.cpu]] percpu = true totalcpu = true collect_cpu_time = false report_active = false [[inputs.mem]] [[inputs.disk]] ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"] [[inputs.net]] interfaces = ["eth0"] ```粘贴以下完整FastAPI代码,实现写入/读取InfluxDB的轻量API:
```python from fastapi import FastAPI from datetime import datetime from influxdb_client import InfluxDBClient, Point, WritePrecision from influxdb_client.client.write_api import SYNCHRONOUS import os app = FastAPI() 配置InfluxDB连接(与docker-compose.yml保持一致) INFLUXDB_URL = "http://influxdb:8086" INFLUXDB_TOKEN = os.getenv("INFLUXDB_TOKEN", "INFLUXDB_TOKEN_PLACEHOLDER") INFLUXDB_ORG = "digital-economy" INFLUXDB_BUCKET = "core-data" 初始化客户端 client = InfluxDBClient(url=INFLUXDB_URL, token=INFLUXDB_TOKEN, org=INFLUXDB_ORG) write_api = client.write_api(write_options=SYNCHRONOUS) query_api = client.query_api() 示例API1:写入模拟数字经济交易数据 @app.post("/write-trade-data") def write_trade_data(merchant_id: str, amount: float, trade_type: str = "online"): point = ( Point("digital_trade") .tag("merchant_id", merchant_id) .tag("trade_type", trade_type) .field("amount", amount) .time(datetime.utcnow(), WritePrecision.NS) ) write_api.write(bucket=INFLUXDB_BUCKET, org=INFLUXDB_ORG, record=point) return {"status": "success", "message": "交易数据写入成功"} 示例API2:查询指定商户近10分钟的交易总额 @app.get("/get-merchant-recent-total") def get_merchant_recent_total(merchant_id: str): query = f'from(bucket: "{INFLUXDB_BUCKET}") |> range(start: -10m) |> filter(fn: (r) => r._measurement == "digital_trade" and r.merchant_id == "{merchant_id}" and r._field == "amount") |> sum()' result = query_api.query(org=INFLUXDB_ORG, query=query) total = 0.0 for table in result: for record in table.records: total += record.get_value() return {"merchant_id": merchant_id, "recent_10m_total": round(total, 2)} ```同样保存退出nano编辑器。
在`~/digital-economy-stack`目录下执行:
```bash docker compose up -d ```等待3-5分钟(首次拉取镜像需要时间),执行`docker compose ps`查看所有容器状态,若4个容器均显示`Up`则部署成功。
替换完成后重启相关容器:
```bash docker compose restart telegraf fastapi ```易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图