[{"data":1,"prerenderedAt":1605},["ShallowReactive",2],{"article-\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F08-Cloudflare-ImgBed-免费私有图床完整部署手册":3,"article-around-\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F08-Cloudflare-ImgBed-免费私有图床完整部署手册":1387},{"id":4,"title":5,"author":6,"body":7,"category":1373,"cover":1374,"date":1375,"description":5,"draft":1376,"extension":1377,"image":1378,"license":1374,"meta":1379,"minutes":621,"navigation":738,"path":1380,"pinned":1376,"seo":1381,"stem":1382,"tags":1383,"__hash__":1386},"blog\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F08-Cloudflare ImgBed 免费私有图床完整部署手册.md","Cloudflare ImgBed 免费私有图床完整部署手册","张萌萌",{"type":8,"value":9,"toc":1340},"minimark",[10,13,18,23,44,48,77,81,95,97,101,105,113,117,184,188,196,198,202,206,212,216,226,250,254,263,267,292,294,298,302,310,332,336,374,378,443,447,450,454,459,464,524,528,563,567,585,1170,1185,1189,1217,1221,1227,1229,1233,1237,1251,1255,1272,1274,1278,1310,1312,1316,1333,1336],[11,12],"hr",{},[14,15,17],"h2",{"id":16},"_1-前言为什么选-cloudflare-imgbed","1 前言：为什么选 Cloudflare ImgBed",[19,20,22],"h3",{"id":21},"_11-现有图床痛点","1.1 现有图床痛点",[24,25,26,35,38,41],"ul",{},[27,28,29,30,34],"li",{},"商业对象存储图床：国内 ",[31,32,33],"strong",{},"COS \u002F OSS"," 存储、外网流量长期计费，长期维护成本持续上涨",[27,36,37],{},"第三方公共图床：强制防盗链跨域限制、平台关停、图片永久丢失风险高",[27,39,40],{},"无全球边缘加速：海外访问加载缓慢，国内访问链路波动，大图加载超时",[27,42,43],{},"前后端资源分层混乱：图片存储、管理前端、上传接口耦合，扩容迁移成本高",[19,45,47],{"id":46},"_12-项目优势","1.2 项目优势",[24,49,50,57,60,71,74],{},[27,51,52,53,56],{},"依托 ",[31,54,55],{},"Cloudflare Pages"," 静态页面免费托管，无服务器月租支出",[27,58,59],{},"全球 275+ 边缘接入点 CDN 加速，国内外图片低延迟访问",[27,61,62,63,66,67,70],{},"原生兼容 ",[31,64,65],{},"R2"," 对象存储，支持标准 ",[31,68,69],{},"S3"," 协议，可对接第三方对象存储",[27,72,73],{},"内置可视化管理后台，支持批量上传、预览、删除、一键复制图片链接",[27,75,76],{},"边缘函数承载上传业务逻辑，全链路 Serverless 架构，无需自建后端服务",[19,78,80],{"id":79},"_13-适用人群","1.3 适用人群",[24,82,83,86,89,92],{},[27,84,85],{},"独立博客、自媒体站长，长期托管文章配图",[27,87,88],{},"Obsidian \u002F Notion \u002F 语雀 笔记工具用户，搭建私有稳定图床",[27,90,91],{},"前端开发者，静态图标、截图、素材资源托管场景",[27,93,94],{},"个人小型项目，追求零成本、高可用静态资源存储方案",[11,96],{},[14,98,100],{"id":99},"_2-方案选型对比","2 方案选型对比",[19,102,104],{"id":103},"_21-两种部署方案约束","2.1 两种部署方案约束",[24,106,107,110],{},[27,108,109],{},"Pages 托管前端 + Workers 边缘函数：完整可视化管理面板，元数据持久化方案成熟，上手门槛低",[27,111,112],{},"Workers 纯函数方案：无前端管理页面，仅开放上传、查询接口，适配程序自动化批量调用场景",[19,114,116],{"id":115},"_22-pages-部署-workers-部署-三线对比表","2.2 Pages 部署 \u002F Workers 部署 三线对比表",[118,119,120,136],"table",{},[121,122,123],"thead",{},[124,125,126,130,133],"tr",{},[127,128,129],"th",{},"对比维度",[127,131,132],{},"Pages 完整部署方案",[127,134,135],{},"Workers 纯函数方案",[137,138,139,151,162,173],"tbody",{},[124,140,141,145,148],{},[142,143,144],"td",{},"成本",[142,146,147],{},"全部免费，免费额度覆盖个人日常使用",[142,149,150],{},"全部免费",[124,152,153,156,159],{},[142,154,155],{},"维护难度",[142,157,158],{},"低，可视化页面配置，操作直观",[142,160,161],{},"高，仅接口调用，无可视化管理界面",[124,163,164,167,170],{},[142,165,166],{},"免费额度",[142,168,169],{},"Pages 无限静态托管；R2 10GB 存储；KV 100MB；D1 5GB",[142,171,172],{},"Workers 每日 10 万免费请求，配套 R2 额度一致",[124,174,175,178,181],{},[142,176,177],{},"功能完整度",[142,179,180],{},"完整上传、批量操作、资源列表、管理员权限校验",[142,182,183],{},"仅基础上传、资源查询接口，无可视化管理功能",[19,185,187],{"id":186},"_23-选型结论","2.3 选型结论",[189,190,191,192,195],"p",{},"新手、博客站长、笔记工具用户",[31,193,194],{},"优先 Pages 方案","，配套可视化管理后台，操作贴合官方文档，开箱即用；仅自动化脚本、批量程序上传场景选择 Workers 纯函数方案。",[11,197],{},[14,199,201],{"id":200},"_3-部署前置准备","3 部署前置准备",[19,203,205],{"id":204},"_31-github-账号","3.1 GitHub 账号",[189,207,208,209,211],{},"用于 Fork 开源 CloudFlare-ImgBed 源码仓库，",[31,210,55],{}," 依赖 Git 仓库实现自动构建、更新部署。",[19,213,215],{"id":214},"_32-paypal-账号注册以及绑定银联","3.2 PayPal 账号注册以及绑定银联",[217,218,219],"blockquote",{},[189,220,221,222,225],{},"⚠️ 关键警告：开通 ",[31,223,224],{},"R2 对象存储"," 强制要求绑定支付渠道，仅做身份校验，免费额度范围内不会产生任何扣费，无隐藏消费。",[24,227,228,237,240,243],{},[27,229,230,231],{},"PayPal 注册地址：",[232,233,234],"a",{"href":234,"rel":235},"https:\u002F\u002Fwww.paypal.com\u002Fc2\u002Fhome",[236],"nofollow",[27,238,239],{},"注册 PayPal 个人账户，完成实名认证并绑定国内银联储蓄卡",[27,241,242],{},"认证完成后再进入 Cloudflare 后台完成支付渠道授权",[27,244,245,246,249],{},"说明：开通 Cloudflare R2 海外存储扣费必须使用",[31,247,248],{},"国际版 PayPal","，地区选择「中国」，可绑定银联储蓄卡 \u002F 双币信用卡。",[19,251,253],{"id":252},"_33-cloudflare-免费账号","3.3 Cloudflare 免费账号",[189,255,256,257,262],{},"注册 ",[232,258,261],{"href":259,"rel":260},"https:\u002F\u002Fdash.cloudflare.com\u002Flogin",[236],"Cloudflare"," 免费版账号，无需升级 Pro \u002F 企业套餐，免费资源完全满足个人图床业务需求。",[19,264,266],{"id":265},"_34-绑定-paypal-支付开通-r2-对象存储","3.4 绑定 Paypal 支付，开通 R2 对象存储",[24,268,269,275,278,281],{},[27,270,271,272,274],{},"进入 Cloudflare 后台侧边栏 ",[31,273,65],{}," 功能面板",[27,276,277],{},"根据页面指引绑定已完成银联认证的 PayPal 账户",[27,279,280],{},"完成支付渠道校验后，开通 R2 对象存储服务，预留存储桶创建入口",[27,282,283,284,287],{},"最后创建一个存储桶，记住这个存储桶的名称，比如 ",[31,285,286],{},"cloudflare-imgbed",[288,289],"img",{"alt":290,"src":291},"","https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F07\u002F19\u002F1784396392367.avif",[11,293],{},[14,295,297],{"id":296},"_4-cloudflare-pages-分步部署","4 Cloudflare Pages 分步部署",[19,299,301],{"id":300},"_41-fork-官方-cloudflare-imgbed-源码仓库","4.1 Fork 官方 Cloudflare ImgBed 源码仓库",[189,303,304,305,309],{},"仓库开源地址：",[306,307,308],"code",{},"https:\u002F\u002Fgithub.com\u002FMarSeventh\u002FCloudFlare-ImgBed","\n操作步骤",[24,311,312,319,326],{},[27,313,314,315],{},"登录 GitHub，访问 ",[232,316,318],{"href":308,"rel":317},[236],"CloudFlare ImgBed 项目",[27,320,321,322,325],{},"页面右上角点击 ",[31,323,324],{},"Fork","，将完整源码复制至个人 GitHub 名下",[27,327,328,329],{},"Fork 完成后进入个人仓库，确认源码文件完整拉取无缺失\n",[288,330],{"alt":290,"src":331},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F07\u002F19\u002F1784395703898.avif",[19,333,335],{"id":334},"_42-在-cloudflare-后台创建-pages-项目","4.2 在 Cloudflare 后台创建 Pages 项目",[24,337,338,346,353,362,365],{},[27,339,340,341],{},"登录 ",[232,342,345],{"href":343,"rel":344},"https:\u002F\u002Fdash.cloudflare.com\u002F",[236],"Cloudflare Dashboard",[27,347,348,349,352],{},"后台左侧导航栏进入 ",[31,350,351],{},"Workers & Pages"," 功能入口",[27,354,355,356,359],{},"点击「创建应用程序」→「创建 Pages」\n",[288,357],{"alt":290,"src":358},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F07\u002F19\u002F1784395982052.avif",[288,360],{"alt":290,"src":361},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F07\u002F19\u002F1784396032044.avif",[27,363,364],{},"连接 GitHub 账号，授权 Cloudflare 读取个人 GitHub 仓库权限",[27,366,367,368,370,371],{},"在仓库列表选中刚刚 Fork 完成的 ",[306,369,286],{}," 仓库\n",[288,372],{"alt":290,"src":373},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F07\u002F19\u002F1784396081651.avif",[19,375,377],{"id":376},"_43-项目构建参数配置","4.3 项目构建参数配置",[118,379,380,393],{},[121,381,382],{},[124,383,384,387,390],{},[127,385,386],{},"配置项",[127,388,389],{},"标准参数值",[127,391,392],{},"备注说明",[137,394,395,410,421,432],{},[124,396,397,400,403],{},[142,398,399],{},"项目名称",[142,401,402],{},"自定义cloudflare-imgbed",[142,404,405,406,409],{},"决定默认 ",[306,407,408],{},"xxx.pages.dev"," 二级域名前缀",[124,411,412,415,418],{},[142,413,414],{},"生产分支",[142,416,417],{},"main",[142,419,420],{},"源码主分支，无特殊需求禁止修改",[124,422,423,426,429],{},[142,424,425],{},"构建命令",[142,427,428],{},"npm install",[142,430,431],{},"项目内置打包脚本",[124,433,434,437,440],{},[142,435,436],{},"输出目录",[142,438,439],{},"\u002Ffrontend-dist",[142,441,442],{},"打包后静态资源输出文件夹",[19,444,446],{"id":445},"_44-首次保存并触发部署","4.4 首次保存并触发部署",[189,448,449],{},"参数填写完成后点击「保存并部署」，Cloudflare 自动拉取仓库代码、安装依赖、打包静态资源，等待 2–5 分钟构建完成，系统自动生成项目默认访问域名。",[19,451,453],{"id":452},"_45-元数据存储kv-d1-数据库二选一配置","4.5 元数据存储：KV \u002F D1 数据库二选一配置",[217,455,456],{},[189,457,458],{},"强制提醒：KV、D1 仅需配置其中一种，无需同时绑定；若当前 Cloudflare 账号已有其他项目占用 KV 命名空间，建议选择 D1；全新账号统一优先 KV。",[460,461,463],"h4",{"id":462},"_451-kv-与-d1-数据库核心差异三线对比表","4.5.1 KV 与 D1 数据库核心差异三线对比表",[118,465,466,479],{},[121,467,468],{},[124,469,470,473,476],{},[127,471,472],{},"对比项",[127,474,475],{},"KV 键值存储",[127,477,478],{},"D1 SQL 关系型数据库",[137,480,481,492,502,513],{},[124,482,483,486,489],{},[142,484,485],{},"数据结构",[142,487,488],{},"简单 Key-Value 键值对",[142,490,491],{},"标准 SQL 数据表，支持多字段筛选",[124,493,494,496,499],{},[142,495,166],{},[142,497,498],{},"100MB 存储空间",[142,500,501],{},"5GB 数据库存储容量",[124,503,504,507,510],{},[142,505,506],{},"查询性能",[142,508,509],{},"单键读取速度极快，批量筛选能力弱",[142,511,512],{},"支持分页、条件筛选、排序查询",[124,514,515,518,521],{},[142,516,517],{},"适用场景",[142,519,520],{},"图片总量 \u003C 10000 张，仅存储基础元数据",[142,522,523],{},"图片上万张，需要分类、筛选、分页管理",[460,525,527],{"id":526},"_452-kv-命名空间创建-pages-项目绑定完整操作","4.5.2 KV 命名空间创建 + Pages 项目绑定完整操作",[24,529,530,537,546,549,560],{},[27,531,532,533,536],{},"Cloudflare 后台 → Workers & Pages → ",[31,534,535],{},"KV"," 面板",[27,538,539,540,543],{},"点击创建命名空间，自定义名称如 ",[306,541,542],{},"imgbed-kv",[288,544],{"alt":290,"src":545},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F07\u002F19\u002F1784396770378.avif",[27,547,548],{},"返回 Pages 项目页面 → 设置 → 环境变量与绑定",[27,550,551,552,555,556,559],{},"新增 KV 绑定，",[31,553,554],{},"绑定变量名必须填写"," ",[306,557,558],{},"img_url","，选中刚创建的命名空间",[27,561,562],{},"保存全部配置，重新触发一次项目部署使绑定生效",[460,564,566],{"id":565},"_453-d1-sql-数据库创建初始化-sql项目绑定完整操作","4.5.3 D1 SQL 数据库创建、初始化 SQL、项目绑定完整操作",[24,568,569,579],{},[27,570,571,572,575,576],{},"后台侧边栏进入 ",[31,573,574],{},"D1"," 面板，点击创建数据库，自定义名称 ",[306,577,578],{},"imgbed-d1",[27,580,581,582],{},"进入数据库「查询」页面，执行以下初始化建表 SQL：\n",[288,583],{"alt":290,"src":584},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F07\u002F19\u002F1784396835173.avif",[586,587,591],"pre",{"className":588,"code":589,"language":590,"meta":290,"style":290},"language-sql shiki shiki-themes github-light github-dark","CREATE TABLE IF NOT EXISTS files (\n    id TEXT PRIMARY KEY,\n    value TEXT,\n    metadata TEXT NOT NULL,\n    file_name TEXT,\n    file_type TEXT,\n    file_size TEXT,\n    upload_ip TEXT,\n    upload_address TEXT,\n    list_type TEXT,\n    timestamp INTEGER,\n    label TEXT,\n    directory TEXT,\n    channel TEXT,\n    channel_name TEXT,\n    tg_file_id TEXT,\n    tg_chat_id TEXT,\n    tg_bot_token TEXT,\n    is_chunked BOOLEAN DEFAULT FALSE,\n    tags TEXT, \n    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP\n);\n\nCREATE TABLE IF NOT EXISTS settings (\n    key TEXT PRIMARY KEY,\n    value TEXT NOT NULL,\n    category TEXT,\n    description TEXT,\n    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP\n);\n\nCREATE TABLE IF NOT EXISTS index_operations (\n    id TEXT PRIMARY KEY,\n    type TEXT NOT NULL,\n    timestamp INTEGER NOT NULL,\n    data TEXT NOT NULL,\n    processed BOOLEAN DEFAULT FALSE,\n    created_at DATETIME DEFAULT CURRENT_TIMESTAMP\n);\n\nCREATE TABLE IF NOT EXISTS index_metadata (\n    key TEXT PRIMARY KEY,\n    last_updated INTEGER,\n    total_count INTEGER DEFAULT 0,\n    last_operation_id TEXT,\n    chunk_count INTEGER DEFAULT 0,\n    chunk_size INTEGER DEFAULT 0,\n    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP\n);\n\nCREATE TABLE IF NOT EXISTS other_data (\n    key TEXT PRIMARY KEY,\n    value TEXT NOT NULL,\n    type TEXT,\n    description TEXT,\n    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP\n);\n\nCREATE INDEX IF NOT EXISTS idx_files_timestamp ON files(timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_files_directory ON files(directory);\nCREATE INDEX IF NOT EXISTS idx_files_channel ON files(channel);\nCREATE INDEX IF NOT EXISTS idx_files_file_type ON files(file_type);\nCREATE INDEX IF NOT EXISTS idx_files_upload_ip ON files(upload_ip);\nCREATE INDEX IF NOT EXISTS idx_files_created_at ON files(created_at DESC);\nCREATE INDEX IF NOT EXISTS idx_files_tags ON files(tags);\n\nCREATE INDEX IF NOT EXISTS idx_settings_category ON settings(category);\n\nCREATE INDEX IF NOT EXISTS idx_index_operations_timestamp ON index_operations(timestamp);\nCREATE INDEX IF NOT EXISTS idx_index_operations_processed ON index_operations(processed);\nCREATE INDEX IF NOT EXISTS idx_index_operations_type ON index_operations(type);\n\nCREATE INDEX IF NOT EXISTS idx_other_data_type ON other_data(type);\n\nCREATE TRIGGER IF NOT EXISTS update_files_updated_at \n    AFTER UPDATE ON files\n    BEGIN\n        UPDATE files SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;\n    END;\n\nCREATE TRIGGER IF NOT EXISTS update_settings_updated_at \n    AFTER UPDATE ON settings\n    BEGIN\n        UPDATE settings SET updated_at = CURRENT_TIMESTAMP WHERE key = NEW.key;\n    END;\n\nCREATE TRIGGER IF NOT EXISTS update_index_metadata_updated_at \n    AFTER UPDATE ON index_metadata\n    BEGIN\n        UPDATE index_metadata SET updated_at = CURRENT_TIMESTAMP WHERE key = NEW.key;\n    END;\n\nCREATE TRIGGER IF NOT EXISTS update_other_data_updated_at \n    AFTER UPDATE ON other_data\n    BEGIN\n        UPDATE other_data SET updated_at = CURRENT_TIMESTAMP WHERE key = NEW.key;\n    END;\n","sql",[306,592,593,601,607,613,619,625,631,637,643,649,655,661,667,673,679,685,691,697,703,709,715,721,727,733,740,746,752,758,764,770,775,780,785,790,796,801,807,813,819,825,831,836,841,847,852,858,864,870,876,882,887,892,897,902,908,913,918,924,929,934,939,944,949,955,961,967,973,979,985,991,996,1002,1007,1013,1019,1025,1030,1036,1041,1047,1053,1059,1065,1071,1076,1082,1088,1093,1099,1104,1109,1115,1121,1126,1132,1137,1142,1148,1154,1159,1165],{"__ignoreMap":290},[594,595,598],"span",{"class":596,"line":597},"line",1,[594,599,600],{},"CREATE TABLE IF NOT EXISTS files (\n",[594,602,604],{"class":596,"line":603},2,[594,605,606],{},"    id TEXT PRIMARY KEY,\n",[594,608,610],{"class":596,"line":609},3,[594,611,612],{},"    value TEXT,\n",[594,614,616],{"class":596,"line":615},4,[594,617,618],{},"    metadata TEXT NOT NULL,\n",[594,620,622],{"class":596,"line":621},5,[594,623,624],{},"    file_name TEXT,\n",[594,626,628],{"class":596,"line":627},6,[594,629,630],{},"    file_type TEXT,\n",[594,632,634],{"class":596,"line":633},7,[594,635,636],{},"    file_size TEXT,\n",[594,638,640],{"class":596,"line":639},8,[594,641,642],{},"    upload_ip TEXT,\n",[594,644,646],{"class":596,"line":645},9,[594,647,648],{},"    upload_address TEXT,\n",[594,650,652],{"class":596,"line":651},10,[594,653,654],{},"    list_type TEXT,\n",[594,656,658],{"class":596,"line":657},11,[594,659,660],{},"    timestamp INTEGER,\n",[594,662,664],{"class":596,"line":663},12,[594,665,666],{},"    label TEXT,\n",[594,668,670],{"class":596,"line":669},13,[594,671,672],{},"    directory TEXT,\n",[594,674,676],{"class":596,"line":675},14,[594,677,678],{},"    channel TEXT,\n",[594,680,682],{"class":596,"line":681},15,[594,683,684],{},"    channel_name TEXT,\n",[594,686,688],{"class":596,"line":687},16,[594,689,690],{},"    tg_file_id TEXT,\n",[594,692,694],{"class":596,"line":693},17,[594,695,696],{},"    tg_chat_id TEXT,\n",[594,698,700],{"class":596,"line":699},18,[594,701,702],{},"    tg_bot_token TEXT,\n",[594,704,706],{"class":596,"line":705},19,[594,707,708],{},"    is_chunked BOOLEAN DEFAULT FALSE,\n",[594,710,712],{"class":596,"line":711},20,[594,713,714],{},"    tags TEXT, \n",[594,716,718],{"class":596,"line":717},21,[594,719,720],{},"    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n",[594,722,724],{"class":596,"line":723},22,[594,725,726],{},"    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP\n",[594,728,730],{"class":596,"line":729},23,[594,731,732],{},");\n",[594,734,736],{"class":596,"line":735},24,[594,737,739],{"emptyLinePlaceholder":738},true,"\n",[594,741,743],{"class":596,"line":742},25,[594,744,745],{},"CREATE TABLE IF NOT EXISTS settings (\n",[594,747,749],{"class":596,"line":748},26,[594,750,751],{},"    key TEXT PRIMARY KEY,\n",[594,753,755],{"class":596,"line":754},27,[594,756,757],{},"    value TEXT NOT NULL,\n",[594,759,761],{"class":596,"line":760},28,[594,762,763],{},"    category TEXT,\n",[594,765,767],{"class":596,"line":766},29,[594,768,769],{},"    description TEXT,\n",[594,771,773],{"class":596,"line":772},30,[594,774,720],{},[594,776,778],{"class":596,"line":777},31,[594,779,726],{},[594,781,783],{"class":596,"line":782},32,[594,784,732],{},[594,786,788],{"class":596,"line":787},33,[594,789,739],{"emptyLinePlaceholder":738},[594,791,793],{"class":596,"line":792},34,[594,794,795],{},"CREATE TABLE IF NOT EXISTS index_operations (\n",[594,797,799],{"class":596,"line":798},35,[594,800,606],{},[594,802,804],{"class":596,"line":803},36,[594,805,806],{},"    type TEXT NOT NULL,\n",[594,808,810],{"class":596,"line":809},37,[594,811,812],{},"    timestamp INTEGER NOT NULL,\n",[594,814,816],{"class":596,"line":815},38,[594,817,818],{},"    data TEXT NOT NULL,\n",[594,820,822],{"class":596,"line":821},39,[594,823,824],{},"    processed BOOLEAN DEFAULT FALSE,\n",[594,826,828],{"class":596,"line":827},40,[594,829,830],{},"    created_at DATETIME DEFAULT CURRENT_TIMESTAMP\n",[594,832,834],{"class":596,"line":833},41,[594,835,732],{},[594,837,839],{"class":596,"line":838},42,[594,840,739],{"emptyLinePlaceholder":738},[594,842,844],{"class":596,"line":843},43,[594,845,846],{},"CREATE TABLE IF NOT EXISTS index_metadata (\n",[594,848,850],{"class":596,"line":849},44,[594,851,751],{},[594,853,855],{"class":596,"line":854},45,[594,856,857],{},"    last_updated INTEGER,\n",[594,859,861],{"class":596,"line":860},46,[594,862,863],{},"    total_count INTEGER DEFAULT 0,\n",[594,865,867],{"class":596,"line":866},47,[594,868,869],{},"    last_operation_id TEXT,\n",[594,871,873],{"class":596,"line":872},48,[594,874,875],{},"    chunk_count INTEGER DEFAULT 0,\n",[594,877,879],{"class":596,"line":878},49,[594,880,881],{},"    chunk_size INTEGER DEFAULT 0,\n",[594,883,885],{"class":596,"line":884},50,[594,886,720],{},[594,888,890],{"class":596,"line":889},51,[594,891,726],{},[594,893,895],{"class":596,"line":894},52,[594,896,732],{},[594,898,900],{"class":596,"line":899},53,[594,901,739],{"emptyLinePlaceholder":738},[594,903,905],{"class":596,"line":904},54,[594,906,907],{},"CREATE TABLE IF NOT EXISTS other_data (\n",[594,909,911],{"class":596,"line":910},55,[594,912,751],{},[594,914,916],{"class":596,"line":915},56,[594,917,757],{},[594,919,921],{"class":596,"line":920},57,[594,922,923],{},"    type TEXT,\n",[594,925,927],{"class":596,"line":926},58,[594,928,769],{},[594,930,932],{"class":596,"line":931},59,[594,933,720],{},[594,935,937],{"class":596,"line":936},60,[594,938,726],{},[594,940,942],{"class":596,"line":941},61,[594,943,732],{},[594,945,947],{"class":596,"line":946},62,[594,948,739],{"emptyLinePlaceholder":738},[594,950,952],{"class":596,"line":951},63,[594,953,954],{},"CREATE INDEX IF NOT EXISTS idx_files_timestamp ON files(timestamp DESC);\n",[594,956,958],{"class":596,"line":957},64,[594,959,960],{},"CREATE INDEX IF NOT EXISTS idx_files_directory ON files(directory);\n",[594,962,964],{"class":596,"line":963},65,[594,965,966],{},"CREATE INDEX IF NOT EXISTS idx_files_channel ON files(channel);\n",[594,968,970],{"class":596,"line":969},66,[594,971,972],{},"CREATE INDEX IF NOT EXISTS idx_files_file_type ON files(file_type);\n",[594,974,976],{"class":596,"line":975},67,[594,977,978],{},"CREATE INDEX IF NOT EXISTS idx_files_upload_ip ON files(upload_ip);\n",[594,980,982],{"class":596,"line":981},68,[594,983,984],{},"CREATE INDEX IF NOT EXISTS idx_files_created_at ON files(created_at DESC);\n",[594,986,988],{"class":596,"line":987},69,[594,989,990],{},"CREATE INDEX IF NOT EXISTS idx_files_tags ON files(tags);\n",[594,992,994],{"class":596,"line":993},70,[594,995,739],{"emptyLinePlaceholder":738},[594,997,999],{"class":596,"line":998},71,[594,1000,1001],{},"CREATE INDEX IF NOT EXISTS idx_settings_category ON settings(category);\n",[594,1003,1005],{"class":596,"line":1004},72,[594,1006,739],{"emptyLinePlaceholder":738},[594,1008,1010],{"class":596,"line":1009},73,[594,1011,1012],{},"CREATE INDEX IF NOT EXISTS idx_index_operations_timestamp ON index_operations(timestamp);\n",[594,1014,1016],{"class":596,"line":1015},74,[594,1017,1018],{},"CREATE INDEX IF NOT EXISTS idx_index_operations_processed ON index_operations(processed);\n",[594,1020,1022],{"class":596,"line":1021},75,[594,1023,1024],{},"CREATE INDEX IF NOT EXISTS idx_index_operations_type ON index_operations(type);\n",[594,1026,1028],{"class":596,"line":1027},76,[594,1029,739],{"emptyLinePlaceholder":738},[594,1031,1033],{"class":596,"line":1032},77,[594,1034,1035],{},"CREATE INDEX IF NOT EXISTS idx_other_data_type ON other_data(type);\n",[594,1037,1039],{"class":596,"line":1038},78,[594,1040,739],{"emptyLinePlaceholder":738},[594,1042,1044],{"class":596,"line":1043},79,[594,1045,1046],{},"CREATE TRIGGER IF NOT EXISTS update_files_updated_at \n",[594,1048,1050],{"class":596,"line":1049},80,[594,1051,1052],{},"    AFTER UPDATE ON files\n",[594,1054,1056],{"class":596,"line":1055},81,[594,1057,1058],{},"    BEGIN\n",[594,1060,1062],{"class":596,"line":1061},82,[594,1063,1064],{},"        UPDATE files SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;\n",[594,1066,1068],{"class":596,"line":1067},83,[594,1069,1070],{},"    END;\n",[594,1072,1074],{"class":596,"line":1073},84,[594,1075,739],{"emptyLinePlaceholder":738},[594,1077,1079],{"class":596,"line":1078},85,[594,1080,1081],{},"CREATE TRIGGER IF NOT EXISTS update_settings_updated_at \n",[594,1083,1085],{"class":596,"line":1084},86,[594,1086,1087],{},"    AFTER UPDATE ON settings\n",[594,1089,1091],{"class":596,"line":1090},87,[594,1092,1058],{},[594,1094,1096],{"class":596,"line":1095},88,[594,1097,1098],{},"        UPDATE settings SET updated_at = CURRENT_TIMESTAMP WHERE key = NEW.key;\n",[594,1100,1102],{"class":596,"line":1101},89,[594,1103,1070],{},[594,1105,1107],{"class":596,"line":1106},90,[594,1108,739],{"emptyLinePlaceholder":738},[594,1110,1112],{"class":596,"line":1111},91,[594,1113,1114],{},"CREATE TRIGGER IF NOT EXISTS update_index_metadata_updated_at \n",[594,1116,1118],{"class":596,"line":1117},92,[594,1119,1120],{},"    AFTER UPDATE ON index_metadata\n",[594,1122,1124],{"class":596,"line":1123},93,[594,1125,1058],{},[594,1127,1129],{"class":596,"line":1128},94,[594,1130,1131],{},"        UPDATE index_metadata SET updated_at = CURRENT_TIMESTAMP WHERE key = NEW.key;\n",[594,1133,1135],{"class":596,"line":1134},95,[594,1136,1070],{},[594,1138,1140],{"class":596,"line":1139},96,[594,1141,739],{"emptyLinePlaceholder":738},[594,1143,1145],{"class":596,"line":1144},97,[594,1146,1147],{},"CREATE TRIGGER IF NOT EXISTS update_other_data_updated_at \n",[594,1149,1151],{"class":596,"line":1150},98,[594,1152,1153],{},"    AFTER UPDATE ON other_data\n",[594,1155,1157],{"class":596,"line":1156},99,[594,1158,1058],{},[594,1160,1162],{"class":596,"line":1161},100,[594,1163,1164],{},"        UPDATE other_data SET updated_at = CURRENT_TIMESTAMP WHERE key = NEW.key;\n",[594,1166,1168],{"class":596,"line":1167},101,[594,1169,1070],{},[24,1171,1172,1182],{},[27,1173,1174,1175,555,1178,1181],{},"回到 Pages 项目绑定面板，新增 D1 绑定，",[31,1176,1177],{},"绑定变量名必须是",[306,1179,1180],{},"img_d1","，关联新建数据库",[27,1183,1184],{},"重新部署项目，数据库绑定配置正式生效",[19,1186,1188],{"id":1187},"_46-绑定-kvd1r2-存储","4.6 绑定 KV、D1、R2 存储",[24,1190,1191,1197,1203,1206,1209,1212],{},[27,1192,1193,1194],{},"打开创建好的 CLoudFlare-ImgBed pages 项目，找到设置→绑定\n",[288,1195],{"alt":290,"src":1196},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F07\u002F19\u002F1784397068193.avif",[27,1198,1199,1200],{},"添加 KV 或者 D1 其中一个，再添加 R2 存储。\n",[288,1201],{"alt":290,"src":1202},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F07\u002F19\u002F1784397111308.avif",[27,1204,1205],{},"KV 填写，名称：img_url 值：cloudflare_imgbed_kv",[27,1207,1208],{},"D1 数据库，名称：img_d1 值：cloudflare_imgbed_d1",[27,1210,1211],{},"R2 存储桶，名称：img_r2 值：cloudflare_imgbed_r2",[27,1213,1214],{},[31,1215,1216],{},"值，以自己创建的为主，名称必须固定",[19,1218,1220],{"id":1219},"_47-重新部署","4.7 重新部署",[189,1222,1223,1224],{},"设置好一切后，就点击重新部署，那么以上绑定的就会生效。\n",[288,1225],{"alt":290,"src":1226},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F07\u002F19\u002F1784397446434.avif",[11,1228],{},[14,1230,1232],{"id":1231},"_5-登录后台以及初始化","5 登录后台以及初始化",[19,1234,1236],{"id":1235},"_51-后台登录密码账号资料填写","5.1 后台登录密码账号资料填写",[24,1238,1239,1242,1245],{},[27,1240,1241],{},"访问 Pages 生成的项目域名，进入初始化配置页面",[27,1243,1244],{},"自定义管理员登录账号、密码，离线备份保存，用于后台登录鉴权",[27,1246,1247,1248],{},"全局权限配置建议关闭匿名上传，防止外部人员恶意上传占用存储额度\n",[288,1249],{"alt":290,"src":1250},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F07\u002F19\u002F1784397638502.avif",[19,1252,1254],{"id":1253},"_52-其他-s3-存储桶填写","5.2 其他 S3 存储桶填写",[24,1256,1257,1260,1263,1266],{},[27,1258,1259],{},"S3 Secret Access",[27,1261,1262],{},"S3 Key，私钥凭证",[27,1264,1265],{},"存储桶名称",[27,1267,1268,1269],{},"区域端点地址\n",[288,1270],{"alt":290,"src":1271},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F07\u002F19\u002F1784397784865.avif",[11,1273],{},[14,1275,1277],{"id":1276},"_6-功能测试验证","6 功能测试验证",[24,1279,1280,1283,1286,1289,1292,1295,1298],{},[27,1281,1282],{},"基础上传和图片访问测试",[27,1284,1285],{},"使用管理员账号登录后台，上传 PNG \u002F JPG \u002F WebP \u002F GIF 合规图片文件",[27,1287,1288],{},"上传完成页面自动生成 CDN 访问链接，浏览器直接打开链接，图片正常加载无 403 \u002F 500 报错",[27,1290,1291],{},"刷新资源列表页面，已上传图片完整展示，元数据无丢失、错乱",[27,1293,1294],{},"执行图片删除操作，资源同步从 R2 存储、元数据库清除",[27,1296,1297],{},"异常场景校验：上传 exe \u002F zip \u002F txt 非图片文件，接口拦截并返回错误提示",[27,1299,1300,1301,1304,1307],{},"跨域兼容性测试：将图片链接嵌入博客、笔记编辑器，无防盗链拦截，图片正常渲染\n",[288,1302],{"alt":290,"src":1303},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F07\u002F19\u002F1784397688920.avif",[288,1305],{"alt":290,"src":1306},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F07\u002F19\u002F1784397998222.avif",[288,1308],{"alt":290,"src":1309},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F07\u002F19\u002F1784398040955.avif",[11,1311],{},[14,1313,1315],{"id":1314},"_7-总结","7 总结",[24,1317,1318,1321,1324,1327,1330],{},[27,1319,1320],{},"Cloudflare ImgBed 采用 Pages + R2 + KV\u002FD1 无服务器架构，免费额度完全覆盖个人使用场景，全球 CDN 解决图片跨地域访问延迟问题",[27,1322,1323],{},"Pages 部署方案自带可视化管理后台，操作门槛低，适配博客站长、笔记用户；纯 Workers 方案仅适合自动化接口调用场景",[27,1325,1326],{},"完整标准化部署流程：Fork 开源仓库 → Pages 创建项目并配置构建参数 → 二选一绑定 KV\u002FD1 元数据存储 → 绑定 R2 对象存储 → 后台初始化配置",[27,1328,1329],{},"生产环境安全规范：所有存储密钥、凭证统一通过 Cloudflare 后台资源绑定注入，禁止前端硬编码密钥，规避资源盗刷风险",[27,1331,1332],{},"平台存在硬性资源约束：Workers 内存上限、R2 10GB 免费存储、KV 容量限制，大量高清原图场景需定期清理闲置图片，防止超出免费配额产生计费",[189,1334,1335],{},"Created with ❤️ by 张萌萌",[1337,1338,1339],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":290,"searchDepth":603,"depth":603,"links":1341},[1342,1347,1352,1358,1367,1371,1372],{"id":16,"depth":603,"text":17,"children":1343},[1344,1345,1346],{"id":21,"depth":609,"text":22},{"id":46,"depth":609,"text":47},{"id":79,"depth":609,"text":80},{"id":99,"depth":603,"text":100,"children":1348},[1349,1350,1351],{"id":103,"depth":609,"text":104},{"id":115,"depth":609,"text":116},{"id":186,"depth":609,"text":187},{"id":200,"depth":603,"text":201,"children":1353},[1354,1355,1356,1357],{"id":204,"depth":609,"text":205},{"id":214,"depth":609,"text":215},{"id":252,"depth":609,"text":253},{"id":265,"depth":609,"text":266},{"id":296,"depth":603,"text":297,"children":1359},[1360,1361,1362,1363,1364,1365,1366],{"id":300,"depth":609,"text":301},{"id":334,"depth":609,"text":335},{"id":376,"depth":609,"text":377},{"id":445,"depth":609,"text":446},{"id":452,"depth":609,"text":453},{"id":1187,"depth":609,"text":1188},{"id":1219,"depth":609,"text":1220},{"id":1231,"depth":603,"text":1232,"children":1368},[1369,1370],{"id":1235,"depth":609,"text":1236},{"id":1253,"depth":609,"text":1254},{"id":1276,"depth":603,"text":1277},{"id":1314,"depth":603,"text":1315},"Blog",null,"2026-07-19 02:09:08",false,"md","https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F07\u002F19\u002F1784398328615.avif",{"published":1375},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F08-Cloudflare-ImgBed-免费私有图床完整部署手册",{"title":5,"description":5},"blog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F08-Cloudflare ImgBed 免费私有图床完整部署手册",[261,1384,1385],"对象存储","图床","ZxJr96bxH3pEy7RFYzm2U1BLocBh64k9X40u2A4BlKs",[1388,1392,1396,1400,1403,1406,1410,1413,1417,1418,1422,1426,1430,1434,1438,1442,1446,1450,1454,1457,1461,1465,1469,1473,1476,1480,1484,1488,1492,1496,1500,1504,1508,1512,1516,1520,1524,1527,1531,1535,1539,1543,1547,1550,1553,1556,1559,1562,1565,1568,1571,1574,1577,1580,1583,1586,1589,1592,1595,1598,1601],{"path":1389,"title":1390,"date":1391},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F16.IPv6与DNS的分手协议","IPv6 与 DNS 的分手协议","2026-10-02",{"path":1393,"title":1394,"date":1395},"\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F04.我的-AI-入坑记","我的 AI 入坑记","2026-09-24",{"path":1397,"title":1398,"date":1399},"\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F01.用-Docker-部署-Ollama-与-Open-WebUI-搭建本地大模型","用 Docker 部署 Ollama 与 Open WebUI 搭建本地大模型","2026-09-23",{"path":1401,"title":1402,"date":1399},"\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F02.用-New-API-搭建统一-LLM-网关与-Lucky-反代外网访问","用 New API 搭建统一 LLM 网关与 Lucky 反代外网访问",{"path":1404,"title":1405,"date":1399},"\u002Fblog\u002F10-技术专栏\u002F50-AI\u002F03.用-Dify-搭建本地知识库让-AI-读懂你写的博客","用 Dify 搭建本地知识库，让 AI 读懂你写的博客",{"path":1407,"title":1408,"date":1409},"\u002Fblog\u002F20-生活碎片\u002F03-2026年秋季计划","2026 年秋季计划","2026-09-19",{"path":1411,"title":1412,"date":1409},"\u002Fblog\u002F30-学习笔记\u002F02.Python入门书单","Python 入门书单：从第一行代码到写出真正的程序",{"path":1414,"title":1415,"date":1416},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F09-Cloudflare-低延迟接入方案","Cloudflare 低延迟接入方案","2026-07-22 03:17:28",{"path":1380,"title":5,"date":1375},{"path":1419,"title":1420,"date":1421},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F07-腾讯云-EdgeOne-边缘函数实现七牛-S3-随机图床-API","腾讯云 EdgeOne 边缘函数实现七牛云 & S3 存储随机图床 API","2026-07-13 21:25:48",{"path":1423,"title":1424,"date":1425},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F06-腾讯-EdgeOne-部署-Twikoo-评论系统指南","腾讯EdgeOne部署Twikoo评论系统指南","2026-06-14 17:41:11",{"path":1427,"title":1428,"date":1429},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F05-OpenList-接入-S3-对象存储完整使用教程","OpenList 接入 S3 对象存储完整使用教程","2026-06-11 13:08:07",{"path":1431,"title":1432,"date":1433},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F04-Cloudflare-R2-图床与全球加速方案","Cloudflare R2 图床与全球加速方案","2026-06-09 13:07:35",{"path":1435,"title":1436,"date":1437},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F03-免费图床与CDN加速方案","免费图床与 CDN 加速方案","2026-06-09",{"path":1439,"title":1440,"date":1441},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F02-零基础优雅搭建静态博客全教程","零基础优雅搭建静态博客全教程","2026-06-04",{"path":1443,"title":1444,"date":1445},"\u002Fblog\u002F10-技术专栏\u002F40-WebsiteBuilding\u002F01-远古产物—博客","赛博空间的私人岛屿：博客架构与风格美学","2026-06-03",{"path":1447,"title":1448,"date":1449},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F15.关于NAT回流与内网域名直连的终极指南","关于 NAT 回流与内网域名直连的终极指南","2026-05-13",{"path":1451,"title":1452,"date":1453},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F14.飞牛安全访问与Lucky反代雷池防护","飞牛安全访问与 Lucky 反代雷池防护","2026-02-03",{"path":1455,"title":1456,"date":1453},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F18.一键DD纯净系统脚本","一键 DD 纯净系统脚本",{"path":1458,"title":1459,"date":1460},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F17.Ventoy多系统启动盘制作与使用全指南","Ventoy 多系统启动盘制作与使用全指南","2026-02-02",{"path":1462,"title":1463,"date":1464},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F16.Emby元数据匹配与中文命名规范","Emby 元数据匹配与中文命名规范","2026-02-01",{"path":1466,"title":1467,"date":1468},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F15.基于PVE系统安装LXC-debian","基于 PVE 系统安装 LXC-debian","2026-01-19",{"path":1470,"title":1471,"date":1472},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F13.Lucky反向代理终极指南","Lucky 反向代理终极指南","2026-01-16",{"path":1474,"title":1475,"date":1472},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F14.OEC盒子Armbian刷机指南","OEC 盒子 Armbian 刷机指南",{"path":1477,"title":1478,"date":1479},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F13.oec-fnOS安装","OEC-Turbo (RK3566) 安装飞牛 OS","2026-01-15",{"path":1481,"title":1482,"date":1483},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F12.新的篇章，debian12的配置","新的篇章，debian12 的配置","2026-01-14",{"path":1485,"title":1486,"date":1487},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F11.飞牛OS安装后必要配置","飞牛 OS 安装后必要配置","2026-01-06",{"path":1489,"title":1490,"date":1491},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F11.NAS-导航页的终极形态","告别繁琐配置：NAS 导航页的终极形态 —— 从 Sun-Panel 到 FlatNAS","2026-01-05",{"path":1493,"title":1494,"date":1495},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F10.LogVar-弹幕-API-部署指南","LogVar 弹幕 API  (纯本地缓存版) 部署指南","2025-12-30",{"path":1497,"title":1498,"date":1499},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F10.基于Lucky与QMediaSync的飞牛远程媒体访问","基于 Lucky 与 QMediaSync 的飞牛远程媒体访问","2025-12-26",{"path":1501,"title":1502,"date":1503},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F09.新的篇章，PVE虚拟机","新的篇章，PVE虚拟机","2025-12-21",{"path":1505,"title":1506,"date":1507},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F08.Linux系统，音响有底噪","Linux 系统，音响有底噪怎么办？","2025-12-17",{"path":1509,"title":1510,"date":1511},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F07.飞牛OS的安装","飞牛 OS 的安装","2025-12-14",{"path":1513,"title":1514,"date":1515},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F06.Debian13换源","Debian13 换源","2025-11-29",{"path":1517,"title":1518,"date":1519},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F05.Kodi-CoreELEC安装指南","Kodi & CoreELEC 安装指南","2025-11-21",{"path":1521,"title":1522,"date":1523},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F09.兰空图床和高清图标库","兰空图床和高清图标库","2025-11-15",{"path":1525,"title":1526,"date":1523},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F04.N1盒子Armbian刷机与配置","N1 盒子 Armbian 刷机与配置",{"path":1528,"title":1529,"date":1530},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F08.你是否需要一个图床？","你是否需要一个图床？","2025-11-14",{"path":1532,"title":1533,"date":1534},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F03.飞牛NAS第三方应用商店安装","飞牛 NAS 第三方应用商店 (FnDepot) 安装指南","2025-10-13",{"path":1536,"title":1537,"date":1538},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F02.Hills播放器-Windows-安卓","Hills 播放器（Windows + 安卓）","2025-09-24",{"path":1540,"title":1541,"date":1542},"\u002Fblog\u002F10-技术专栏\u002F30-Linux\u002F01.一行代码降低服务器功耗","一行代码降低服务器功耗","2025-08-19",{"path":1544,"title":1545,"date":1546},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F01.容器-docker-docker-compose","容器 & docker & docker-compose","2025-08-05",{"path":1548,"title":1549,"date":1546},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F02.容器项目-传输类","容器项目&传输类",{"path":1551,"title":1552,"date":1546},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F03.容器项目-相册类","容器项目&相册类",{"path":1554,"title":1555,"date":1546},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F04.容器项目-媒体类","容器项目&媒体类",{"path":1557,"title":1558,"date":1546},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F05.Emby自有授权媒体库（一）","Emby 自有授权媒体库（一）",{"path":1560,"title":1561,"date":1546},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F06.Emby自有授权媒体库（二）","Emby 自有授权媒体库（二）",{"path":1563,"title":1564,"date":1546},"\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F07.Adguard-Home去广告","Adguard Home 去广告",{"path":1566,"title":1567,"date":1546},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F01.新的篇章，软路由","新的篇章，软路由",{"path":1569,"title":1570,"date":1546},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F02.如何玩公网，怎么远程访问（一）","如何玩公网，怎么远程访问（一）",{"path":1572,"title":1573,"date":1546},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F03.如何玩公网，怎么远程访问（二）","如何玩公网，怎么远程访问（二）",{"path":1575,"title":1576,"date":1546},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F04.如何玩公网，怎么远程访问（三）","如何玩公网，怎么远程访问（三）",{"path":1578,"title":1579,"date":1546},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F05.免费域名与远程访问","免费域名与远程访问",{"path":1581,"title":1582,"date":1546},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F06.没有公网如何远程访问","没有公网如何远程访问",{"path":1584,"title":1585,"date":1546},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F07.爱快与OpenWRT双软路由MAC地址重复问题修正","爱快与 OpenWRT 双软路由MAC地址重复问题修正",{"path":1587,"title":1588,"date":1546},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F08.OpenWRT扩容","OpenWRT 扩容",{"path":1590,"title":1591,"date":1546},"\u002Fblog\u002F10-技术专栏\u002F20-network\u002F09.OpenWRT旁路由一条龙教程","OpenWRT 旁路由一条龙教程",{"path":1593,"title":1594,"date":1546},"\u002Fblog\u002F20-生活碎片\u002F02.在裂缝中种满阳光","让灵魂带着光行走：在裂缝中种满太阳",{"path":1596,"title":1597,"date":1546},"\u002Fblog\u002F30-学习笔记\u002F01.Typora学习笔记","Typora学习笔记",{"path":1599,"title":1600,"date":1546},"\u002Fblog\u002F30-学习笔记\u002F02.Markdown-拓展","Markdown 拓展",{"path":1602,"title":1603,"date":1604},"\u002Fblog\u002F20-生活碎片\u002F01.拥抱生活中的光与热","拥抱生活中的光与热","2025-07-05",1791304407667]