WWW.YOUINFO.SITE
标签聚合 手把手

/tag/手把手

LinuxDo 最新话题 · 2026-06-06 11:41:51+08:00 · tech

先来叠甲(AI): 想必都知道什么是土狗币,那我们今天来自己发一个 圈钱 学习。 众嗦粥知BSC上的土狗币最多,那我们选哪条链呢? 当然是 剧透 省钱,BNB也不便宜,手续费还贵,不符合 圈钱 学习的需求啊。 部署合约就用ChainIDE,Remin对于我们 圈钱 学习还是太麻烦了。 打开ChainIDE ChainIDE-Smart Editor GitHub登录你会看到类似的东西: 点击 新建项目 选择Conflux, 选择CRC20(其它链大同小异,大多情况是ERC20) 之后你会来到类似VSCode的编辑器,像这样: 选择这个文件,接着连接你的Web3钱包: 找到第14-18行,类似: string public constant name = 'CRC TEST'; //这里是你的代币全名 string public constant symbol = 'CTC'; //代币符号,比如泰达币就是USDT //Default assumes totalSupply can't be over max (2^256 - 1). //you need multiply 10^decimals by your real total supply. uint256 public totalSupply = 10**9 * 10**uint256(decimals); //最大供应量,可以让AI帮你替换这一行 我这边写的: string public constant name = 'TUGOU COIN'; string public constant symbol = 'TGC'; //代币符号,比如泰达币就是USDT //Default assumes totalSupply can't be over max (2^256 - 1). //you need multiply 10^decimals by your real total supply. uint256 public totalSupply = 10**48 * 10**uint256(decimals); //最大供应量 改好了: 那就付Gas之后部署吧: 输密码: 之后确认部署: 日志会输出类似: [info] [11:31:12] 创建合约CRC20Token的交易哈希: 0x625720b0c728749fd378ebc033914c961a2cf29eda0104fad9fa2cb736cbc34e [info] [11:31:12] https://evm.confluxscan.net/tx/0x625720b0c728749fd378ebc033914c961a2cf29eda0104fad9fa2cb736cbc34e [info] [11:31:12] 等待区块确认... [info] [11:31:38] 创建合约CRC20Token的交易已确认, 点击哈希查看交易: 0x625720b0c728749fd378ebc033914c961a2cf29eda0104fad9fa2cb736cbc34e [info] [11:31:38] 上传文件 [.build/CRC20Token.CRC20Token.5eb5b01d32bf2bba.eth.deployed]... [info] [11:31:40] 上传文件 [.build/CRC20Token.CRC20Token.5eb5b01d32bf2bba.eth.deployed] 成功! 之后去看看区块浏览器吧: ConfluxScan 我们的土狗币部署好了,Created的就是合约地址,接着我们导入钱包。 先看合约地址: 0x5eb5B01d32Bf2bBaf207F0a3a3cF8eF26bfAf8fC 打开钱包——币种管理(不是所有钱包都一样,不截图了)——自定义币种 配置类似: 随后: 确认即可。 0已经数不过来了: 太好了,成功水了一篇文章,下一章我们讲讲验证合约、质押获得流动性使得它成为真正的“土狗币”。 警告: 还有,如果佬没CFX的话可以找我送你0.05个(保留不给权利,随便送几个佬,CFX老便宜了,主要是送给不方便买的佬) 3 个帖子 - 2 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-06-01 20:45:20+08:00 · tech

手把手教你搭建中转站 VPS+CLI Proxy API(CPA)+NEW API+Docker+Nginx+Cloudflare+SSL+域名配置 保姆级教程 - 开发调优 - LINUX DO 是我入站详细学习的第一篇文章。 我已经购买了gpt plus帐号,但是有时额度不够用,就非常痛苦。我只是学生,一个月数百我尚且能承受,上千的pro实在无力承担。 很多公益站我也尝试了,经常不稳定。我只要少量帐号,来做一个溢出需求负载均衡,其实就足够了。 个人没有选择plus,是觉得白嫖plus会比较好识别,由此导出的问题是,日抛的成本,同样超出了我的承担的范围。 因此,后续我根据这篇文章进行了free池的搭建,用来自用。但是三天后颗粒无存。 这启发我思考一个问题,个人自建,有没有可能通过低成本的方式,绕过风控? 绕过风控,我认为技术上可能暂时超脱了我的能力范畴,但是原理上绝不复杂。 一言以蔽之,就是伪装为合理,正常的用户请求即可。 而从最根本上来说,形成正常的用户请求,本来也不应该是一件难事。 目测oai可能应该有多重风控机制,综合打分。 一是帐号信息,例如ip,email,订阅类型等。 一种是oauth的用户画像,例如高并发。 一种是对话级别,或者thread理解,例如轮询模式下切换多个oauth(可能,见 CPA触发401的观察分析 - 开发调优 - LINUX DO ) 同时,也有对应的对策 codex风控升级!CPA作者连更3版 - 开发调优 - LINUX DO 但是,以我有限的知识来看,这种对策,仍然未必能完全规避风控。 以我有限的知识来看,一个理论上,可能,比较理想的状态是,低风险email,低风险ip,且注册,使用对应,和其它帐号不串流;且仍然尽量使用填充策略,或者实在不行,重新将缓存填充为token,才能伪装为尽量比较合理的用户画像。 从统计学角度来说,如果已经可以伪装为普通的用户的请求,那么封禁就会变得没有意义。而离普通的请求越远,封禁就越简单。 不过,实践中,我这样子的小白的策略,像传统注册机,加上高风险ip,高风险email,以及单个ip出口,轮询高并发等策略,让异常请求非常容易被识别,是很显著的离群值。 但是,对于我个人来讲,在目前的传统流程上再去建立更完善的风控方法,已经远远超出了我的个人能力,以及个人可以承担的成本。 归根到底,我们可以用低成本的token,还是openai留了两个口子。一个是,free和plus的“免费”拉新,以及订阅鼓励长期付费的两个商业策略。如果我们自己在前端,就把负载均衡给做了,openai势必最终完全倒向token按量付费,当然,实际不太可能。 而目前现有的商业中转站的0.几x,已经是比较逼近订阅制的额度换算比例了。 但是,就利用其免费额度,做一点薅羊毛的事情,我觉得openai应该不太介意。 因此,我想抛砖引玉,想问问各位佬们,有没有可能,做一个分布式的,以避免风控为目标的free池,主要是限制并发,让大家有基本的token可以用,其余的高额度的我不多想,只是觉得应该没法免费提供。 这样子做有多个好处。 第一,当然是避免风控。 第二,避免风控的同时,也大大降低了风控成本。很多号被迫成为日抛号,ip和email被滥用,但是事实上本可以避免这些事情,让这些基础设施,可以长期维护。 第三,集群级别的负载均衡,是个人自建号池的负载均衡的效率,不可能达到的。可以大大降低浪费,从而使得free号池,可能可以长久持续。 也许这可以避免,个人的free号池被封杀殆尽的最终结果。 大佬可能已经做了不少相关的事情,我希望我这样子的小白也可以贡献一点,虽然暂时没想到自己可以贡献什么。毕竟,在现在的风控下,个人挑战风控,很可能只是炮灰。 最后,谢谢linux do这个平台乌托邦式的社区氛围,谢谢各位佬们各抒己见。 7 个帖子 - 4 位参与者 阅读完整话题

v2ex · 2026-05-25 13:07:10+08:00 · tech

各位 V 友,最近 MCP ( Model Context Protocol )这个协议在海外开发者圈子里极火。不管是 Claude Code 还是 Antigravity 2.0 都把它当成了默认的第三方工具扩展规范。 我用 Python (fastmcp SDK) 撸了个监听本地电脑 CPU/RAM 的小工具并成功作为自定义 Tool 让大模型调用。 记录了保姆级的配置流程,希望能给在折腾 AI Agent 工具链的 V 友提供点参考: https://aidevhub.net/blog/google-antigravity-mcp-custom-tools

LinuxDo 最新话题 · 2026-05-21 11:37:26+08:00 · tech

