0. 通过Cloudflare Tunnel 给 Docker 应用提供代理和HTTPS
Cloudflare Tunnel 是 Cloudflare 的免费隧道, 主要可以用来内网穿透
这里分享Cloudflare Tunnel 与 Docker 应用 的配合, 有下列这些优势:
优点:
- 零配置防火墙: 隐藏宿主机IP,无惧攻击
- 无需公网IP: 方便分享展示
- 自动HTTPS: 加密访问, 无需续签证书
- 简化网络配置: 迁移方便, 整个文件夹打包到另一台vps, 一行命令重建
下面我以 filebrowser 为例, 说明操作步骤
1、下载 cloudflared
首先需要在一台电脑上创建隧道, 需要能打开浏览器的电脑, 下载对应系统版本的 cloudflared
2、登录
解压进入 cloudflared 所在目录
打开 终端 执行下面命令
cloudflared login
登录,在弹出的网页,选择一个托管在 cloudflare 上的根域名
之后会在用户根目录生成.cloudflared 文件夹
里面有 cert.pem, 证书, 下次无需再登录
3、创建一个隧道
执行下面命令
cloudflared tunnel create <隧道名字>
会在.cloudflared文件夹,生成一个<id>.json文件,记住 id
忘记隧道名和 id 可以通过下面命令找回
cloudflared tunnel list
4、添加解析
为 filebrowser 分配的域名 , 指向隧道
(最多 xxx.xxx.com 这样的二级域名, cf不给三级以上的域名分配https证书)
执行下面命令
cloudflared tunnel route dns <隧道名字> <域名>
或者在cf官网仪表盘上,创建一个 CNAMEA,域名指向 <id>.cfargotunnel.com
5、建立文件夹结构
接下来我们来到vps上, 在vps上创建文件夹, 形成下面的文件结构
filebrowser
├── home
├── database
├── config
├── cloudflared
│ ├── config.yaml
│ └── id.json
└── docker-compose.yml
filebrowser 为项目根目录, 以后备份迁移直接复制整个文件夹
home 为filebrowser的文件根目录 , 空文件夹
database 和 config 为filebrowser的配置文件 , 空文件夹
cloudflared 为 cloudflared 的配置文件夹
id.json 刚刚生成在本地, 上传到vps
config.yaml 为 cloudflared 的配置文件, 下一步生成
docker-compose.yml 下下步生成
5、创建 config.yaml
将下面代码填入config.yaml 文件
注意修改的地方:
- 2处id
- 域名
- docker容器名(本例中为 filebrowser)
tunnel: <id>
credentials-file: /etc/cloudflared/<id>.json
protocol: quic
ingress:
- hostname: <域名>
service: http://filebrowser:80
- service: http_status:404
6、创建 docker-compose.yml
创建 docker-compose.yml 文件 ,将下面代码填入
version: '3'
services:
argo_tunnel:
image: cloudflare/cloudflared:latest
volumes:
- ./cloudflared:/etc/cloudflared
restart: always
command: 'tunnel --config /etc/cloudflared/config.yaml run '
user: root
depends_on:
- filebrowser
filebrowser:
image: filebrowser/filebrowser:latest
container_name: filebrowser
volumes:
- ./home:/srv
- ./database:/database
- ./config:/config
environment:
- PUID=$(id -u)
- PGID=$(id -g)
7. 启动
cd 到 filebrowser 目录下, 执行命令
docker compose up -d 启动项目
没出问题的话, 直接访问<域名>就能打开filebrowser了
默认账号:密码 admin:admin
如果想要迁移filebrowser(其他docker应用同理), 只需将filebrowser根目录打包
在另一台vps上,执行docker compose up -d ,即可恢复原样, 不用回顾繁杂的配置
这也是本方案最大的优势