Shell 自动化部署脚本:git pull + pnpm build + cp

一个用于静态站点(如 Astro / Next.js)的最小化自动化部署脚本,适合 VPS 手动触发或配合 webhook 使用。 脚本 #!/bin/bash set -ecd /opt/black-no-dark git pull pnpm build cp -rf /opt/black-no-dark/dist/* /www/wwwroot/www.example.com/echo "更新成功!"各步骤说明 set -e:任何命令返回非零退出码时立即终止脚本,防止后续步骤在错误状态下继续执行。 git pull:拉取远程最新代码。若本地有未提交的修改会冲突报错,此时 set -e 会阻止继续构建。 pnpm build:构建静态产物到 dist/ 目录。构建失败(TS 错误、配置错误等)同样会终止。 cp -rf dist/* /web-root/:将新产物覆盖到 Web 服务器根目录。-r 递归,-f 强制覆盖。 使用方式 # 赋予执行权限(只需一次) chmod +x /opt/deploy.sh# 手动触发 /opt/deploy.sh# 或配合 webhook(如 github-webhook-handler)自动触发常见问题 git pull 报 "not a git repository":脚本中的 cd 路径写错,或目录没有 git init / git clone。 pnpm: command not found:部署环境没有安装 pnpm,或 PATH 不包含 pnpm 路径。解决: # 用绝对路径 /root/.local/share/pnpm/pnpm build# 或在脚本顶部加 export PATH="/root/.local/share/pnpm:$PATH"cp 覆盖时网站短暂不可用:对于零停机要求,可以先 cp 到临时目录,再 mv 替换: cp -rf dist/* /tmp/dist-new/ rsync -a --delete /tmp/dist-new/ /www/wwwroot/www.example.com/rsync 只同步差异文件,比整体 cp 更快,中断窗口更短。 扩展:加上日志和通知 #!/bin/bash set -eLOG=/var/log/deploy.log echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始部署" >> $LOGcd /opt/black-no-dark git pull >> $LOG 2>&1 pnpm build >> $LOG 2>&1 cp -rf dist/* /www/wwwroot/www.example.com/echo "[$(date '+%Y-%m-%d %H:%M:%S')] 部署成功" >> $LOG将 stdout / stderr 都重定向到日志文件,方便事后排查。

ChatGPT_Exporter:一键导出 ChatGPT 聊天记录

为什么需要导出 ChatGPT 聊天记录? 随着 AI 对话工具的普及,我们在 ChatGPT 中积累了大量有价值的对话。但 ChatGPT 官方并未提供批量导出功能,一旦账号出现问题或需要迁移,这些记录将面临丢失风险。 ChatGPT_Exporter 正是为了解决这一痛点而诞生的开源工具。 项目介绍 ChatGPT_Exporter 是一个基于 Tampermonkey(油猴)的浏览器脚本,可以一键导出 ChatGPT 的全部聊天记录,并自动打包为 ZIP 文件保存到本地。 GitHub 地址:https://github.com/zjt666666zjt/ChatGPT_Exporter 主要特性✅ 自动批量导出所有对话(包括归档记录) ✅ 支持多种格式:JSON、Markdown、HTML ✅ 自动生成美观的 HTML 页面(含代码高亮) ✅ 支持团队空间 (ChatGPT Team / Enterprise) ✅ 导出过程带有重试与断点机制,防止导出失败 ✅ 一键打包成 ZIP 文件下载详细安装步骤 第一步:安装 Tampermonkey 浏览器插件 Tampermonkey 是一个浏览器扩展,用于管理用户脚本。根据你使用的浏览器选择对应的安装链接:Chrome / Edge:https://tampermonkey.net/?ext=dhdg&browser=chrome Firefox:https://tampermonkey.net/?ext=dhdg&browser=firefox安装完成后,浏览器右上角会出现 Tampermonkey 图标。 第二步:选择并安装脚本版本 项目提供两个版本: 稳定版(推荐) 适合只需要稳定、可靠的「全量导出」功能的用户。 一键安装链接:https://raw.githubusercontent.com/zjt666666zjt/ChatGPT_Exporter/main/chatgpt-exporter.user.js 点击链接后,Tampermonkey 会自动弹出安装提示,点击「安装」即可。 Beta 版(功能增强) 适合想体验新功能的用户,新增特性包括:支持「最近 N 条」导出 支持项目(Project / Gizmos)文件单独导出 全新弹窗配置 UI 按钮内嵌进度条一键安装链接:https://raw.githubusercontent.com/zjt666666zjt/ChatGPT_Exporter/main/chatgpt-exporter-beta.user.js 第三步:使用脚本导出聊天记录登录 ChatGPT 或 chatgpt.com 等待页面加载完成后,右下角会出现绿色的「Export」按钮 点击按钮: 稳定版:直接开始导出流程 Beta 版:先弹出配置窗口,选择导出范围/格式/空间,然后点击「开始导出」等待脚本自动遍历所有会话,生成 ZIP 文件并自动下载到本地导出文件结构 导出后的 ZIP 文件包含以下结构: ChatGPT_backup_2025-11-05.zip ├── 对话A_xxx.json ├── 对话A_xxx.md ├── 对话A_xxx.html ├── 对话B_xxx.md ├── Project_工作项目1/ │ ├── 对话1_项目相关.md │ └── 对话2_调试记录.html └── Project_学习笔记/ ├── AI原理研究.md └── AI原理研究.html注意事项请确保已登录 ChatGPT,否则脚本无法获取会话数据 导出前建议先打开任意一个聊天页面,确保 Access Token 有效 若导出失败,可刷新页面后重试 所有数据均保存于本地,不会上传到任何服务器总结 ChatGPT_Exporter 是一个非常实用的开源工具,可以帮助我们轻松备份和迁移 ChatGPT 聊天记录。无论你是个人用户还是团队用户,都能找到适合自己的使用方式。强烈推荐给所有 ChatGPT 用户!

