news 2026/9/27 4:35:18

ChatGPT-Shortcut(AiShort)自部署全解析:Vercel / Cloudflare / Docker / 离线内网版与自定义配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ChatGPT-Shortcut(AiShort)自部署全解析:Vercel / Cloudflare / Docker / 离线内网版与自定义配置
  • AI 应用
  • 提示工程
  • 人工智能
  • 前端

【免费下载链接】ChatGPT-Shortcut

Stop writing prompts from scratch — a searchable prompt library for ChatGPT, Claude, Gemini and Cursor · Русский 한국어 العربية हिन्दी ไทย | 别再从头写提示词:现成的拿来就用,好用的收进自己的库

项目地址:https://gitcode.com/gh_mirrors/ch/ChatGPT-Shortcut
点击查看免费下载

本文基于 ChatGPT-Shortcut(AiShort)项目的部署文档编写,系统讲解如何自托管这一「可搜索 AI 提示词库」:先按需求在三种部署形态中选型,再分别掌握标准部署(本地构建、Vercel、Cloudflare Pages、Docker)、面向企业内网的离线部署版、站点与提示词的自定义配置,以及让 Fork 自动跟随上游更新的同步机制。读完本文,你将具备独立搭建、定制并长期维护一套 AiShort 实例的完整能力。

部署形态选型:先想清楚再动手

AiShort 允许开发者自部署或深度定制,官方将部署方式归纳为三种形态,选型时主要看对后端与数据归属的需求:

形态后端说明
标准部署(默认)复用官方共享后端Fork 后可自定义网站名称、描述、提示词等(见 配置与自定义);登录、收藏、社区、同步开箱即用
离线部署版无后端,数据存浏览器本地企业内网、政务等无外网环境,无需账户
带后端的完整自部署自建独立后端需要独立的账户体系、数据自主可控、私有社区

前两种形态按本文即可完成部署。第三种因后端服务本身并未开源,需要邮件联系开发者并简要说明使用场景与规模,由官方提供部署方案与支持。

本指南按部署流程拆分为四篇子文档,本文将其逐一展开并结合仓库源码佐证:标准部署、离线部署版、配置与自定义、开启同步更新。

标准部署:复用官方共享后端,开箱即用

标准部署的核心思路是复用官方共享后端——登录、收藏、社区、评论、跨设备同步等能力开箱即用,你只需要把前端静态站点跑起来。先 Fork 本项目,再任选一种方式部署。

环境要求:Node.js 20.0 或更高版本(package.json 的engines字段明确标注"node": ">=20.0"),支持 macOS、Windows(含 WSL)和 Linux。

本地构建

# 安装依赖 yarn # 本地开发 yarn start # 构建:默认按 scripts/i18nLocales.mjs 的 defaultLocale 生成静态产物到 build 目录 yarn build

只构建部分语言:用yarn build --locale <locale>(如zh-Hans、en、ja……完整 locale 列表见 scripts/i18nLocales.mjs)。多语言可串联:yarn build --locale zh-Hans && yarn build --locale en。

从源码层面看,yarn build实际执行的是node scripts/buildPhased.mjs(见 package.json 的scripts.build)。该脚本的设计值得了解:

  • 默认语言单一数据源:defaultLocale(当前为zh-Hans)与 18 个locales都定义在 scripts/i18nLocales.mjs,同时被docusaurus.config.js与分段构建脚本引用,从根上避免「配置里的 locales」与「实际构建的 locales」脱钩(历史上这种脱钩正是脏 URL 的根源之一)。
  • 透传模式:当显式传入参数(如yarn build --locale pt)时,scripts/buildPhased.mjs 直接把参数转交给单次docusaurus build,不再分段,与 Vercel/Cloudflare 等只部署单一/少数语言的场景保持一致。
  • 分段构建防 OOM:不带参数的全量yarn build会把 18 个 locale 切成每块 ≤3 个语言的小块,每块单独跑一个docusaurus build进程、进程退出即释放内存——因为一次性docusaurus build全部 18 个 locale 会在单进程内把内存撑爆。块大小可用环境变量BUILD_CHUNK调整(默认 3,内存吃紧可用 2)。构建完成后还会把所有 locale 的 sitemap 合并进根build/sitemap.xml,让 robots 指向的站点地图覆盖全部 18 种语言。

