对话笔记直发:4.30 Cloudflare Tunnel 0基础手动安装教程。分类:网络基建。

Vaultwarden 通过 Cloudflare Tunnel + 自定义域名手动部署教程

适用场景:

  • 服务器系统:Armbian / Debian 12 ARM64
  • 已经安装并登录 Tailscale
  • Vaultwarden 已通过 Docker 部署完成
  • Vaultwarden 当前监听:127.0.0.1:8080
  • 服务器上已有 caddy 占用 80/443
  • 希望新增第二种访问方式:Cloudflare Tunnel + 自定义域名
  • 不开放新公网端口
  • 不改现有 caddy
  • 保留原有 Tailscale Serve 入口作为备用

本文示例环境:

  • 服务器 SSH:root@局域网IP(已脱敏)“
  • 根域名:douy.indevs.in
  • Vaultwarden 目标域名:3566.douy.indevs.in

一、最终效果

完成后,你会同时保留两种访问方式:

  1. Tailscale 备用入口
    例如: https://jp-tvbox-3566.taile8eadf.ts.net

  2. Cloudflare Tunnel + 自定义域名 正式入口
    例如: https://3566.douy.indevs.in

同时满足:

  • Vaultwarden 仍然只监听 127.0.0.1:8080
  • 不占用新的公网端口
  • 不修改 caddy
  • 不给 Vaultwarden 套 Cloudflare Access
  • SIGNUPS_ALLOWED=false 保持不变

二、部署前提

开始前请确认你已经具备以下条件:

  1. 一台本地服务器,已联网
  2. 系统为 Armbian / Debian 12 ARM64
  3. 已安装 Docker 和 Docker Compose
  4. 已部署 Vaultwarden
  5. 当前 docker-compose.yml 路径为: /opt/vaultwarden/docker-compose.yml
  6. 当前 Vaultwarden 数据目录为: /opt/vaultwarden/data
  7. 当前 Vaultwarden 监听为: 127.0.0.1:8080
  8. 域名已接入 Cloudflare DNS
  9. 服务器可以访问外网
  10. 你可以 SSH 登录服务器

三、部署思路

本方案的核心逻辑是:

  1. 安装 cloudflared
  2. 用 cloudflared 创建一个 Tunnel
  3. 在 Cloudflare 上把 3566.douy.indevs.in 指向这个 Tunnel
  4. Tunnel 再把请求转发到本机: http://127.0.0.1:8080
  5. 把 Vaultwarden 的 DOMAIN 改成新的正式域名: https://3566.douy.indevs.in
  6. 重启 Vaultwarden
  7. 验证网页、API、同步、WebSocket 是否正常
  8. 保留原有 Tailscale 入口不变

四、先检查当前环境

先 SSH 登录服务器:

ssh root@`局域网IP(已脱敏)`

1. 检查 cloudflared 是否已安装

command -v cloudflared

如果没有输出,说明还没安装。


2. 检查 Vaultwarden 容器状态

docker ps --format '{{.Names}}\t{{.Status}}\t{{.Ports}}' | grep -i vaultwarden

正常示例输出:

vaultwarden    Up 2 days (healthy)    127.0.0.1:8080->80/tcp

3. 检查 Tailscale Serve 状态

tailscale serve status

正常示例输出:

https://jp-tvbox-3566.taile8eadf.ts.net (tailnet only)
|-- / proxy http://127.0.0.1:8080

这说明你当前的 Tailscale HTTPS 入口仍然工作正常。


4. 检查 Vaultwarden compose 里的 DOMAIN 和 SIGNUPS_ALLOWED

先查看文件关键内容:

grep -n 'DOMAIN\|SIGNUPS_ALLOWED' /opt/vaultwarden/docker-compose.yml

示例输出:

9:      SIGNUPS_ALLOWED: 'false'
10:      DOMAIN: 'https://jp-tvbox-3566.taile8eadf.ts.net'

5. 检查 8080 是否仍只监听本地回环

ss -ltnp | grep ':8080'

示例输出:

LISTEN 0 4096 127.0.0.1:8080 0.0.0.0:* users:(("docker-proxy",pid=xxxx,fd=x))

这说明服务没有直接暴露到公网。


6. 检查当前系统是否使用 docker-compose

有些机器支持 docker compose,有些是 docker-compose。

先检查:

command -v docker-compose

如果能看到类似:

/usr/bin/docker-compose

说明应该使用 docker-compose。

你也可以进一步验证:

