本教程采用 Docker Compose 方案,通过 Caddy 自动管理 SSL 证书并实现域名分流,确保博客与节点完美兼容。
基于Debian 12,准备工作
更新系统并安装必备工具:
刷新软件源列表,升级系统中所有已安装的软件包到最新版本
apt update && apt upgrade -y
安装指定的软件包
apt install -y curl wget sudo git vim
要安装的软件包列表:
curl:命令行下载工具,支持 HTTP、HTTPS、FTP 等多种协议,常用于下载文件或调用 API。
wget:另一个强大的命令行下载工具,功能类似 curl,但更擅长递归下载和断点续传。
sudo:允许普通用户以超级用户(root)权限执行命令(系统管理必备)。
git:版本控制工具,用于下载、管理代码仓库(比如从 GitHub 下载项目)。
vim:强大的文本编辑器(vi 的增强版),用于编辑配置文件、写脚本等。
- 基础环境配置
首先开启 BBR 加速并安装 Docker:
# 开启 BBR
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
# 安装 Docker
curl -fsSL https://get.docker.com | bash
- 部署服务
创建 reborn 目录并编写 docker-compose.yml:
写入 Docker Compose 编排文件
# 写入 Docker Compose 编排文件
cat <<EOF > docker-compose.yml
services:
caddy:
image: caddy:latest
container_name: caddy
restart: always
network_mode: host
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
blog:
image: 80x86/typecho:latest
container_name: typecho_blog
restart: always
ports:
- "8081:80"
volumes:
- ./blog_data:/www/wwwroot
hysteria:
image: tobyxdd/hysteria:latest
container_name: hysteria
restart: always
network_mode: host
volumes:
- ./hysteria_config.yaml:/etc/hysteria/config.yaml
- caddy_data:/caddy_certs:ro
command: ["server", "--config", "/etc/hysteria/config.yaml"]
volumes:
caddy_data:
EOF
- 核心配置文件
在同目录下创建 Caddyfile(分流)和 hysteria_config.yaml(节点)。
写入 Caddy 规则(申请证书 + 分流)
# 写入 Caddy 规则(申请证书 + 分流)
cat <<EOF > Caddyfile
blog.yourdomain.com {
reverse_proxy localhost:8081
}
hy.yourdomain.com {
reverse_proxy https://www.bing.com {
header_up Host {upstream_hostport}
}
}
EOF
写入 Hysteria 2 配置
cat <<EOF > hysteria_config.yaml
# 服务监听端口
listen: :1080
# 证书配置(确保路径正确)
tls:
cert: /caddy_certs/caddy/certificates/acme-v02.api.letsencrypt.org-directory/hy.yourdomain.com
key: /caddy_certs/caddy/certificates/acme-v02.api.letsencrypt.org-directory/hy.yourdomain.com
# 认证配置
auth:
type: password
password: "你的密码"
# ----------------------------
# 服务端带宽限制 (新添加)
# ----------------------------
bandwidth:
up: 100 mbps # 限制服务端最大上行(发送)速度为 100 Mbps
down: 100 mbps # 限制服务端最大下行(接收)速度为 100 Mbps
# ----------------------------
# 端口混淆配置
obfs:
type: salamander
salamander:
password: "你的混淆密码"
# 流量整形/接收窗口配置(优化高延迟环境下的吞吐量)
quic:
initStreamReceiveWindow: 8388608
maxStreamReceiveWindow: 8388608
initConnReceiveWindow: 20971520
maxConnReceiveWindow: 20971520
# 伪装配置(当探测端口时,将其转发至指定网页)
masquerade:
type: proxy
proxy:
url: https://www.bing.com
rewriteHost: true
EOF
启动与优化
# 启动容器 docker compose up -d # 开启端口跳跃 (UDP 20000-30000) iptables -t nat -A PREROUTING -p udp --dport 20000:30000 -j REDIRECT --to-ports 4433 apt install -y iptables-persistent && netfilter-persistent save
💡 写给读者的建议
博客安装:访问域名后数据库选 SQLite 最省内存。
兼容性:Caddy 负责 80/443 端口,Hysteria 2 隐藏在 1080 端口并共用证书。
备份
# 回到家目录
cd /root
# 重新打包,排除掉备份文件本身
tar -czvf hysteria_blog_backup.tar.gz reborn/
备份文件里都有什么?
docker-compose.yml: 你的三剑客(Caddy, Typecho, Hysteria)的编排蓝图。
Caddyfile: 证书申请和域名分流规则。
hysteria_config.yaml: 节点的性能和安全配置。
blog_data/: 这是最重要的,里面存着你 Typecho 博客的所有文章、上传的图片和 SQLite 数据库。
💡 接下来如何把备份下载到本地?
你可以使用以下几种方法将 blog_backup.tar.gz 从服务器取回到你的电脑上:
使用 SCP 命令(推荐,适合 Mac/Linux/CMD): 在你的本地电脑终端运行(替换 IP):
scp root@你的服务器IP:/root/hysteria_blog_backup.tar.gz ./
使用 SFTP 工具: 用 FinalShell、WinSCP 或 Termius 等工具,连接后直接在右侧文件面板下载这个 .tar.gz 文件。
临时网页下载(最快,但下载完记得删): 你可以利用 Caddy 强大的功能,把文件移动到 blog_data 下通过浏览器下载,但为了安全不建议长期这么做。
定期清理日志:Docker 的日志久了会占空间。如果你发现硬盘快满了,可以用
docker compose logs --tail=10
查看,或重启容器,进入 /root/reborn 目录下
cd /root/reborn重启所有服务(Caddy, Typecho, Hysteria):
docker compose restart
如果你不在 reborn 目录下,或者只想针对某个容器 ID 操作:
查看正在运行的容器 ID/名称
docker ps
重启指定容器:
docker restart hysteria
# 或者
docker restart caddy
重启后,你可以立即运行以下命令查看容器的运行状态和重启时间:
docker ps
注意:restart 命令只是简单的重启进程,不会重新加载你对 docker-compose.yml 文件所做的修改。
编辑命令:
nano /root/reborn/hysteria_config.yaml
如果你修改了 Caddyfile、hysteria_config.yaml 或者 docker-compose.yml 里的设置,单纯的 restart 是不生效的。你应该使用:
docker compose up -d
原理:Docker 会自动检查配置文件是否有变动。如果有变动,它会关掉旧容器并启动新容器;如果没有变动,它什么都不会做。
💡 小贴士:如何判断重启成功?
重启后,你可以立即运行以下命令查看容器的运行状态和重启时间:
docker ps
检查 STATUS 栏,如果显示 Up Less than a minute,说明刚刚重启成功。

0 条评论