使用 Wrangler 无需 wrangler.toml 的两种登录方式及 Python 上传示例
Cloudflare 的 Wrangler CLI 是部署 Workers上传资源或发布静态网站的强大工具。在服务器容器或 CI/CD 中,我们常常不希望维护 wrangler.toml
配置文件,而是依赖环境变量和命令行参数来完成登录和部署。
本文详细介绍:
- 两种 Wrangler 登录方式(无需配置文件)
- 如何用命令行参数部署 Worker 或上传到 Cloudflare Pages
- 一个完整的 Python 脚本示例:自动上传 HTML 文件到 Cloudflare Pages,并清理临时文件
1. Wrangler 登录方式(无需配置文件)
安装wrangler
npm install -g wrangler
1.1 浏览器交互式登录(本地开发)
适用于本地环境,需浏览器。
wrangler login
- 会弹出浏览器窗口,登录成功后保存凭据。
- 不适用于服务器/容器。
1.2 API Token 登录(自动化首选)
适用于服务器DockerCI/CD,无需浏览器或交互。
创建 API Token
- 打开 Cloudflare API Tokens
- 创建自定义 Token,权限配置如下:
权限 | 级别 |
---|---|
用户 -> 成员资格 | 读取 |
账户 -> Cloudflare Pages | 编辑 |
账户 -> Workers 脚本 | 编辑 |
- 保存 Token 字符串(不可恢复)。
设置环境变量
export CLOUDFLARE_API_TOKEN=你的token字符串
CI/CD 环境中建议在
.env
文件或环境配置中设置此变量。
验证登录成功
wrangler whoami
显示账户信息则认证成功。
2. 部署方式一:无 wrangler.toml
部署 Worker 脚本
使用命令行参数部署脚本:
wrangler deploy index.js \
--name your-worker-name \
--account-id 你的账户ID \
--compatibility-date 2025-08-02
关键参数说明:
参数 | 说明 |
---|---|
--name |
Worker 名称 |
--account-id |
Cloudflare 账户 ID,可从仪表板获取 |
--compatibility-date |
推荐使用当天日期,确保最新兼容 |
脚本路径 | 直接传入入口 JS 文件路径 |
3. 部署方式二:上传到 Cloudflare Pages(无配置文件)
Cloudflare Pages 支持静态资源部署。无需配置文件,直接用 CLI 上传。
命令示例:
wrangler pages deploy ./dist \
--project-name your-pages-project
必需参数:
参数 | 说明 |
---|---|
路径 |
要上传的目录,例如 ./dist |
--project-name |
Cloudflare Pages 项目名称,必须先在仪表板创建 |
4. Python 脚本:自动上传 HTML 文件到 Cloudflare Pages
适用于 CI/CD 自动上传,或容器中发布静态页面(如报告HTML 输出)。
✅ 支持功能:
- 自动查找 wrangler 安装路径
- 复制目标 HTML 为
index.html
- 部署至指定 Cloudflare Pages 项目
- 清理临时目录
- 兼容无 GUI 的环境
🔧 需传入参数(可通过命令行或脚本默认值提供)
参数 | 说明 | 是否必需 | 示例 |
---|---|---|---|
source_file |
要上传的 HTML 文件路径,作为首页上传 | 否 | python upload.py ./report.html |
项目名
utils
默认写死在脚本内,如需更换请修改project_name
变量。上传命令: wrangler pages deploy temp_upload --project-name utils
📄 脚本内容(完整)
import os
import shutil
import subprocess
import sys
def check_wrangler_installed():
"""检查 wrangler 是否可以被系统找到"""
try:
subprocess.run(["wrangler" "--version"] capture_output=True text=True check=True)
return True
except FileNotFoundError:
return False
except subprocess.CalledProcessError:
return False
def get_wrangler_path():
"""获取 wrangler 的安装路径"""
try:
result = subprocess.run(["where" "wrangler.cmd"] capture_output=True text=True check=True)
return result.stdout.strip().split('\n')[0]
except Exception:
common_paths = [
os.path.join(os.environ.get('USERPROFILE' '') 'AppData' 'Roaming' 'npm' 'wrangler.cmd')
os.path.join(os.environ.get('APPDATA' '') 'npm' 'wrangler.cmd')
]
for path in common_paths:
if os.path.exists(path):
return path
return None
def upload_to_cloudflare(source_file):
temp_dir = "temp_upload"
temp_index = os.path.join(temp_dir "index.html")
if not os.path.exists(source_file):
print(f"❌ 源文件不存在: {source_file}")
sys.exit(1)
if not check_wrangler_installed():
print("⚠️ 找不到 wrangler,尝试自动查找...")
wrangler_path = get_wrangler_path()
if not wrangler_path:
print("❌ 无法找到 wrangler 安装路径,请手动指定")
sys.exit(1)
print(f"✅ 找到 wrangler 路径: {wrangler_path}")
else:
wrangler_path = "wrangler"
if os.path.exists(temp_dir):
shutil.rmtree(temp_dir)
os.makedirs(temp_dir exist_ok=True)
try:
shutil.copyfile(source_file temp_index)
print(f"✅ 复制到: {temp_index}")
except Exception as e:
print(f"❌ 复制失败: {str(e)}")
sys.exit(1)
project_name = "utils"
cmd = [wrangler_path "pages" "deploy" temp_dir "--project-name" project_name]
try:
print("🚀 开始部署...")
result = subprocess.run(cmd stdout=subprocess.PIPE stderr=subprocess.PIPE text=True check=True)
print("✅ 上传成功!")
print("🌐 地址: https://xxx.pages.dev/")
print(result.stdout)
except subprocess.CalledProcessError as e:
print("❌ 上传失败:")
print(e.stderr)
finally:
shutil.rmtree(temp_dir ignore_errors=True)
print("🧹 清理完毕")
if __name__ == "__main__":
if len(sys.argv) > 1:
source_file = sys.argv[1]
else:
source_file = r"D:\mobile\plotculum\report.html"
upload_to_cloudflare(source_file)
🧩 扩展建议
场景 | 建议 |
---|---|
多文件部署 | 上传目录而非单个文件,支持 wrangler pages deploy ./output |
CI/CD 用法 | 在 CI 配置中设定 CLOUDFLARE_API_TOKEN ,调用 Python 脚本 |
参数灵活控制 | 用 argparse 支持传入 --project-name 等 |
总结
登录方式 | 适用场景 | 特点 |
---|---|---|
浏览器 OAuth | 本地开发 | 交互式,需浏览器,快捷 |
API Token | 服务器CI/CD | 脚本化,非交互式,支持环境变量认证 |
部署目标 | 命令行关键参数 | 说明 |
---|---|---|
Worker | --name --account-id 脚本路径 |
可用命令行参数部署,无需 wrangler.toml |
Cloudflare Pages | --project-name 资源目录路径 |
支持静态资源上传,适合报告站点等 |
本文作者: 永生
本文链接: https://yys.zone/detail/?id=448
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
评论列表 (0 条评论)