docker-compose -f /opt/vaultwarden/docker-compose.yml ps

五、安装 cloudflared

1. 添加 Cloudflare 官方软件源

mkdir -p /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg -o /usr/share/keyrings/cloudflare-main.gpg
chmod a+r /usr/share/keyrings/cloudflare-main.gpg
printf 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared bookworm main\n' > /etc/apt/sources.list.d/cloudflared.list

2. 更新软件源并安装

apt-get update
apt-get install -y cloudflared

3. 验证安装成功

cloudflared --version

示例输出:

cloudflared version 2026.3.0

六、登录 Cloudflare

这一步会让服务器获得 Cloudflare Tunnel 的授权证书。

执行:

cloudflared tunnel login

终端会输出一个链接,类似:

Please open the following URL and log in with your Cloudflare account:
 
https://dash.cloudflare.com/argotunnel?aud=...省略...

浏览器里要做什么

  1. 用浏览器打开终端里给出的链接
  2. 登录 Cloudflare 账号
  3. 选择你的域名 douy.indevs.in
  4. 点击授权

授权成功后,服务器终端通常会显示:

You have successfully logged in.
If you wish to copy your credentials to a server, they have been saved to:
/root/.cloudflared/cert.pem

这表示授权成功。


七、创建 Tunnel

这里创建一个专门给 Vaultwarden 用的 Tunnel。

执行:

cloudflared tunnel create vaultwarden-3566

示例输出:

Tunnel credentials written to /root/.cloudflared/74dd8243-b91c-4da8-b60c-d64bf6295a1c.json
Created tunnel vaultwarden-3566 with id 74dd8243-b91c-4da8-b60c-d64bf6295a1c

请记下这个 Tunnel ID,例如:

74dd8243-b91c-4da8-b60c-d64bf6295a1c

八、把子域名指向 Tunnel

执行:

cloudflared tunnel route dns vaultwarden-3566 3566.douy.indevs.in

成功示例:

Added CNAME 3566.douy.indevs.in which will route to this tunnel

你也可以查看 Tunnel 列表:

cloudflared tunnel list

示例输出:

ID                                   NAME              CREATED              CONNECTIONS
74dd8243-b91c-4da8-b60c-d64bf6295a1c vaultwarden-3566  2026-04-30T07:09:17Z

九、编写 cloudflared 配置文件

创建配置目录:

install -d -m 755 /etc/cloudflared

编辑配置文件:

nano /etc/cloudflared/config.yml

填入以下内容:

tunnel: 74dd8243-b91c-4da8-b60c-d64bf6295a1c
credentials-file: /root/.cloudflared/74dd8243-b91c-4da8-b60c-d64bf6295a1c.json
 
ingress:
  - hostname: 3566.douy.indevs.in
    service: http://127.0.0.1:8080
  - service: http_status:404

说明:

  • tunnel:替换成你自己的 Tunnel ID
  • credentials-file:替换成你自己的 JSON 凭据文件名
  • hostname:替换成你自己的 Vaultwarden 域名
  • service:保持为 http://127.0.0.1:8080

保存退出。


十、安装并启动 cloudflared 系统服务

执行:

cloudflared service install
systemctl enable --now cloudflared

查看状态:

systemctl status cloudflared --no-pager

正常示例:

Active: active (running)

查看 Tunnel 连接详情:

cloudflared tunnel info vaultwarden-3566

如果你看到多个已注册连接,说明 Tunnel 已经连上 Cloudflare 边缘。


十一、修改 Vaultwarden 的 DOMAIN

这一步很关键。

Vaultwarden 的 DOMAIN 必须改成正式使用的自定义域名,否则浏览器插件、Windows 客户端、安卓客户端可能出现同步、登录、WebSocket 或重定向问题。

1. 先备份 compose 文件

cp /opt/vaultwarden/docker-compose.yml /opt/vaultwarden/docker-compose.yml.bak-cloudflare

2. 编辑 compose 文件

nano /opt/vaultwarden/docker-compose.yml

找到这一段:

environment:
  WEBSOCKET_ENABLED: 'true'
  SIGNUPS_ALLOWED: 'false'
  DOMAIN: 'https://jp-
 
---
 
> 注:本文涉及的服务器公网 IP / Tailnet / 局域网 IP 已脱敏,请替换为你自己的地址。
 
---
**相关**: [[00-索引-网络基建索引]] [[4.27 Bitwarden + Vaultwarden+ Tailscale]]