← 返回 TimeAmber
logo NodeSeekbeta

Cloudflare Tunnel 于 Docker 的应用

0. 通过Cloudflare Tunnel 给 Docker 应用提供代理和HTTPS

Cloudflare Tunnel 是 Cloudflare 的免费隧道, 主要可以用来内网穿透

这里分享Cloudflare Tunnel 与 Docker 应用 的配合, 有下列这些优势:

优点:

  • 零配置防火墙: 隐藏宿主机IP,无惧攻击
  • 无需公网IP: 方便分享展示
  • 自动HTTPS: 加密访问, 无需续签证书
  • 简化网络配置: 迁移方便, 整个文件夹打包到另一台vps, 一行命令重建

下面我以 filebrowser 为例, 说明操作步骤

1、下载 cloudflared

首先需要在一台电脑上创建隧道, 需要能打开浏览器的电脑, 下载对应系统版本的 cloudflared

github下载链接

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的文件根目录 , 空文件夹
databaseconfig 为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 ,即可恢复原样, 不用回顾繁杂的配置

这也是本方案最大的优势
image_(83).avif

12
  • image

    我选择这样

    #33.do 44.do 55.do 66.do 77.do 出 => 短域名 # 京东2C2G3M ¥48/y # 穷鬼VPS套餐大全

  • 探之针】||【站内PM】||【小红卡】||【16图床】||【✈️纸飞机

    • 正在播放 《 晴天 》 ━━━━●─────2:40

    ⇆ ㅤㅤㅤ◁ ㅤㅤ❚❚ ㅤㅤ▷ ㅤㅤㅤ↻ ​​​

  • 感谢大佬分享,我想在甲骨文上面装个bitwarden,然后用这个代理,这样设置之后要怎么关闭ip➕端口号这种访问呢?

    ✉️PM | ✈️TG

  • @最后的轻语 #2 发布于2024/10/29 01:53:47
    感谢大佬分享,我想在甲骨文上面装个bitwarden,然后用这个代理,这样设置之后要怎么关闭ip➕端口号这种访问呢?

    直接不要映射出端口号来

    你看docker-compose.yml 文件里

    没有port的配置 , 本身就无法通过 ip + 端口 访问

  • ✉️PM | ✈️TG

  • ac01 挺好的

    ✈️TG联系|❤️探针|✉️流量卡推荐

  • @satorik #6 发布于2024/10/29 08:17:52
    楼主版本是不是有点老了,现在cloudflared在 https://one.dash.cloudflare.com/ 配置不好么,写配置文件感觉是好几年前的操作了

    这两种方法各有优劣:

    在线配置:

    • 先在面板创建配置,然后在目标vps运行命令创建连接。好处是方便修改配置,在网页上点一下就行了。但是这种方法做不到从容器内部直接穿透到外面。还是穿透宿主机的端口。

    通过配置文件:

    • 先生成连接秘钥(id.json),和配置文件,放到vps上,然后运行命令创建连接。虽然修改不方便,但是对于固定的应用来说,也不需要频繁修改。连接秘钥和配置文件一旦生成,无论放到那台vps上,都能建立连接。这大大方便了迁移,和docker十分搭配。

    这两种方式和 nps 与 frp 一样

    建立连接的方式不同

    各自有各自的应用场景

  • @三七 #7
    你是在docker里面跑的cloudflared啊,咱第一次知道可以在config.yaml里指定另一个容器的名字,先前没仔细阅读不好意思(
    当然这个迁移起来确实方便一些
    不过在线配置不能从容器内部穿透到外面吗?在filebrowser的那个block里加一行

    ports:
        - 127.0.0.1:8080:80
    

    之后用cloudflared反代

  • 这种方法也可以,条条大路通罗马。

    @satorik #8

  • bd

12
内容
预览
对照
AC娘
洋葱头
小黄鸡