前言 本文只做技术分享,禁止转载 本文分为两个章节进行讲解,这两个没有直接关系也没啥间接关系,但重复内容我就没有再复制粘贴了,需要的地方也有跳转提示,佬友根据自己情况进行查看 一、搭建自用节点(简单) 二、搭建机场(较复杂) 由于VPS选择+Cloudflare+域名配置跟我之前的文章有交叉,为了对小白友好,所以我就直接复制粘贴了,有了解的佬友可以自行选择需要的章节进行学习,右边有目录 本教程需要的技术(版本仅作为参考): 一、搭建自用节点(简单): VPS(云服务器)(地区选择:硅谷,必须海外) :2c2g(2个CPU核数2G的内存,1c1g即可) v2ray-agent (八合一脚本) :v3.5.18(latest) 二、搭建机场(较复杂) VPS(云服务器)(地区选择:硅谷,必须海外) :2c2g(2个CPU核数2G的内存,必须2g内存) Xboard (机场开源面板) :master 分支最新开发版(2026-05-03 构建)(没有具体版本号)(latest)(既然做机场了,就不用SQLite,直接上mysql+redis,所以这里至少需要2g内存) V2bX :v0.4.0(latest) Caddy :v2.11.3(latest) mysql :5.7 redis :8.6.3(latest) docker :26.1.4 docker-compose :2.27.1 本教程需要的工具: FinalShell :SSH远程连接工具 v2rayN :代理工具 clash-verge-rev :代理工具 零、VPS选择+域名配置(cf代理) 我买了腾讯云的服务器用来做教学,全程可用国内网访问 有vps的佬可以跳过这一步了 VPS选择 1、活动页 腾讯云最新活动 这个为新人优惠,2c2g一年99米 这是两个图片拼接起来的,颜色不同的大框表示不同的图片,这两个图片的截取在同一个页面,下滑即可 2、购买完毕后进入控制台 这也是两张图片拼接起来的,颜色不同的大框表示不同的图片,上面黄框是腾讯云的主页的头部标签,下面红框是点击控制台后进入控制台的页面 3、查看服务器ip 也是由黄框和红框分别不同的图片 由于腾讯云默认安全组打开了22端口(SSH服务),这里就不进安全组了,后文有讲到如何配置安全组,这里不过多赘述 4、使用FinalShell连接到服务器 填写名称、主机ip、用户名和密码即可连接到我们的服务器 FinalShell的好处就是修改文件或者上传下载文件时是可视化的,不用一遍一遍敲命令行 域名配置(cf代理) 这里我使用的是 cloudflare 做的代理,所以我按cloudflare讲解,其他的云服务商配置也是大同小异 我买的顶级域名为(严格来说这是二级域名,我习惯说这是顶级域名):wudike.online 下文有两个地方需要使用到域名 ,一个是我们搭建机场(xboard服务)还有一个是配置自用节点(可不使用域名,且不使用域名更高效、安全) 1、使用 Cloudflare 的 DNS 代理我们的域名 这里的域名是我之前买的,在阿里云上的,所以我用阿里云作为演示,各个云服务商的操作都是大同小异的 (1、进入域名与网站 (2、选择域名进行购买 查询之后下滑点击购买就可以了 域名这里买了之后要实名去备份,审核要几个工作日吧,有点忘记了 (3、登录Cloudflare,并交给Cloudflare托管 ps:Cloudflare右上角人物头像那可以切换语言 ①、添加域名 下面那个我已经注册了,上面已经有服务了,注销在注册太麻烦 ②、跟着我的步骤点点就行了 上面四个步骤结束后我们得到了下面这个页面,需要去我们的云服务商重新配置一下DNS解析 ③、我们去阿里云配置一下域名的解析 进入我们的工作台,点击域名就可以看到我们购买的域名了 进去之后我们就可以修改DNS代理了 注: 国际域名最少填写2个,最多填写13个,国内域名最多填写6个。 所以我们两个都要复制哦,把之前的替换掉 ④、回到Cloudflare 下拉后,点击我已更新名称服务器 我们等十分钟后刷新一下 如果出现这样就代表成功了,由于我已经配置了一个域名,不想再去买一个配置了,下面这张图用的小黄大佬的图 一、搭建自用节点(简单) 1、安装v2ray-agent脚本 wget -P /root -N --no-check-certificate "https://raw.githubusercontent.com/mack-a/v2ray-agent/master/install.sh" && chmod 700 /root/install.sh && /root/install.sh 运行完上面代码我们就得到了下面的脚本执行命令 2、根据面板选择 2.1、Xray-core + VLESS + Reality + uTLS + Vision(简单、抗探测能力强、抗封锁能力强、传输速度快、资源占用率低、无域名、不可cdn代理,推荐) 不要以为无域名无代理就不安全了,恰恰相反这是最快最安全的(之一),唯一的缺点是无法套CDN,自用够够的了 从上至下执行命令 vasma # 执行脚本 2 # 任意组合安装 1 # Xray-core 7 # VLESS+Reality+uTLS+Vision[推荐] # 后面回车即可,注意端口这里要开防火墙和安全组,所以手动填好一点 执行后就得到了下面三个字符串,最重要的是通用格式,复制通用格式的字符串 复制进我们的 v2rayN 代理工具中测试一下可使用了, 文章后面我会讲如何导入clash 回车后选择自动配置系统代理即可使用 2.2、Xray-core + VLESS + TLS + WS(复杂、抗探测能力弱、抗封锁能力弱、传输速度一般、资源占用率低、有域名、可cdn代理,不推荐) 在v2ray-agent脚本中配置域名会有 nginx 占用443端口 ,所以有服务使用了443端口,强烈不建议用这个 首先在cloudflare中配置域名时代理状态先关掉(变成灰色的云),脚本检测域名是否指向了本机 关掉代理 创建API令牌 这里是因为脚本需要通过我们的 api token 去获取SSL证书,所以我们需要先申请API token 搜索 API 令牌,点击创建令牌 使用编辑区域DNS模板,选择域名后一路确认到最后一步复制 API ,注意这里关闭后就无法找到了,记得保存 执行脚本 从上至下执行命令,我现在配置的域名为cdn.wudike.online vasma # 执行脚本 2 # 任意组合安装 1 # Xray-core 1 # VLESS+TLS+WS[仅CDN推荐] 域名:cdn.wudike.online # 你自己的域名 端口:2053 # 因为cf的https有固定的几个端口不可乱填,可以填的端口:443、2053、2083、2087、2096、8443 是否使用DNS API申请证书[支持NAT]?[y/n]:y # 后面要用到我们上面 api token 请选择[回车]使用默认:1 # cloudflare[默认] 请输入API Token:**** # 星号就是我们复制的 api token 请选择[回车]使用默认:1 # letsencrypt[默认] # 后面的操作无脑回车即可,也可以自己填,无所谓的 我们就得到了 vless 链接,注意要用ws的,使用方式如 2.1 所示 配置 cf 代理并测试 我们再去 cf 开启域名的代理,等10分钟后我们去测试 测试一下是否符合我们的预期,符合预期 PS:配置Clash 这里相当于就是把vless链接转为clash的yaml文件,为了佬友方便,我 vibe coding 了一个项目 源码放在这里了: clash-converter 也可以使用我部署的网站: Proxy ↔ Clash 双向转换器 二、搭建机场(较复杂) 1、创建文件 这里我们要创建单个文件,第一个是xboard的配置文件 .env 、一个是 docker-compose.yml 启动文件、一个是 Caddyfile (caddy的配置文件,之前的文章讲了nginx,这里就换个代理工具讲解) mkdir -p /opt/xboard && touch /opt/xboard/{.env,Caddyfile,docker-compose.yml} .env 包含 的参数是需要修改的,包含 的是可修改的,其他的可以照抄 APP_NAME=XBoard APP_ENV=production APP_KEY=base64:iH2lk8cdnIj0sLgeNzEzAa2GEhPCROrxsa5etAk35sI= APP_DEBUG=false APP_URL=http://localhost LOG_CHANNEL=stack DB_CONNECTION=mysql # ❓选择mysql服务,看样子也可以使用postgresql,这个就交给各位实践了 DB_HOST=mysql # ⚠️mysql的服务名(docker-compose文件中的服务名) DB_PORT=3306 # 用默认的就行了 DB_DATABASE=xboard # ❓数据库名 DB_USERNAME=root # 数据库用户名,用root就行了,其实该mysql也不对外,新不新增用户都行 DB_PASSWORD=123456 # ⚠️密码,就算不对外,这个还是设计的越安全越好的 REDIS_HOST=redis # ⚠️redis的服务名(docker-compose文件中的服务名) REDIS_PASSWORD= # redis不要设置密码,也可以设置,主要是麻烦 REDIS_PORT=6379 # 用默认的就行了 BROADCAST_DRIVER=log CACHE_DRIVER=redis QUEUE_CONNECTION=redis MAIL_DRIVER= MAIL_HOST= MAIL_PORT= MAIL_USERNAME= MAIL_PASSWORD= MAIL_ENCRYPTION= MAIL_FROM_ADDRESS= MAIL_FROM_NAME= MAILGUN_DOMAIN= MAILGUN_SECRET= # google cloud storage ENABLE_AUTO_BACKUP_AND_UPDATE=false GOOGLE_CLOUD_KEY_FILE=config/googleCloudStorageKey.json GOOGLE_CLOUD_STORAGE_BUCKET= # Prevent reinstallation # 这里是初始化需要的参数,没有值的时候就说明是初始化,可以使用初始化脚本,初始化脚本执行完成后会修改这个值,所以不需要手动再次修改该文件 INSTALLED= docker-compose.yml 包含 的参数是需要修改的,包含 的是可修改的,其他的可以照抄 services: # ---------- Xboard 主应用 ---------- xboard: # 服务名 image: ghcr.io/cedar2025/xboard:latest # 镜像名 restart: unless-stopped # 重启策略 container_name: xboard # 容器名 # 移除 ports 映射,因为现在通过 Caddy 代理 # ports: # - "9888:7001" expose: - "7001" # ⚠️只在内部网络暴露 希望保留给宿主机的话用上面的ports depends_on: # mysql和redis检测到健康后再启动 mysql: condition: service_healthy redis: condition: service_healthy volumes: # 卷挂载 - ./.env:/www/.env # 挂载 .env 文件 - ./.docker/.data/:/www/.docker/.data - ./storage/logs:/www/storage/logs - ./storage/theme:/www/storage/theme - ./plugins:/www/plugins environment: # 环境参数 - RESOURCE_PROFILE=balanced # minimal | balanced | performance | auto - ENABLE_HORIZON=true - docker=true networks: # docker网络 - xboard-net # ---------- MySQL 数据库 ---------- mysql: image: mysql:5.7 restart: unless-stopped container_name: xboard-mysql environment: MYSQL_ROOT_PASSWORD: 123456 # ⚠️密码改后记得后面操作还需要输入 MYSQL_DATABASE: xboard # ❓建议不改 volumes: - mysql-data:/var/lib/mysql networks: - xboard-net healthcheck: # 心跳检测机制 test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p123456"] timeout: 20s retries: 10 # ---------- Redis 缓存 ---------- redis: image: redis:latest restart: unless-stopped container_name: xboard-redis command: redis-server --appendonly yes # 启用 AOF volumes: - redis-data:/data networks: - xboard-net healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 # ---------- Caddy 反向代理 ---------- caddy: image: caddy:latest restart: unless-stopped container_name: xboard-caddy ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro # ❓就是下面的Caddyfile文件建议不改 - caddy-data:/data # 存储证书 networks: - xboard-net depends_on: - xboard networks: xboard-net: driver: bridge # 桥接模式 volumes: mysql-data: # MySQL 数据持久化 redis-data: # Redis 数据持久化(原有) caddy-data: # 存储证书 Caddyfile 这里域名需要再cf中进行配置,具体参考本文目录中, 一、搭建自用节点(简单) 中的 2.2、Xray-core + VLESS + TLS + WS(复杂、抗探测能力弱、抗封锁能力弱、传输速度一般、资源占用率低、有域名、可cdn代理,不推荐) ,看一下就会配置域名了 包含 的参数是需要修改的,包含 的是可修改的,其他的可以照抄 # 替换成你的实际域名 vpn.wudike.online { # ⚠️改成自己的域名 # 反向代理到 Xboard 容器 reverse_proxy xboard:7001 # ⚠️这里也是自己的服务名和端口 } 2、初始化 先让mysql和redis服务跑起来再初始化 docker compose up -d mysql redis # 等个10s后执行下面脚本 docker compose run -it --rm -e ENABLE_REDIS= xboard php artisan xboard:install 下面是执行后的结果,供参考 包含 的参数是需要修改的,包含 的是可修改的, xxx 是脱敏需要你们自己填,其他的可以照抄 [root@VM-0-16-centos xboard]# docker compose up -d mysql redis [+] Running 6/6 ✔ Network xboard_xboard-net Created 0.1s ✔ Volume "xboard_redis-data" Created 0.0s ✔ Volume "xboard_caddy-data" Created 0.0s ✔ Volume "xboard_mysql-data" Created 0.0s ✔ Container xboard-redis Started 0.5s ✔ Container xboard-mysql Started 0.5s [root@VM-0-16-centos xboard]# docker compose run -it --rm -e ENABLE_REDIS= xboard php artisan xboard:install [+] Creating 2/0 ✔ Container xboard-mysql Running 0.0s ✔ Container xboard-redis Running 0.0s [entrypoint] Auto-tune (profile=balanced): cpus=2 mem=1024MiB slots=9 -> octane=2 horizon(dp/biz/notif)=2/1/1 horizon_worker_mem=256MB [entrypoint] Horizon supervisors use balance=auto with minProcesses=1, so they scale up to the cap on demand and back down when idle. [entrypoint] Skipping xboard:update (not yet installed or running xboard:install). [entrypoint] Starting services (caddy=true web=true horizon=true ws=true)... __ __ ____ _ \ \ / /| __ ) ___ __ _ _ __ __| | \ \/ / | __ \ / _ \ / _` | '__/ _` | / /\ \ | |_) | (_) | (_| | | | (_| | /_/ \_\|____/ \___/ \__,_|_| \__,_| ┌ 请选择数据库类型 ────────────────────────────────────────────┐ │ MySQL │ └──────────────────────────────────────────────────────────────┘ ┌ 请输入MySQL数据库地址 ───────────────────────────────────────┐ │ mysql # ⚠️这里是docker中mysql的服务名 │ └──────────────────────────────────────────────────────────────┘ ┌ 请输入MySQL数据库端口 ───────────────────────────────────────┐ │ 3306 │ └──────────────────────────────────────────────────────────────┘ ┌ 请输入MySQL数据库名 ─────────────────────────────────────────┐ │ xboard │ └──────────────────────────────────────────────────────────────┘ ┌ 请输入MySQL数据库用户名 ─────────────────────────────────────┐ │ root │ └──────────────────────────────────────────────────────────────┘ ┌ 请输入MySQL数据库密码 ───────────────────────────────────────┐ │ 123456 │ └──────────────────────────────────────────────────────────────┘ ┌ 是否启用Docker内置的Redis ───────────────────────────────────┐ │ 不启用 │ └──────────────────────────────────────────────────────────────┘ ┌ 请输入Redis地址 ─────────────────────────────────────────────┐ │ redis │ └──────────────────────────────────────────────────────────────┘ ┌ 请输入Redis端口 ─────────────────────────────────────────────┐ │ 6379 │ └──────────────────────────────────────────────────────────────┘ ┌ 请输入redis密码(默认: null) ─────────────────────────────────┐ │ # ❓redis本来就没有设置密码,这里回车就行了 │ └──────────────────────────────────────────────────────────────┘ ┌ 请输入管理员账号 ────────────────────────────────────────────┐ │ xxxxxxxxxxxxxx # ⚠️管理员登录的账号 │ └──────────────────────────────────────────────────────────────┘ INFO Configuration cached successfully. 正在导入数据库请稍等... 🚀 开始执行流量重置任务... 🔧 修正模式 - 将重新计算next_reset_at为null的用户 ✅ 没有发现next_reset_at为null的用户 ✅ 任务完成! 📊 修正结果统计: 🔍 发现用户总数: 0 ✅ 成功修正数量: 0 ⏱️ 总执行时间: 0 秒 ✨ 无错误发生 数据库导入完成 开始注册管理员账号 正在安装默认插件... 默认插件安装完成 🎉:一切就绪 管理员邮箱:xxxxxxxxxxxxxx # ⚠️之前输入的账号,这里改不了,加感叹号号是提示这里比较重要 管理员密码:xxx # ⚠️初始密码,后面可以改 访问 http(s)://你的站点/xxx 进入管理面板,你可以在用户中心修改你的密码。 # ⚠️/xxx 要带这个path才能访问管理员的面板 3、启动Xboard cd /opt/xboard && docker compose up -d 访问我们的域名就可以看见项目已经启动部署成功了 4、配置我们的xboard(后台管理系统,跟path有关系,仔细看第二步的最后) 通过我们的域名+path登录到后台管理系统( https://域名/path ) 这里不会什么功能都讲,主要是把主流程给跑通 (1、修改名字 (2、添加节点(很重要) 在节点管理中添加节点 我们选择vless去配置就可以了,这里我把主要的以文字形式写出来,也可以直接看我的图片讲讲 协议:vless 节点名称:随意 自定义节点ID:很重要后面创建节点会用到 权限组:这个跟后面的套餐有关系,套餐又跟用户有关系,所以很重要,没有就添加一个 节点地址:ip地址 连接端口、服务端口:记得开服务端口的防火墙和安全组 安全性:Reality 伪装节点:找个大网站就行了 私钥、公钥:生成一下就行了 Short ID:生成一下就行了 uTLS:开启 传输协议:TCP 流控:xtls-rprx-vision 可以照着我的写 添加完之后记得打开显示开关 (3、套餐管理(其实还有一部权限组管理,但我们在节点里面也添加了一个权限,所以可以直接略过了) 有四个参数要填写,其他随意 名称:随意,不要和权限组管理名称重复,不好管理 服务器分组:就是我们之前填的权限组管理 流量、价格:记得设置,不然后续购买有问题 打开显示、新购、续费开关 (4、新增用户(为了后面方便测试) (5、创建ApiKey(很重要) 在系统配置的节点配置中生成一个通讯秘钥 5、使用V2bX创建脚本 (1、环境准备 # 修复 V2bX 必需文件(必须执行) mkdir -p /etc/V2bX && echo "{}" > /etc/V2bX/sing_origin.json (2、安装 V2bX wget -N https://raw.githubusercontent.com/wyx2685/V2bX-script/master/install.sh && bash install.sh # 执行到这里的时候选择n 检测到你为第一次安装V2bX,是否自动直接生成配置文件?(y/n): n (3、修改 /etc/V2bX/config.json 文件 这里面有几个参数可以修改 ApiHost:你自己的域名 ApiKey:之前在系统管理里面生成的通讯秘钥 NodeID:之前在节点中自定义的节点ID NodeType:我们之前创建节点的时候选择的Vless协议 { "Log": { "Level": "info" }, "Cores": [ { "Type": "sing", "Log": { "Level": "info" }, "OriginalPath": "/etc/V2bX/sing_origin.json" } ], "Nodes": [ { "Core": "sing", "ApiHost": "https://这里改成你的域名", "ApiKey": "这里是之前在系统管理里面生成的通讯秘钥", "NodeID": 1001, "NodeType": "Vless", "Timeout": 30, "ListenIP": "0.0.0.0", "SendIP": "0.0.0.0", "SniffEnabled": true } ] } (4、启动服务 # 重启服务 systemctl restart V2bX # 查看运行日志 如果在日志中看见 Nodes started 说明节点启动成功 journalctl -u V2bX.service -f (5、查看Xboard中节点情况 可以看见这里变黄了,就是说待使用了,下一步我们就是让他变绿,接下来就是测试步骤了 6、测试 登录我们前台的系统(就是去掉path,管用域名登录( https://域名 )) 这个页面使用过机场的佬友就很熟悉了 我用的就是之前创建的测试用户登录,给了一个100g的套餐所以直接就有一个100g的套餐 我们点一下一键订阅,并复制订阅地址到clash去试一下 去clash测试一下没有问题 去后台面板看看节点情况( https://域名/path ),变绿了,没有问题,完结撒花 ps:也可以去购买订阅中看一下,我在套餐那新增了两个套餐和提示词模板,这样就有模有样了 参考文章 V2bX 单节点(VLESS / Reality)部署指南 xboard | Limin Studio 6 个帖子 - 6 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-05-10 11:15:58+08:00 · tech

2026年5月9日凌晨1点,在X和L站都看到了ChatGPT Team/Business 买一送一持续48个月! 当时不以为然, 5月10日早上根本睡不着了,早上8点决定开搞。 首先参考了L站内很多大佬的推文: [5/10 澳和英优惠来了] ChatGPT Team/Business 买一送一持续48个月! - 福利羊毛 / 福利羊毛, Lv1 - LINUX DO 【已跟第一个回复的搭上了】48个月优惠,刚刚付款成功,2个空间,求一个搭子 - 搞七捻三 - LINUX DO 感觉有点难度啊:我主要的问题就是不会长连接付款和虚拟U卡支付, 不过,冷静了一下还是决定趟这趟混水! 思考再三后,决定走英国区, 英国优惠链接(最便宜 15.3 刀): https://chatgpt.com/?promoCode=codestonegb 最后我付款的钱大概是15.64刀,包含跨境费, 以下图片都是苹果手机拍的,不是很清晰,哈哈哈哈哈哈! 打开链接前,需要打开英国梯子和登录一个全新的GPT账号(主要怕封号,哈哈哈哈),其实也可以登录自己账户! 打开英国优惠链接后,就会出现下面的界面,直接点击升级, 然后就是ChatGPT Team/Business 买一送一持续48个月的11英镑的付款界面,但是这里是短链接,就算你填了付款卡信息后,也付不了款 于是我开始在L站找长连接付款,经过漫长的搜索和验证,最好的方式就是这个: 短链接支付不了的,可以试试下面从别的佬那里搞来的长链接,加工了好多次,缝缝补补的能用了 使用方法( 注意修改promoCode和货币国家 ): F12-> 控制台-> CTRL-V-> 允许粘贴->粘贴后回车食用 (async function generateAUTeamLink() { console.log("⏳ 正在获取B Session Token..."); // 自动获取登录凭证 let accessToken; try { const s = await fetch("/api/auth/session").then(r => r.json()); accessToken = s?.accessToken; if (!accessToken) throw new Error("accessToken 为空"); } catch (e) { console.error("❌ 获取 Token 失败:", e.message); return; } console.log("✅ Token 获取成功"); const COUPON = "codestonegb"; // ---- 以下为你提供的 Payload(仅修改 workspace_name 动态生成)---- const payload = { plan_name: "chatgptteamplan", team_plan_data: { workspace_name: "workspace", // 可自行修改 price_interval: "month", // month 或 year seat_quantity: 2, // 席位数量,Team 最少 2?1的话是另外种玩法,需要号 }, billing_details: { country: "GB", currency: "GBP" }, cancel_url: "https://chatgpt.com/?promoCode=codestonegb", promo_code: COUPON, // 注意这里用的是 promo_code 字段 checkout_ui_mode: "hosted" }; console.log("⏳ 正在请求 Stripe 长链接 (US)..."); try { const resp = await fetch( "https://chatgpt.com/backend-api/payments/checkout", { method: "POST", headers: { Authorization: `Bearer ${accessToken}`, "Content-Type": "application/json" }, body: JSON.stringify(payload) } ); const data = await resp.json(); if (!resp.ok) { console.error(`❌ 请求失败 HTTP ${resp.status}`); console.log("📋 响应详情:", data); return; } const hostedUrl = data?.url || data?.stripe_hosted_url || data?.checkout_url; if (!hostedUrl) { console.warn("⚠️ 未找到长链接,原始响应:", data); return; } console.log("─".repeat(60)); console.log("✅ ChatGPT Team 链接生成成功!(美国)"); console.log("📋 Checkout Session ID :", data.checkout_session_id); console.log("📌 计划 : ChatGPT Team (US/USD)"); console.log("💺 席位 :", payload.team_plan_data.seat_quantity); console.log("🎟️ 优惠码 :", COUPON); console.log("🔗 Stripe 长链接:"); console.log(hostedUrl); console.log("─".repeat(60)); } catch (e) { console.error("❌ 网络异常:", e.message); } })(); 我啥也不改,直接在这个位置操作, 插一句,我还总结一个佬友的帖子,你们看看可不可以参考一下: 发现很多佬不会GPT长连接,发个通用的方法适用于各种优惠,Team等各种GPT支付长链接 - 搞七捻三 / 搞七捻三, Lv1 - LINUX DO 就会出现一个付款长链接, 点击这个链接就会跳转到新的付款界面,就是那个似曾相似的付款界面, 这一步才是最重要最难的,就是虚拟U卡付款, 这里我用的是Rg的虚拟U卡,详细的介绍参考这个视频:【【2026最新】U卡攻略】 https://www.bilibili.com/video/BV1XwctzUEr7/?share_source=copy_web&vd_source=88d301c1f370f5e700a3bf792692e529 佬友们觉得写的不错,可以在我的链接下注册,这里不是广告,真心推荐的虚拟U卡,我当时注册只要身份证就可以注册了,但不建议多充钱,充多少用多少,谨防跑路,哈哈哈哈! 我看其他佬友用的是Bybit 支付,其实我没有这张卡, 但我试过SafePal支付,提示银行卡被拒了,可能是我余额不足,还是什么原因,有会的佬友记得@我一下, 有的佬友,safepal欧卡也能付,而且卡里的币还是usd,自动转澳刀消费了, 话说回来,然后就是搞一个美国免税州的收货地址,请参考这个网站和里面的免税州 俄勒冈州地址生成器 - 美国地址生成器 - 美国身份生成器 等待Roogoo付款成功即可,这里再插三句,充多少用多少,充多少用多少,充多少用多少! 关于冻结的问题,少于10刀就会冻结! 至此,2026年5月10日9点30分,英国区ChatGPT Team/Business 买一送一持续48个月订阅教程结束 最后插一句, 48个月优惠,刚刚付款成功,2个空间,求一个搭子! 8 个帖子 - 8 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-05-10 10:55:50+08:00 · tech

2026年5月9日凌晨1点,在X和L站都看到了ChatGPT Team/Business 买一送一持续48个月! 当时不以为然, 5月10日早上根本睡不着了,早上8点决定开搞。 首先参考了L站内很多大佬的推文: [5/10 澳和英优惠来了] ChatGPT Team/Business 买一送一持续48个月! - 福利羊毛 / 福利羊毛, Lv1 - LINUX DO 【已跟第一个回复的搭上了】48个月优惠,刚刚付款成功,2个空间,求一个搭子 - 搞七捻三 - LINUX DO 感觉有点难度啊:我主要的问题就是不会长连接付款和虚拟U卡支付, 不过,冷静了一下还是决定趟这趟混水! 思考再三后,决定走英国区, 英国优惠链接(最便宜 15.3 刀): https://chatgpt.com/?promoCode=codestonegb 最后我付款的钱大概是15.64刀,包含跨境费, 以下图片都是苹果手机拍的,不是很清晰,哈哈哈哈哈哈! 打开链接前,需要打开英国梯子和登录一个全新的GPT账号(主要怕封号,哈哈哈哈),其实也可以登录自己账户! 打开英国优惠链接后,就会出现下面的界面,直接点击升级, 然后就是ChatGPT Team/Business 买一送一持续48个月的11英镑的付款界面,但是这里是短链接,就算你填了付款卡信息后,也付不了款 于是我开始在L站找长连接付款,经过漫长的搜索和验证,最好的方式就是这个: 短链接支付不了的,可以试试下面从别的佬那里搞来的长链接,加工了好多次,缝缝补补的能用了 使用方法( 注意修改promoCode和货币国家 ): F12-> 控制台-> CTRL-V-> 允许粘贴->粘贴后回车食用 (async function generateAUTeamLink() { console.log("⏳ 正在获取B Session Token..."); // 自动获取登录凭证 let accessToken; try { const s = await fetch("/api/auth/session").then(r => r.json()); accessToken = s?.accessToken; if (!accessToken) throw new Error("accessToken 为空"); } catch (e) { console.error("❌ 获取 Token 失败:", e.message); return; } console.log("✅ Token 获取成功"); const COUPON = "codestonegb"; // ---- 以下为你提供的 Payload(仅修改 workspace_name 动态生成)---- const payload = { plan_name: "chatgptteamplan", team_plan_data: { workspace_name: "workspace", // 可自行修改 price_interval: "month", // month 或 year seat_quantity: 2, // 席位数量,Team 最少 2?1的话是另外种玩法,需要号 }, billing_details: { country: "GB", currency: "GBP" }, cancel_url: "https://chatgpt.com/?promoCode=codestonegb", promo_code: COUPON, // 注意这里用的是 promo_code 字段 checkout_ui_mode: "hosted" }; console.log("⏳ 正在请求 Stripe 长链接 (US)..."); try { const resp = await fetch( "https://chatgpt.com/backend-api/payments/checkout", { method: "POST", headers: { Authorization: `Bearer ${accessToken}`, "Content-Type": "application/json" }, body: JSON.stringify(payload) } ); const data = await resp.json(); if (!resp.ok) { console.error(`❌ 请求失败 HTTP ${resp.status}`); console.log("📋 响应详情:", data); return; } const hostedUrl = data?.url || data?.stripe_hosted_url || data?.checkout_url; if (!hostedUrl) { console.warn("⚠️ 未找到长链接,原始响应:", data); return; } console.log("─".repeat(60)); console.log("✅ ChatGPT Team 链接生成成功!(美国)"); console.log("📋 Checkout Session ID :", data.checkout_session_id); console.log("📌 计划 : ChatGPT Team (US/USD)"); console.log("💺 席位 :", payload.team_plan_data.seat_quantity); console.log("🎟️ 优惠码 :", COUPON); console.log("🔗 Stripe 长链接:"); console.log(hostedUrl); console.log("─".repeat(60)); } catch (e) { console.error("❌ 网络异常:", e.message); } })(); 我啥也不改,直接在这个位置操作, 插一句,我还总结一个佬友的帖子,你们看看可不可以参考一下: 发现很多佬不会GPT长连接,发个通用的方法适用于各种优惠,Team等各种GPT支付长链接 - 搞七捻三 / 搞七捻三, Lv1 - LINUX DO 就会出现一个付款长链接, 点击这个链接就会跳转到新的付款界面,就是那个似曾相似的付款界面, 这一步才是最重要最难的,就是虚拟U卡付款, 这里我用的是Rg的虚拟U卡,详细的介绍参考这个视频:【【2026最新】U卡攻略】 https://www.bilibili.com/video/BV1XwctzUEr7/?share_source=copy_web&vd_source=88d301c1f370f5e700a3bf792692e529 佬友们觉得写的不错,可以在我的链接下注册,这里不是广告,真心推荐的虚拟U卡,我当时注册只要身份证就可以注册了,但不建议多充钱,充多少用多少,谨防跑路,哈哈哈哈! 我看其他佬友用的是Bybit 支付,其实我没有这张卡, 但我试过SafePal支付,提示银行卡被拒了,可能是我余额不足,还是什么原因,有会的佬友记得@我一下, 有的佬友,safepal欧卡也能付,而且卡里的币还是usd,自动转澳刀消费了, 话说回来,然后就是搞一个美国免税州的收货地址,请参考这个网站和里面的免税州 俄勒冈州地址生成器 - 美国地址生成器 - 美国身份生成器 等待Roogoo付款成功即可,这里再插三句,充多少用多少,充多少用多少,充多少用多少! 关于冻结的问题,少于10刀就会冻结! 至此,2026年5月10日9点30分,英国区ChatGPT Team/Business 买一送一持续48个月订阅教程结束 最后插一句, 48个月优惠,刚刚付款成功,2个空间,求一个搭子! 18 个帖子 - 15 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-05-09 16:11:27+08:00 · tech

前提 非常感谢各位佬友对我之前文章的认可,既然大家对此类的文章比较感兴趣,恰巧我也研究过,所以继续给大家带来一个搭建中转站的教程 该文章不会着重的讲解CPA的使用,有兴趣的佬友可以看我的这篇文章: 拒绝token焦虑 cpa(CLI Proxy API)反代 chatgpt(Codex) 保姆级全图文教程 - 开发调优 - LINUX DO 本教程需要的技术(版本仅作为参考): VPS(云服务器)(地区选择:硅谷) :2c2g(2个CPU核数2G的内存) Linux :CentOS Linux release 7.6.1810 (Core) docker :26.1.4 docker-compose :2.27.1 CLI Proxy API(CPA) :latest(v6.10.9 )(本教程会用newapi作为token监控和代理节点,cpa只是作为newapi的一个渠道使用和用于管理认证文件,所以用最新的版本即可) NEW API :latest(v1.0.0-rc.4) Nginx :latest(1.29.8) 本教程需要的工具: FinalShell :SSH远程连接工具 VPS选择 我买了腾讯云的服务器用来做教学,全程可用国内网访问 有vps的佬可以跳过这一步了 活动页 腾讯云最新活动 这个为新人优惠,2c2g一年99米 这是两个图片拼接起来的,颜色不同的大框表示不同的图片,这两个图片的截取在同一个页面,下滑即可 购买完毕后进入控制台 这也是两张图片拼接起来的,颜色不同的大框表示不同的图片,上面黄框是腾讯云的主页的头部标签,下面红框是点击控制台后进入控制台的页面 查看服务器ip 也是由黄框和红框分别不同的图片 由于腾讯云默认安全组打开了22端口(SSH服务),这里就不进安全组了,后文有讲到如何配置安全组,这里不过多赘述 使用FinalShell连接到服务器 填写名称、主机ip、用户名和密码即可连接到我们的服务器 FinalShell的好处就是修改文件或者上传下载文件时是可视化的,不用一遍一遍敲命令行 对外中转站教程开始 一、准备工作 1、创建一个文件夹用于存文件,并进入该文件夹 proxy:用于存放docker-compose.yml文件(启动文件夹) cpa:用于存放cpa的配置文件(config.yaml)和其他的挂载卷信息(日志、Oauth认证文件) newapi:用于存放new api的挂载卷信息(日志、配置文件) mkdir -p /opt/proxy/{cpa/{logs,auths},newapi/{data,logs}} && cd /opt/proxy && touch docker-compose.yml cpa/config.yaml 执行上述命令后,我们就可以看到下面图片所示内容 newapi里面就不展示了,里面的文件是空的 需要修改proxy文件夹中的docker-compose.yml和cpa目录下的config.yaml文件 目录结构如下 /opt/proxy/ ├── docker-compose.yml ├── cpa/ │ ├── logs/ │ ├── auths/ │ └── config.yaml └── newapi/ ├── data/ └── logs/ 2、cpa目录下的 config.yaml 文件 包含 的参数是需要修改的,包含 的是可修改的,其他的可以照抄 # 服务器绑定主机/接口,默认空字符串同时绑定 IPv4/IPv6 # 使用 "127.0.0.1" 或 "localhost" 可限制仅本机访问 host: "" # 服务器端口 port: 8317 tls: # 是否启用 HTTPS enable: false # 管理 API 设置 remote-management: # 是否允许远程(非 localhost)访问管理接口。 # 为 false 时仅允许 localhost,仍需管理密钥。 allow-remote: true # 管理密钥。若填写明文,启动时会自动哈希后生效。 # 所有管理请求(包括本地)都需要该密钥。 # 留空则完全禁用管理 API(所有 /v0/management 路由返回 404)。 secret-key: "$2a$10$5dHykttqHWAU.WcYFg0qgOXhDoxC1P7wpZ7i2T8Kj9xqwvVRfTUm2" # ⚠️ 请修改密码 # true 时禁用内置管理面板资源与路由。 默认 false disable-control-panel: false # 认证目录(支持 ~ 展开为主目录) auth-dir: "~/.cli-proxy-api" # apikeys 自己设置 api-keys: - sk-8SGCShq021BAFgpBE # ⚠️ 请修改秘钥 # 调试日志。 默认 false debug: true # 写入滚动日志文件而非 stdout。 默认false logging-to-file: true # 日志目录大小上限,0 表示不限制。 logs-max-total-size-mb: 100 # 403/408/500/502/503/504 时的重试次数。 request-retry: 3 # 冷却凭据等待秒数上限,超出即触发重试。 max-retry-interval: 30 routing: # 多匹配凭据的选择策略:round-robin 或 fill-first。 默认round-robin strategy: "round-robin" # 是否为 /v1/ws 启用认证。 默认false ws-auth: false # 为 false 时禁用内存用量统计聚合,默认false # 1.10版本后失效,我这里用的最新版本,并且后续通过newapi统计,这里false即可 # ❓ 如果选择cpa对外的话,并且参照我之前的文章,需要监控token消耗,这里可以改为true usage-statistics-enabled: false 3、proxy目录下的 docker-compose.yml 文件 包含 的参数是需要修改的,包含 的是可修改的,其他的可以照抄 # newapi docker-compose 配置参考: # https://docs.newapi.ai/zh/docs/installation/config-maintenance/docker-compose-yml # 启动的全部服务 services: # 服务名 new-api: # 镜像名 image: calciumion/new-api:latest # 容器名 container_name: new-api # 退出时总是自动重启,确保服务意外挂掉后能恢复。 restart: always # 启动容器后,会执行这个自定义命令,它将应用的日志目录设置为 /app/logs command: --log-dir /app/logs # 端口映射 ports: - '3000:3000' # ❓注意后面的3000不能修改,不然后面的healthcheck心跳检测,检测不到 # 卷挂载 volumes: - ./newapi/data:/data - ./newapi/logs:/app/logs # 环境变量 environment: - SQL_DSN=postgresql://root:123456@postgres:5432/new-api # ⚠️ 请修改密码 # - SQL_DSN=root:123456@tcp(mysql:3306)/new-api # 如果用mysql的话,取消这条注释,并注释上面那条 - REDIS_CONN_STRING=redis://redis # 设置容器时区为上海 - TZ=Asia/Shanghai # 是否启用错误日志记录 - ERROR_LOG_ENABLED=true # 是否启用批量更新 batch update enabled - BATCH_UPDATE_ENABLED=true # - STREAMING_TIMEOUT=300 # 流模式无响应超时时间,单位秒,默认120秒,如果出现空补全可以尝试改为更大值 # - SESSION_SECRET=random_string # 多机部署时设置,必须修改这个随机字符串!! # - SYNC_FREQUENCY=60 # 如果需要定期数据库同步,请取消注释 # 定义启动顺序,它会等待 rpa、redis、postgres 容器启动后,再启动 depends_on: - redis - postgres # - mysql # 如果用mysql的话,取消这条注释,并注释上面那条 - cpa # 心跳检查,在容器内检查,间隔30s,超时时间10s,重复机制3次 healthcheck: # test的内容是向本机(容器内)发送一个请求,如果在响应中找不到success关键字就报错 test: [ 'CMD-SHELL', "wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' || exit 1", ] interval: 30s timeout: 10s retries: 3 # 下面的同上,不同的参数我再做解释 redis: image: redis:latest container_name: redis restart: always postgres: image: postgres:15 container_name: postgres restart: always environment: # 数据库用户名 POSTGRES_USER: root # ❓ 设置用户名,改为你自己的 # 数据库密码 POSTGRES_PASSWORD: 123456 # ⚠️ 设置密码,改为你自己的 # 数据库名 POSTGRES_DB: new-api volumes: - pg_data:/var/lib/postgresql/data # ports: # - "5432:5432" # 如果这个服务要对外,需要解开这个注释 # mysql: # image: mysql:8.2 # container_name: mysql # restart: always # environment: # MYSQL_ROOT_PASSWORD: 123456 # ⚠️ 设置密码,改为你自己的 # MYSQL_DATABASE: new-api # volumes: # - mysql_data:/var/lib/mysql # ports: # - "3306:3306" # 如果这个服务要对外,需要解开这个注释 # cpa服务 cpa: image: eceasy/cli-proxy-api:latest container_name: cpa # ports: # - "9999:8317" # ❓因为这次是通过newpai对外提供服务,cpa只是作为认证文件管理工具 volumes: - ./cpa/config.yaml:/CLIProxyAPI/config.yaml # 配置文件输出 - ./cpa/auths:/root/.cli-proxy-api # 认证文件 config.yaml 中的 ~ 代表主目录,在linux中就是 /root - ./cpa/logs:/CLIProxyAPI/logs # 日志文件输出 restart: always # 顶级挂载,避免文件权限问题,挂载地址:/var/lib/docker/volumes/pg_data volumes: pg_data: # mysql_data: 4、把认证文件放进 /opt/proxy/cpa/auths 目录下 5、去Linux的防火墙打开3000端口 先查看下防火墙状态 # 看防火墙是否在运行 systemctl status firewalld # 启动防火墙(不会断 SSH,放心) systemctl start firewalld # 设置开机自启 systemctl enable firewalld # 看看当前默认放行了哪些服务 firewall-cmd --list-services # 看开放了哪些端口 firewall-cmd --list-ports 如果防火墙没有开启,则不用执行下面的步骤,或者你要安全可以打开防火墙后执行下面命令 打开后后续如果要对外开放端口都需要重新配置一遍 比如你只想用cpa对外,就需要修改 --add-port 为你自己的参数 firewall-cmd --zone=public --add-port=3000/tcp --permanent && firewall-cmd --reload && firewall-cmd --list-ports 比如下面我的操作就说明可以了(供参考): [root@VM-0-16-centos proxy]# firewall-cmd --zone=public --add-port=3000/tcp --permanent && firewall-cmd --reload && firewall-cmd --list-ports success success 3000/tcp [root@VM-0-16-centos proxy]# firewall-cmd --list-ports 3000/tcp 6、打开云服务器的安全组 我用的是腾讯云的vps,这里用腾讯云举例,其他的也是大同小异 (1、先去控制台进入选择我们的服务器 (2、选择防火墙并添加规则,下面三个是官方配置的,不要动,特别是SSH登录(22端口) (3、添加规则:配置来源和端口号 (4、确认好后就多了一条 二、执行docker compose文件 在 /opt/proxy 目录下(你的 docker-compose.yml 文件所在目录) 执行命令 docker compose up -d 即可 [root@VM-0-16-centos proxy]# docker compose up -d WARN[0000] /opt/proxy/docker-compose.yml: `version` is obsolete [+] Running 27/10 ✔ redis Pulled 8.2s ✔ postgres Pulled 26.0s ✔ new-api Pulled 27.3s [+] Running 6/6 ✔ Network proxy_default Created 0.1s ✔ Volume "proxy_pg_data" Created 0.0s ✔ Container cpa Started 0.8s ✔ Container postgres Started 0.7s ✔ Container redis Started 0.8s ✔ Container new-api Started PS:关闭docker compose后重启报错 关闭docker compose命令 docker compose down 我重启时遇见了下面的问题 这里只需要重启docker再启动docker compose即可 重启docker: systemctl restart docker 启动docker compose: docker compose up -d [root@VM-0-16-centos proxy]# docker compose up -d WARN[0000] /opt/proxy/docker-compose.yml: `version` is obsolete [+] Running 1/0 ✘ Network proxy_default Error 0.0s failed to create network proxy_default: Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-b977b99684c8 -j RETURN: iptables: No chain/target/match by that name. (exit status 1)) 三、我们通过 http://ip:3000 就可以访问我们中转站了 四、newapi配置 1、登录 我们通过管理员登录,就可以看见只有管理员才能看见的菜单了 而这些菜单就是对关键的配置 我这里只讲一下几个关键菜单配置 这些菜单也只是挑重点讲一下,最后能使用即可,如果自用或者公益站这些足以,如果商用就得自己下功夫去看官网文档,或者把源码下载下来二次开发了 如果感兴趣可以去官网查看文档,写的很详细: 渠道管理 | New API 2、渠道管理 添加渠道 这里填写我们cpa配置的apikey和docker compose配置的服务名(因为在同一个docker compose文件中,他们共享同一个docker网络) 名称:随意 秘钥:cpa中config.yaml配置的秘钥 API地址(放个可以复制粘贴的: http://cpa:8317 ):就是cpa的地址 模型:秘钥和api地址填好后点击获取即可 点击测试后发现报错,我们就根据报错提示去配置价格 3、系统管理 设置模型价格 我们再去点击测试,发现就可以通过了 在模型广场里面也可以看见我们配置的模型了 其他 系统设置里面有很多功能,比如修改可见菜单 设置签到功能 设置公告、api信息、支付等等 4、配置令牌 5、本地连接测试(CC Switch) 配置一下刚才我们复制的秘钥 测试一下,没有问题 在数据看板中也可以看见使用情况 五、域名配置 这里可以很简单的配置一下DNS做映射,但不安全,所以我们这里添加一个项目nginx,用于添加SSL证书 这里我使用的是 cloudflare 做的代理,所以我按cloudflare讲解,其他的云服务商配置也是大同小异 如果不想配置nginx和SSL,只想单纯的通过域名解析到IP,直接看第三步:配置DNS解析服务 我买的顶级域名为(严格来说这是二级域名,我习惯说这是顶级域名):wudike.online 需要创建一个二级域名来映射我的网站:api.wudike.online 1、使用 Cloudflare 的 DNS 代理我们的域名 这里的域名是我之前买的,在阿里云上的,所以我用阿里云作为演示,各个云服务商的操作都是大同小异的 (1、进入域名与网站 (2、选择域名进行购买 查询之后下滑点击购买就可以了 域名这里买了之后要实名去备份,审核要几个工作日吧,有点忘记了 (3、登录Cloudflare,并交给Cloudflare托管 ps:Cloudflare右上角人物头像那可以切换语言 ①、添加域名 下面那个我已经注册了,上面已经有服务了,注销在注册太麻烦 ②、跟着我的步骤点点就行了 上面四个步骤结束后我们得到了下面这个页面,需要去我们的云服务商重新配置一下DNS解析 ③、我们去阿里云配置一下域名的解析 进入我们的工作台,点击域名就可以看到我们购买的域名了 进去之后我们就可以修改DNS代理了 注: 国际域名最少填写2个,最多填写13个,国内域名最多填写6个。 所以我们两个都要复制哦,把之前的替换掉 ④、回到Cloudflare 下拉后,点击我已更新名称服务器 我们等十分钟后刷新一下 如果出现这样就代表成功了,由于我已经配置了一个域名,不想再去买一个配置了,下面这张图用的小黄大佬的图,大佬的文章我也贴在最后了 2、添加 nginx 目录和文件 mkdir -p /opt/proxy/nginx/{ssl,logs,conf.d} && \ cd /opt/proxy && \ touch nginx/nginx.conf nginx/conf.d/api.conf nginx/ssl/api.pem nginx/ssl/api.key && \ chmod 600 ./nginx/ssl/api.key 执行上面命令,再结合上文的newapi和cpa目录,整体的目录树如下,这里主要讲nginx的东西,auth的json认证文件什么的就没画了 /opt/proxy/ ├── docker-compose.yml # docker compose 文件 ├── newapi/ # new-api 数据目录 │ ├── data/ │ └── logs/ ├── cpa/ # cpa 服务配置目录 │ ├── config.yaml │ ├── auths/ │ └── logs/ └── nginx/ # Nginx 相关文件 ├── nginx.conf # Nginx 主配置文件 ├── conf.d/ │ └── api.conf # API 站点配置文件 ├── ssl/ │ ├── api.pem # SSL 证书文件 │ └── api.key # SSL 私钥文件 (权限: 600) └── logs/ # Nginx 日志目录 nginx.conf 这里不用修改,直接复制粘贴即可 user nginx; # 工作进程运行用户 worker_processes auto; # 自动检测 CPU 核心数,设为对应进程数 error_log /var/log/nginx/error.log warn; # 错误日志路径及级别(warn) pid /var/run/nginx.pid; # 主进程 PID 存放文件 events { worker_connections 1024; # 每个工作进程最大并发连接数 use epoll; # 使用 Linux epoll 事件模型(高并发) multi_accept on; # 同时接受多个新连接 } http { include /etc/nginx/mime.types; # 引入 MIME 类型与文件扩展名映射 default_type application/octet-stream; # 未知文件类型的默认 MIME log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # 自定义日志格式,记录客户端 IP、时间、请求、状态等 access_log /var/log/nginx/access.log main; # 访问日志路径,使用 main 格式 sendfile on; # 开启高效文件传输模式 tcp_nopush on; # sendfile 开启时,将响应头和数据一起发送 tcp_nodelay on; # 对 keep-alive 连接禁用 Nagle 算法,降低延迟 keepalive_timeout 65; # keep-alive 连接超时秒数 types_hash_max_size 2048; # MIME 类型哈希表最大大小 client_max_body_size 100m; # 客户端请求体最大允许大小(上传限制) gzip on; # 启用 gzip 压缩 gzip_vary on; # 添加 Vary: Accept-Encoding 响应头 gzip_min_length 1024; # 只压缩超过 1KB 的响应 gzip_comp_level 6; # 压缩等级 1-9,6 是性能和压缩率的平衡点 gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml+rss application/rss+xml font/truetype font/opentype application/vnd.ms-fontobject image/svg+xml; # 需要压缩的 MIME 类型列表 include /etc/nginx/conf.d/*.conf; # 加载站点单独配置文件(如 api.conf) } api.conf 包含 的参数是需要修改的,包含 的是可修改的,其他的可以照抄 # ==================== HTTP 重定向到 HTTPS ==================== server { listen 80; # 监听 IPv4 80 端口 server_name api.wudike.online; # ⚠️ 你的域名 # 将所有 HTTP 请求永久重定向到 HTTPS return 301 https://$server_name$request_uri; } # ==================== HTTPS 主服务器 ==================== server { listen 443 ssl http2; # 监听 IPv4 443 端口,开启 SSL 和 HTTP/2 server_name api.wudike.online; # ⚠️ 你的域名 ssl_certificate /etc/nginx/ssl/api.pem; # ❓名字可改 SSL 证书文件(含中间证书) ssl_certificate_key /etc/nginx/ssl/api.key; # ❓名字可改 SSL 私钥文件 ssl_protocols TLSv1.2 TLSv1.3; # 只启用安全的 TLS 协议版本 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; # 加密套件列表 ssl_prefer_server_ciphers off; # 由客户端选择加密套件(兼容性更好) ssl_session_cache shared:SSL:10m; # 共享 SSL 会话缓存,提升 TLS 握手速度 ssl_session_timeout 10m; # SSL 会话缓存过期时间 # 安全增强响应头 add_header Strict-Transport-Security "max-age=63072000" always; # 启用 HSTS,强制浏览器使用 HTTPS add_header X-Frame-Options "SAMEORIGIN" always; # 限制页面只能被同源网站嵌入 add_header X-Content-Type-Options "nosniff" always; # 禁止浏览器 MIME 类型嗅探 add_header X-XSS-Protection "1; mode=block" always; # 开启浏览器内置 XSS 过滤 access_log /var/log/nginx/api-access.log main; # 站点访问日志 error_log /var/log/nginx/api-error.log; # 站点错误日志 client_max_body_size 100m; # 允许上传的最大请求体(API 数据可能较大) location / { proxy_pass http://new-api:3000; # ⚠️ 你的应用服务名 proxy_http_version 1.1; # 使用 HTTP/1.1 长连接 # WebSocket 支持头(用于 OpenAI 流式接口等) proxy_set_header Upgrade $http_upgrade; # 传递客户端的 Upgrade 头 proxy_set_header Connection 'upgrade'; # 标记为升级连接 # 原始请求信息传递 proxy_set_header Host $host; # 原始域名 proxy_set_header X-Real-IP $remote_addr; # 客户端真实 IP(直连时直接就是客户端 IP) proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 代理链 IP 列表 proxy_set_header X-Forwarded-Proto $scheme; # 原始协议(http 或 https) proxy_set_header X-Forwarded-Host $host; # 原始 Host 头 proxy_set_header X-Forwarded-Port $server_port; # 用户访问的端口 # 超时优化,应对 AI 接口长响应 proxy_connect_timeout 300s; # 连接后端超时 proxy_send_timeout 300s; # 向后端发送请求超时 proxy_read_timeout 300s; # 等待后端响应超时 # 关闭缓冲,保证流式输出 (SSE) 即时送达 proxy_buffering off; # 关闭代理缓冲 proxy_cache off; # 关闭缓存 proxy_cache_bypass $http_upgrade; # 对升级请求(WebSocket)绕过缓存 } # Nginx 自身健康检查端点 location /nginx-health { access_log off; # 不记录该端点的访问日志 return 200 "healthy\n"; # 直接返回 200 和文本 add_header Content-Type text/plain; # 设置 Content-Type } } api.pem 和 api.key 这里我们去cloudflare 获取 创建一个证书 输入一下我们要的二级域名,点击创建 我们就得到了 api.pem 和 api.key 复制粘贴进去,记得这个页面还有个确认要点 3、配置DNS解析服务 如果不想配置nginx和SSL,只想单纯的通过域名解析到IP,看下面的文字说明 如果不需要CF代理,直接通过dns解析到ip地址 那么关闭代理状态就可以了 也不需要配置nginx和SSL 比如我直接用newapi的3000接口 这里通过api.wudike.online映射到我的ip后 通过api.wudike.online:3000就可以直接访问到我的newapi项目了 因为DNS解析需要时间1-10分钟,所以我把DNS的步骤提前了,我们后面的步骤走完就可以直接通过我们的二级域名访问我们的项目了 4、打开防火墙 Linux 防火墙打开 上文讲了如何判断防火墙是否启用等等,这里就不过多赘述了 打开443和80端口,并且重载防火墙 # 打开443和80端口,并且重载防火墙 firewall-cmd --permanent --add-port=443/tcp && firewall-cmd --permanent --add-port=80/tcp && firewall-cmd --reload # 关闭 3000 端口 firewall-cmd --permanent --remove-port=3000/tcp && firewall-cmd --reload 查看防火墙是否开放443和80端口: firewall-cmd --list-ports 这个警告不用理会,只是提醒我们服务器上还有个 docker zone,但外部访问走 public 区域,80/443 已经在正确的区域放行了 [root@VM-0-16-centos proxy]# firewall-cmd --list-ports You're performing an operation over default zone ('public'), but your connections/interfaces are in zone 'docker' (see --get-active-zones) You most likely need to use --zone=docker option. 443/tcp 80/tcp 服务商打开安全组 在上文中我已经讲解了怎么进入安全组了,这里就不过多赘述了,记得把之前的3000端口给关闭掉,虽然我们通过linux防火墙已经关闭了,但怎么安全怎么来 5、修改docker compose文件,添加nginx 该文件内容是完整的,但里面参数也需要修改一下 现在new-api不直接对外提供服务,只能内网访问,后面通过nginx反向代理到443端口,对外提供服务 包含 的参数是需要修改的,包含 的是可修改的,其他的可以照抄 # newapi docker-compose 配置参考: # https://docs.newapi.ai/zh/docs/installation/config-maintenance/docker-compose-yml # 启动的全部服务 services: # 服务名 new-api: # 镜像名 image: calciumion/new-api:latest # 容器名 container_name: new-api # 退出时总是自动重启,确保服务意外挂掉后能恢复。 restart: always # 启动容器后,会执行这个自定义命令,它将应用的日志目录设置为 /app/logs command: --log-dir /app/logs # 端口映射 ports: - '3000' # 改成 expose,不再对外暴露端口 # 卷挂载 volumes: - ./newapi/data:/data - ./newapi/logs:/app/logs # 环境变量 environment: - SQL_DSN=postgresql://root:123456@postgres:5432/new-api # ⚠️ 请修改密码 # - SQL_DSN=root:123456@tcp(mysql:3306)/new-api # 如果用mysql的话,取消这条注释,并注释上面那条 - REDIS_CONN_STRING=redis://redis # 设置容器时区为上海 - TZ=Asia/Shanghai # 是否启用错误日志记录 - ERROR_LOG_ENABLED=true # 是否启用批量更新 batch update enabled - BATCH_UPDATE_ENABLED=true # - STREAMING_TIMEOUT=300 # 流模式无响应超时时间,单位秒,默认120秒,如果出现空补全可以尝试改为更大值 # - SESSION_SECRET=random_string # 多机部署时设置,必须修改这个随机字符串!! # - SYNC_FREQUENCY=60 # 如果需要定期数据库同步,请取消注释 # 定义启动顺序,它会等待 rpa、redis、postgres 容器启动后,再启动 depends_on: - redis - postgres # - mysql # 如果用mysql的话,取消这条注释,并注释上面那条 - cpa # 心跳检查,在容器内检查,间隔30s,超时时间10s,重复机制3次 healthcheck: # test的内容是向本机(容器内)发送一个请求,如果在响应中找不到success关键字就报错 test: [ 'CMD-SHELL', "wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' || exit 1", ] interval: 30s timeout: 10s retries: 3 # docker 网络 networks: - newapi-network # 下面的同上,不同的参数我再做解释 redis: image: redis:latest container_name: redis restart: always networks: - newapi-network postgres: image: postgres:15 container_name: postgres restart: always environment: # 数据库用户名 POSTGRES_USER: root # ❓ 设置用户名,改为你自己的 # 数据库密码 POSTGRES_PASSWORD: 123456 # ⚠️ 设置密码,改为你自己的 # 数据库名 POSTGRES_DB: new-api volumes: - pg_data:/var/lib/postgresql/data # ports: # - "5432:5432" # 如果这个服务要对外,需要解开这个注释 networks: - newapi-network # mysql: # image: mysql:8.2 # container_name: mysql # restart: always # environment: # MYSQL_ROOT_PASSWORD: 123456 # ⚠️ 设置密码,改为你自己的 # MYSQL_DATABASE: new-api # volumes: # - mysql_data:/var/lib/mysql # ports: # - "3306:3306" # 如果这个服务要对外,需要解开这个注释 # cpa服务 cpa: image: eceasy/cli-proxy-api:latest container_name: cpa # ports: # - "9999:8317" # ❓因为这次是通过newpai对外提供服务,cpa只是作为认证文件管理工具 volumes: - ./cpa/config.yaml:/CLIProxyAPI/config.yaml # 配置文件输出 - ./cpa/auths:/root/.cli-proxy-api # 认证文件 config.yaml 中的 ~ 代表主目录,在linux中就是 /root - ./cpa/logs:/CLIProxyAPI/logs # 日志文件输出 restart: always networks: - newapi-network # Nginx 反向代理服务 用于做SSL nginx: image: nginx:alpine container_name: nginx restart: always ports: - '80:80' - '443:443' volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./nginx/conf.d:/etc/nginx/conf.d:ro - ./nginx/ssl:/etc/nginx/ssl:ro - ./nginx/logs:/var/log/nginx depends_on: - new-api networks: - newapi-network # 顶级挂载,避免文件权限问题,挂载地址:/var/lib/docker/volumes/pg_data volumes: pg_data: # mysql_data: # 定义网络(顶级) networks: newapi-network: # 桥接模式 driver: bridge 6、启动我们的docker compose 之前也讲过怎么关闭与启动这里就放几个命令 关闭: docker compose down 启动: docker compose up -d 启动完成后就可以访问我们的二级域名转到我们的项目了 并且通过了CF的代理,DNS也不是直接转向我们机器的ip,这样就大大滴安全了(并不) 测试我们最关心的 反代问题,没问题,文章完结撒花 参考文章 全平台 Docker 部署 CPA(CLIProxyAPI Plus) 灵活定制指南 (Linux/Windows)——接入Codex - 掘金 【教程】2026版 小白也能看懂的自建Cloudflare临时邮箱教程(域名邮箱) - 文档共建 - LINUX DO 18 个帖子 - 18 位参与者 阅读完整话题