HTML格式化输出专用提示词

背景 最近看到有朋友分享的 HTML 输出效果不错,在 Cherry Studio 中测试了半天,终于调出了一版比较满意的提示词。目前只在 GPT-5.5 模型上测试过,其他模型的效果大家可以自行尝试。 提示词模板以下为 HTML 格式化输出专用提示词,适用于需要生成美观、报纸风格排版的场景。核心要求输出格式:必须使用完整 HTML 片段,所有样式使用行内 CSS,禁止使用外部 CSS、<style> 标签或链接页面风格:背景使用温暖的米色、象牙白或浅纸张色 主体内容居中,使用浅纸色卡片 带轻微边框和柔和阴影字体搭配:中文正文:系统无衬线字体(-apple-system、Segoe UI、Noto Sans SC、PingFang SC、Microsoft YaHei) 主标题和重要标题:Georgia、Times New Roman 或 Noto Serif SC,营造报纸感排版要求:根据输出内容灵活调整排版 尽量使用多种排版格式,模拟报纸效果 添加背景图形进行美化 使用图形填补排版空白,避免出现大面积空白 段与段之间空一行链接处理:所有引用链接在页面末尾集中展示,不要出现在正文中质量检查:最终输出前再检查一次,确保没有不符合要求的内容使用场景 这套提示词特别适合以下场景:生成精美的文章页面 制作信息图表风格的内容 创建报纸风格的文档 生成可直接渲染的 HTML 片段注意事项目前仅在 GPT-5.5 模型上测试,其他模型效果可能有差异 建议在 Cherry Studio 等工具中使用 可根据实际需求调整字体和颜色配置效果预览 由于原帖包含截图,建议直接访问原帖查看效果: https://linux.do/t/topic/2394675

使用清华大学开源软件镜像站下载JDK

