本项目用于在 Heroku 以及其它 PaaS 平台上部署 Vmess WebSocket 和 Trojan Websocket 协议,支持 WS-0RTT 降低延迟,并可以启用 Cloudflare Argo 隧道。
部署完成后,每次容器启动时,xray 和 Loyalsoldier 路由规则文件将始终为最新版本。
- 请勿滥用,Heroku 以及其它平台账号封禁风险自负
- 若使用域名接入 CloudFlare,请考虑启用 TLS 1.3
- Heroku使用AWS服务器,Twitter移动端app可能访问不正常,可以使用网页端或者Twitter Lite PWA应用。
- Heroku容器无ipv6网络,不能访问ipv6地址。
请勿使用本仓库直接部署
Heroku 部署方法
- 点击本仓库右上角Fork,再点击Create Fork。
- 在Fork出来的仓库页面上点击Setting,勾选Template repository。
- 然后点击Code返回之前的页面,点Setting下面新出现的按钮Use this template,起个随机名字创建新库。
- 项目名称注意不要包含
v2ray
和heroku
两个关键字(用户名以example
为例,修改后的项目名以demo
为例) - 登陆heroku后,浏览器访问 dashboard.heroku.com/new?template=https://github.com/example/demo
其它支持拉取容器镜像 PaaS 平台部署方法
- 点击本仓库右上角Fork,再点击Create Fork。
- 在Fork出来的仓库页面上点击Setting,勾选Template repository。
- 然后点击Code返回之前的页面,点Setting下面新出现的按钮Use this template,起个随机名字创建新库。
- 项目名称注意不要包含
v2ray
和heroku
等关键字。 - 点击页面右侧 Create a new release,建立格式为 v0.1.0 的tag,其它内容随意,然后点击 Publish release。
- 大概不到一分钟后,github action 构建容器镜像完成,点击页面右侧 Packages, 再点击进入刚生成的 Package。
- 点击页面右侧 Package settings,在页面最下方点击 Change visibility,选择 public 并输入 package 名称以确认。
- 容器镜像拉取地址在 package 页面 docker pull 命令示例中,其它部署步骤请参阅具体平台文档。需要设置的环境变量见下文,端口默认为3000,也可自行设置 PORT 环境变量更改。
对部署时需设定的变量名称做如下说明。
变量 | 默认值 | 说明 |
---|---|---|
VmessUUID |
ad2c9acd-3afb-4fae-aff2-954c532020bd |
Vmess 用户 UUID,用于身份验证,务必修改,建议使用UUID生成工具 |
SecretPATH |
/mypath |
Websocket代理路径前缀,务必修改为不常见字符串 |
PASSWORD |
password |
Trojan 协议密码,务必修改为强密码 |
ArgoDOMAIN |
Argo 隧道域名,保持默认空值为禁用 Argo 隧道 | |
ArgoJSON |
Argo 隧道 JSON 文件 |
-
支持的协议:Vmess WS 80端口、Vmess WS TLS 443端口、Trojan WS TLS 443端口、Vmess WS 80/8080端口 + Argo 隧道、Vmess WS TLS 443端口 + Argo 隧道。 (Trojan WS 80端口也可连接,但数据全程无加密,请勿使用)
-
Vmess 协议 AlterID 为 0。
-
Websocket路径分别为:
# Vmess ${SecretPATH}/vm # Trojan ${SecretPATH}/tr
-
使用IP地址连接时,无tls加密配置,需要在 host 项指定域名,tls加密配置,需要在sni(serverName)项中指定域名。
-
Vmess 和 Shadowssocks 协议全程加密,安全性更高。Trojan 协议自身无加密,依赖外层tls加密, 数据传输路径中如果 tls 被解密,原始传输数据有可能被获取。
-
Xray 核心的客户端直接在路径后面加?ed=2048即可启用 WS-0RTT,v2fly 核心需要在配置文件中添加如下配置:
"wsSettings": { "path": "${WSPATH}", "maxEarlyData": 2048, "earlyDataHeadName": "Sec-WebSocket-Protocol" }
以下三种方式均可以将应用接入 CloudFlare,解决Heroku无法直接连接问题,在某些网络环境下配合cloudflare优选ip可以提速。
- 为应用绑定域名,并将该域名接入 CloudFlare (需要 Heroku 信用卡认证账号)
- 通过 CloudFlare Workers 反向代理,workers.dev域名被sni阻断,无法使用tls协议链接,可以使用80端口无tls协议连接。
- 通过 Argo 隧道接入 CloudFlare
- 设置Cloudflare Workers服务
- 代理服务器地址/host域名/sni(serverName)填写上面创建的Workers service域名。
- 前提在 Cloudflare 上有一个托管的域名,以example.com为例
- 下载 Cloudflared
- 运行 cloudflared login,此步让你绑定域名。
- 运行 cloudflared tunnel create 隧道名,此步会生成隧道 JSON 配置文件。
- 运行 cloudflared tunnel route dns 隧道名 argo.example.com, 生成cname记录,可以随意指定二级域名。
- 重复运行上面两步,可配置多个隧道。
- 部署时将 JSON 隧道配置文件内容、域名填入对应变量。
- Heroku Dyno 休眠后,无法通过 Argo 隧道唤醒,保持长期运行建议使用 uptimerobot 之类网站监测服务定时 http ping xxx.herokuapp.com 或者 Cloudflare Workers 反代域名的地址。