Vercel 部署

Vercel 支持导入仓库一键部署:先在页面右上角 Fork 本项目,再到 Vercel 新建项目页面导入刚 Fork 的仓库即可,其余配置保持默认。

注意:Vercel 免费版可能因内存不足报错。改单语言部署即可——进入项目Settings → Build & Deployment → Build Command,点Override,改成单语言命令(中文yarn build --locale zh-Hans,葡萄牙语yarn build --locale pt,其他类推)。这正是分段构建脚本中「透传模式」的设计动机:单语言场景下直接跑一次docusaurus build,峰值内存远低于全量 18 语言构建。

Cloudflare Pages 部署

  1. 先在仓库页面点击Fork生成自己的副本。
  2. 登录 Cloudflare Pages,选择Create a project,绑定刚 Fork 的仓库。
  3. 配置构建参数:
    • Build command:yarn build --locale zh-Hans(按要部署的语言换 locale,葡萄牙语用yarn build --locale pt)
    • Output directory:build
  4. 点部署,等待 Cloudflare Pages 构建完成。

之后每次推新代码都会自动触发构建和部署。

Docker 部署

一行命令即可启动:

# ghcr.io docker run -d -p 3000:3000 --name chatgpt-shortcut ghcr.io/rockbenben/chatgpt-shortcut:latest # docker hub docker run -d -p 3000:3000 --name chatgpt-shortcut rockben/chatgpt-shortcut:latest

或用docker-compose(仓库根目录自带一份可直接使用的 docker-compose.yml):

services: chatgpt-shortcut: container_name: chatgpt-shortcut image: ghcr.io/rockbenben/chatgpt-shortcut:latest ports: - "3000:3000" restart: unless-stopped

镜像背后的实现(见 Dockerfile):采用两阶段构建——第一阶段用node:24-alpine作为构建器执行yarn install --frozen-lockfile与yarn build,期间通过SKIP_GIT_INFO=true关闭对 git 的依赖(构建日期回退为当前时间,见docusaurus.config.js的buildDate逻辑),从而无需安装 git、可把.git排除出构建上下文;第二阶段用nginx:stable-alpine托管静态产物,并把仓库自带的 nginx.conf 复制进容器。nginx 配置监听 3000 端口,location /下用try_files $uri $uri/ /index.html实现 SPA 回退,另配置error_page 404 /404.html。

离线部署版:企业内网与无外网环境

适用场景:企业内网、政务网络、保密环境、校园网等无法或不便访问外网的环境(如对数据驻留有要求的机构等)。离线版无后端、无需注册——所有数据存在浏览器本地。部署后内网团队打开浏览器即可使用。

团队使用方式

