colab上暴漏访问cloudflared使用例子

通过 cloudflared 把容器运行本地服务暴露到公网。

env

  • ubuntu22.04-LTS
  • cloudflared + continerd

1.下载 cloudflared

1
!wget -q -c https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O c
  • wget 下载 Cloudflare 提供的 cloudflared 客户端二进制文件。
  • -q: 安静模式(不输出信息)。
  • -c: 支持断点续传。
  • -O c: 将下载的文件重命名为 c

2.赋予执行权限

1
!chmod a+x c
  • 给刚刚下载的 c 文件赋予可执行权限。

3.安装 udocker

1
!pip install udocker
  • 安装 udocker 工具,便于在 无 root 权限 环境中运行 Docker 镜像(如某些 HPC、Colab 环境)。

4.拉取镜像

1
!udocker --allow-root pull zhu327/gemini-openai-proxy:latest
  • 使用 udocker 从 Docker Hub 拉取 zhu327/gemini-openai-proxy 镜像的最新版。
  • --allow-root 允许在 root 用户下运行 udocker,默认情况下会警告或禁止。

5.创建容器实例

1
!udocker --allow-root create --name=gemini zhu327/gemini-openai-proxy:latest
  • 基于刚才拉取的镜像创建一个名为 gemini 的容器。

6.启动Cloudflare隧道 + 启动容器

1
!./c tunnel --url http://localhost:8443 & udocker --allow-root run -p 8443:8080 gemini
  • ./c tunnel --url http://localhost:8443

    • 启动 Cloudflare 隧道,把本地的 8443 端口暴露到公网,获取一个类似 https://xxxxx.trycloudflare.com 的公网地址。
    • & 表示在后台运行该命令。
  • udocker ... run -p 8443:8080 gemini

    • 启动 gemini 容器,将容器内的 8080 端口映射到宿主机的 8443 端口。
  • 启动 Cloudflare tunnel 和容器之后,通常需要等待几秒钟;

  • cloudflared 会输出你公网可访问的链接;

  • 例如:https://randomstring.trycloudflare.com


7.总结流程图

[容器8080端口] ← 8443端口 ← [宿主机] ← cloudflared ← [公网临时地址]
          ↑                              ↑
    gemini-openai-proxy       https://xxxx.trycloudflare.com

8.作用总结

这是一种在无公网 IP、无 root、甚至无法装 Docker 的环境中:

  • 启动一个代理服务(gemini-openai-proxy);
  • 并通过 Cloudflare 暴露到公网;
  • 方便外部访问该服务,例如用于调试或部署 LLM 代理接口等。