为什么选择清华大学开源软件镜像站? 清华大学开源软件镜像站(TUNA)提供了一个快速、稳定且免费的软件源镜像服务,支持众多流行的开源项目,包括 Adoptium 提供的 JDK。使用 TUNA 镜像站可以显著提高下载速度,特别是在中国大陆地区。 下载步骤 步骤 1:访问 TUNA Adoptium 镜像站 首先,打开浏览器并访问以下链接: https://mirrors.tuna.tsinghua.edu.cn/Adoptium/ 步骤 2:选择 JDK 版本 在页面上,可以看到不同版本的 JDK 目录。根据需要选择相应的版本,例如 JDK 8、JDK 11 或 JDK 17。 步骤 3:选择操作系统和架构 进入 JDK 版本目录后,选择适合的操作系统和架构目录。例如,对于 64 位 Windows 系统,可以进入: 8/jdk/x64/windows/步骤 4:选择安装包格式 在操作系统目录下,可以选择不同的安装包格式。对于 Windows 系统,通常有以下选择:MSI 安装包:Windows 的标准安装格式 ZIP 压缩包:免安装版本,解压后可直接使用步骤 5:下载 JDK 选择好需要的安装包格式后,点击下载链接即可开始下载。例如,JDK 8 的 Windows 64 位版本: OpenJDK8U-jdk_x64_windows_hotspot_8u422b05.msi或 ZIP 格式: OpenJDK8U-jdk_x64_windows_hotspot_8u422b05.zip不同操作系统的选择方式Windows:选择 windows/ 目录,然后根据需要选择 MSI 或 ZIP 格式 Linux:选择 linux/ 目录,通常提供 .tar.gz 格式的压缩包 macOS:选择 mac/ 目录,提供 DMG 格式的安装包注意事项在下载和安装 JDK 之前,确保系统满足 JDK 的最低系统要求 安装 JDK 后,可能需要配置环境变量,以便在命令行中使用 java 命令 如果遇到下载速度慢或无法下载的问题,可以尝试更换网络环境或稍后重试总结 通过以上步骤,您可以轻松从清华大学开源软件镜像站下载并安装适合的 JDK 版本。如果有任何问题,可以访问镜像站的帮助文档或社区论坛寻求帮助。希望这篇文章能帮助您快速获取所需的 JDK 版本。

EasyTier 能 ping 通但 HTTP 不通:排查思路和解决方法

EasyTier 组网后能 ping 通对方,但 HTTP 访问失败——这是隧道已建立、应用层流量被拦截的典型现象。 快速定位(3 条命令) ① 客户端测试 TCP 连通性 curl -v http://对方EasyTierIP:端口Connection refused:网络通,服务没监听 Connection timed out:防火墙或路由拦截 返回 HTTP 内容:服务正常,排查客户端代理② 服务端抓包 sudo tcpdump -i tun0 tcp port 80同时客户端访问一次:抓包结果 结论看到 SYN 流量到了服务器,查服务监听或防火墙看不到 SYN 路由或 EasyTier 转发问题SYN 无 SYN-ACK 防火墙或服务未监听③ 查看监听端口 ss -lntp | grep -E ':80|:443|:8080'原因一:服务只监听 127.0.0.1(最常见) ss -lntp 看到 127.0.0.1:80,EasyTier 的 tun0 流量就无法到达服务。 修改方法: # uvicorn uvicorn main:app --host 0.0.0.0 --port 8000# nginx listen 0.0.0.0:80;# Node.js app.listen(80, '0.0.0.0')原因二:防火墙拦截 tun0 ping 用 ICMP,HTTP 用 TCP,如果防火墙只放行了 ICMP 或者对 EasyTier 网卡有限制: # 查看规则 sudo iptables -L -n sudo ufw status# 临时放行 tun0(测试用) sudo iptables -I INPUT -i tun0 -j ACCEPT sudo iptables -I FORWARD -i tun0 -j ACCEPT永久规则(以 ufw 为例): sudo ufw allow in on tun0原因三:Docker 端口绑定到 localhost docker ps如果看到 127.0.0.1:80->80/tcp,改成: docker run -p 80:80 ...原因四:服务绑定到特定网卡 IP 服务器有多个网卡(公网 IP + EasyTier IP),应用可能只绑到了公网 IP: ss -lntp | grep 8080如果看到 103.x.x.x:8080,需要改为 0.0.0.0:8080。 原因五:代理劫持 HTTP 流量 系统装了 Clash、sing-box 等,可能把内网 IP 的 HTTP 也走了代理: curl --noproxy '*' http://10.x.x.x如果这样能通,就是代理规则问题,把 EasyTier 网段加入 bypass 列表。 原因六:MTU 问题 现象:ping 小包正常,HTTP 建连后卡住或大文件下载失败。 ping -M do -s 1472 目标IP失败则把 EasyTier 网卡 MTU 调小: sudo ip link set tun0 mtu 1280EasyTier 配置自定义 IP 段 默认 dhcp = true 由网络中的 DHCP 节点分配 IP。如果要固定 IP: dhcp = false ipv4 = "10.88.0.2/24"如果加入的是他人的 EasyTier 网络,单方面改客户端配置通常不生效,需要整个网络统一规划地址段。 诊断工具速查 # 确认 EasyTier 接口和 IP ip addr show tun0# 确认路由(流量是否走 tun0) ip route | grep tun0# TCP 连通性测试 nc -vz 目标IP 80# 本机自测(服务端执行) curl -v http://127.0.0.1:80 curl -v http://tun0_IP:80