离线版是纯静态网站,部署到内网服务器后:

  1. 管理员将离线版部署到内网服务器(如http://192.168.1.100:3000)。
  2. 团队成员用浏览器打开该地址,即可浏览、搜索、复制提示词。
  3. 每个人的收藏和自建提示词保存在自己的浏览器中,互不影响。
  4. 无需注册账户,无需安装任何软件,打开即用。

提示词库(精选提示词)是构建时打包的静态数据,所有用户看到的内容一致;而每个用户的收藏、自建提示词、排序和标签保存在各自浏览器的 localStorage,彼此独立。

与在线版的功能区别

功能在线版离线版
提示词浏览/搜索/筛选✅✅
提示词复制✅✅
收藏管理服务器存储浏览器本地存储
自定义提示词服务器存储浏览器本地存储
我的收藏(拖拽排序、标签)✅✅
多语言支持(18 种)✅✅
数据导入/导出✅✅(格式互通)
提示词详情页✅✅(静态数据,无评论)
用户注册/登录✅❌(无需账户)
社区提示词列表/投票✅❌
评论反馈✅❌

浏览器本地数据存储

每位用户的数据保存在自己浏览器的 localStorage,与服务器无关,共使用四个存储键:

数据存储键说明
收藏列表local_favorites收藏的提示词 ID 数组
自建提示词local_user_prompts用户创建的提示词数据
排列顺序local_myspace_order我的收藏中的卡片排序
自定义标签local_custom_tags标签定义和分配关系

注意事项:

  • 浏览器本地存储约 5MB 容量上限,日常使用够用。
  • 清除浏览器数据会丢失个人数据——建议定期通过「我的账户 → 数据管理 → 导出数据」备份。
  • 更换电脑或浏览器后需重新导入数据。

部署方式

离线版基于offline分支。管理员完成一次部署后,团队成员无需任何操作即可使用。

Docker 部署(推荐)——一行命令即可在内网服务器运行:

# 使用预构建的离线版镜像 docker run -d -p 3000:3000 --name aishort-offline ghcr.io/rockbenben/chatgpt-shortcut:offline # 或使用 Docker Hub docker run -d -p 3000:3000 --name aishort-offline rockben/chatgpt-shortcut:offline

部署后团队成员访问http://<服务器IP>:3000即可使用。使用docker-compose:

services: aishort-offline: container_name: aishort-offline image: ghcr.io/rockbenben/chatgpt-shortcut:offline ports: - "3000:3000" restart: unless-stopped

源码构建——如需自定义提示词内容或修改配置:

# 克隆离线版分支(offline 分支是否可用以你实际获取的仓库为准) git clone -b offline https://gitcode.com/gh_mirrors/ch/ChatGPT-Shortcut.git cd ChatGPT-Shortcut # 安装依赖 yarn # 本地开发 yarn start # 构建单语言版本(如中文 / 印尼语) yarn build --locale zh-Hans yarn build --locale ind # 构建全部语言 yarn build

构建产物在build/目录,可部署到任意静态文件服务器(Nginx、Apache、Caddy 等)。

Nginx 配置示例:

server { listen 3000; server_name _; root /path/to/build; index index.html; location / { try_files $uri $uri/ /index.html; } }

平台部署:Vercel、Cloudflare Pages 等平台部署时选择offline分支即可,其他步骤与在线版一致。

数据导入导出与迁移

导出:进入「我的账户 → 数据管理 → 导出数据」,将个人收藏和自建提示词导出为 JSON 文件。

导入支持以下格式的 JSON 文件:

  • 离线版导出的文件:完整恢复收藏、提示词、排序和标签。
  • 在线版导出的文件:自动兼容处理——
    • 用户提示词 → 合并到本地(按标题去重);
    • 精选收藏(card)→ 合并到本地收藏;
    • 社区收藏(community)→ 自动转为本地自建提示词;
    • MySpace 排序 → 恢复到本地;
    • 自定义标签 → 追加合并(不覆盖已有)。

从在线版迁移:在在线版(aishort.top)的「我的账户」页面导出数据,再到离线版的「我的账户 → 数据管理」导入该 JSON 文件;社区收藏会自动转为本地提示词,精选收藏正常同步。

常见问题

  • 部署后团队怎么用?管理员部署到内网服务器后,把访问地址(如http://192.168.1.100:3000)告诉团队成员即可。每个人用浏览器打开,无需安装、无需注册。
  • 每个人的数据会互相影响吗?不会。每个人的收藏和自建提示词保存在各自浏览器的 localStorage,完全独立。服务器上只有共享的提示词库(只读)。
  • 数据会丢失吗?清除浏览器数据/缓存、使用隐私/无痕模式浏览、更换电脑或浏览器,都会导致个人数据丢失。建议重要数据定期通过「我的账户 → 数据管理 → 导出数据」备份为 JSON 文件。
  • 能否在团队间共享自建提示词?可以。一人导出 JSON 文件后,其他成员在「我的账户 → 数据管理 → 导入数据」中导入即可,自动去重。
  • 如何更新提示词库?提示词库是构建时打包的静态数据:管理员拉取最新的offline分支代码,重新构建并部署(或拉取最新 Docker 镜像),团队成员刷新浏览器即可看到新内容,个人数据不受影响。
  • 离线版的数据格式和在线版兼容吗?兼容。导出的 JSON 格式相同,可在两个版本间互相导入。提示词 ID 不同(在线版用服务器 ID,离线版用时间戳 ID),但导入按标题去重,不会冲突。

配置与自定义:标题、描述、提示词与后端

AiShort 开源,可以自由修改网站标题、描述、提示词与后端等内容。

站点标题与描述

编辑docusaurus.config.js即可。仓库当前的配置中,title仅保留品牌名AiShort,url为正式站点地址、baseUrl为/;构建日期取自 HEAD commit 时间以保证 18 个语言版本的 schema.org 时间字段一致(非 git 环境或 Docker 构建中SKIP_GIT_INFO=true时回退为当前时间)。

使用说明与介绍

修改 docs 目录下的对应文件即可(如 docs/introduction.md 与 docs/guides 下的各指南)。

主页提示词:数据模型与生成流水线

源数据在src/data/prompt.json——一个数组,每个对象按zh/en/ja等语言代码键存放所有语言的版本。新增提示词时格式如下:

{ "zh": { "title": "custom prompt", "prompt": "custom prompt", "description": "custom description", "remark": "custom mark" }, "en": { "title": "custom prompt", "prompt": "custom prompt", "description": "custom description", "remark": "custom mark" }, "website": null, "tags": ["music"], "id": 500, "weight": 1 }

编辑后运行python CodeUpdateHandler.py,脚本会按预设规则拆分prompt.json生成各语言的prompt_<locale>.json,并同步更新各语言的主页面和精选提示词页面。

从 CodeUpdateHandler.py 的源码可以看到流水线的关键实现:

  • 脚本按src/data下的prompt.json为单一输入,依据语言列表(首语言zh-Hans为主语言)拆分为多份语言文件,并生成卡片 JSON 与详情页数据;
  • 若检测到opencc库则用 OpenCC 完成简体到繁体的自动转换,否则跳过转换并给出警告;
  • 脚本还会为每张卡片注入(id, lang)维度的datePublished/dateModified:卡片内容未变则保留旧日期(跨多次重建保持稳定),内容变更则更新dateModified、保留datePublished,卡片不存在则两个日期都用构建时间。

注意:建议将id设为 500 以上,避免与现有提示词或社区内容的 ID 冲突。运行python CodeUpdateHandler.py会自动为每条提示词(含新增的)生成卡片数据和详情页,无需手动创建页面文件;自定义提示词默认没有精选元描述和评论数据。

自定义后端:API 模块结构

项目默认连接一个共享后端(登录、收藏、社区、评论、跨设备同步等功能都依赖它),src/api提供了完整的接口契约可供参考。后端服务本身并未开源;如需带后端的完整自部署,参见前文「部署形态选型」。

API 模块结构:

src/api/ ├── index.ts # 统一导出入口 ├── config.ts # API URL 配置 ├── client.ts # Axios 客户端(含认证拦截器) ├── auth.ts # 认证 API(登录/注册/OAuth) ├── prompts.ts # 提示词 CRUD + 搜索 + 投票 ├── favorites.ts # 收藏操作 ├── myspace.ts # 我的空间数据(核心数据源) ├── comments.ts # 评论系统 └── user.ts # 用户信息

关键实现细节(结合源码):

  • src/api/config.ts 集中定义所有接口地址:主 API 地址API_URL(生产环境为https://api.newzone.top/api,Strapi 后端)、Google OAuth 登录入口服务地址、以及新旧 OAuth 流程的开关USE_LEGACY_GAUTH。所有接口地址集中在此,便于后期修改。
  • src/api/client.ts 创建 Axios 实例(baseURL取API_URL,30 秒超时兜底),请求拦截器自动附加Authorization: Bearer <token>;响应拦截器统一处理错误,遇到 401 会清除本地auth_token并联动清理用户相关缓存。

缓存机制:API 数据通过lscache结合 ETag 实现智能缓存——服务器返回 304 Not Modified 时直接复用本地缓存,减少数据传输。缓存 TTL 在 src/utils/cache.js 中定义(如提示词卡片 100 天、社区/用户/评论/我的空间等数据 30 天,均配合 ETag 使用),并在lscache之上再加一层内存 Map 缓存以保证同一 key 多次读取返回同一引用。

开启同步更新:Fork 自动跟随上游

Vercel 一键部署的项目可能一直提示存在更新——因为Vercel 默认新建项目而非 fork,无法检测上游更新。解决方法:

  1. 删除原仓库;
  2. 用页面右上角的Fork按钮 fork 本项目;
  3. 在 Vercel 新项目页面的 Import Git Repository 处重新选择刚 fork 的项目并部署。

打开自动更新

Fork 后需手动在Actions页面启用 Workflows,并跑一次Upstream SyncAction(如果遇到 Upstream Sync 执行错误,请先手动执行一次 Sync Fork)。启用后项目每天自动同步上游更新,避免功能落后。

手动更新代码

想手动立即更新时,可参考代码托管平台关于「同步 fork」的官方文档,通过 Web 界面或命令行把上游的更新合并进自己的 fork。也可以关注(star / watch)本项目,及时获得新功能更新通知。

小结

三种部署形态对应三类需求:标准部署(含本地构建、Vercel、Cloudflare Pages、Docker 四种落地方式)适合大多数希望「开箱即用 + 轻度定制」的场景;离线部署版适合隔离网络环境,四个 localStorage 存储键把数据完全留在用户浏览器;带后端的完整自部署则需要联系官方获取方案。若想深度定制,站点元信息在docusaurus.config.js、提示词在src/data/prompt.json+CodeUpdateHandler.py、后端契约在src/api,而多语言构建的默认语言与语言列表统一由 scripts/i18nLocales.mjs 这一个数据源驱动。部署完成后,别忘了按上文「开启同步更新」一节让 Fork 每天跟随上游,持续获得新功能。

  • AI 应用
  • 提示工程
  • 人工智能
  • 前端

【免费下载链接】ChatGPT-Shortcut

Stop writing prompts from scratch — a searchable prompt library for ChatGPT, Claude, Gemini and Cursor · Русский 한국어 العربية हिन्दी ไทย | 别再从头写提示词:现成的拿来就用,好用的收进自己的库

项目地址:https://gitcode.com/gh_mirrors/ch/ChatGPT-Shortcut
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/27 4:31:47

浏览器终端的原生超链接:wterm OSC 8完整实现与交互细节

浏览器终端的原生超链接&#xff1a;wterm OSC 8完整实现与交互细节 【免费下载链接】wterm A terminal emulator for the web 项目地址: https://gitcode.com/gh_mirrors/wterm1/wterm wterm 是一个运行在浏览器里的终端模拟器&#xff08;A terminal emulator for the…

作者头像 李华
网站建设 2026/9/27 4:30:29

欧姆龙PLC通信实战:HostLink与FINS协议选型、调试与Linux直连

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/27 4:23:53

Ubuntu 22.04下V100s驱动与CUDA 12.2/cuDNN 8.9.7安装避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/27 4:14:10

十万个数、五十亿种剪法,这道题怎么数

这道题是一道动态规划的题&#xff0c;说实话&#xff0c;题目意思就很别扭&#xff0c;估计也是翻译得有点问题&#xff0c;今天这篇文章就来讲明白这道题。 先看它到底要数什么。 给你一个数组&#xff0c;可以从左边去掉一段&#xff0c;也可以从右边去掉一段&#xff0c;但…

作者头像 李华
网站建设 2026/9/27 4:09:53

机器学习PPT模板自动化:用python-pptx生成汇报图表页

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华