Hetzner-Web 一键部署全记录(Docker 版)

本文记录我将 Hetzner-Web 推送到 GitHub 之后,如何将部署流程收敛为“一行命令完成安装”的全流程。目标是:任何服务器只需执行一条命令,即可拉起完整服务。


项目简介

Hetzner-Web 是一个轻量的 Hetzner Cloud 流量控制台,核心功能包括:

  • 日 / 小时流量统计视图

  • 流量触顶风险提示

  • DNS 检查与重建操作

  • 清晰的可视化仪表盘

  • Basic Auth 登录保护

技术栈:后端 FastAPI + Python,前端 Vue 3 CDN + 原生 JS/CSS。

部署目标

将原本需要多步执行的操作,压缩成“一条命令”。理想流程:

  1. 自动拉取仓库代码

  2. 自动生成配置文件

  3. 自动 Docker 编译并启动

服务器环境准备

推荐环境:

  • Linux(Ubuntu / Debian / CentOS 均可)

  • Docker

  • Docker Compose

  • Git

如果是新机器,可快速安装 Docker:

curl -fsSL https://get.docker.com | bash

一键安装脚本设计

为简化部署,我在仓库新增脚本:

scripts/install-docker.sh

脚本逻辑:

  1. clone / pull 仓库

  2. 生成配置文件(config.yaml / web_config.json / report_state.json)

  3. docker compose up -d --build

一键安装命令

curl -fsSL https://raw.githubusercontent.com/liuweiqiang0523/Hetzner-Web/main/scripts/install-docker.sh | bash

可选自定义安装目录:

curl -fsSL https://raw.githubusercontent.com/liuweiqiang0523/Hetzner-Web/main/scripts/install-docker.sh | INSTALL_DIR=/srv/hetzner-web bash

可用环境变量:

  • INSTALL_DIR:安装目录(默认 /opt/hetzner-web)

  • BRANCH:分支(默认 main)

  • REPO_URL:仓库地址

配置文件说明

脚本会自动生成:

  • config.yaml

  • web_config.json

  • report_state.json

config.yaml

关键字段:

  • hetzner.api_token(必填)

  • traffic.limit_gb

  • cloudflare.record_map(可选)

  • rebuild.snapshot_id_map(可选)

web_config.json

  • username

  • password

  • tracking_start(可选)

启动与访问

脚本执行完后,容器已自动启动:

docker compose up -d --build

访问地址:

http://<server-ip>:1227

Nginx 反向代理(推荐)

线上建议配 HTTPS + 反向代理:

server {
  listen 443 ssl;
  server_name hz.example.com;

  ssl_certificate /path/to/fullchain.pem;
  ssl_certificate_key /path/to/privkey.pem;

  location / {
    proxy_pass http://127.0.0.1:1227;
    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;
  }
}

更新方式

版本更新只需重新执行一键脚本:

curl -fsSL https://raw.githubusercontent.com/liuweiqiang0523/Hetzner-Web/main/scripts/install-docker.sh | bash

脚本会自动检测并执行 git pull。

总结

这次部署的核心是把“手动流程”标准化为“一键脚本”,优势是:

  • 部署成本低

  • 重复部署方便

  • 适合多台机器批量使用

后续可继续扩展脚本,比如:自动 HTTPS、systemd 守护、监控报警等。

消息盒子

# 暂无消息 #

只显示最新10条未读和已读信息