如果已不再使用Heroku,可以直接看自行部署运行。
Starting October 26, 2022, we will begin deleting inactive accounts and associated storage for accounts that have been inactive for over a year. Starting November 28, 2022, we plan to stop offering free product plans and plan to start shutting down free dynos and data services. We will be sending out a series of email communications to affected users.
貌似新建的app有些需要科学访问,如果需要,请使用cloudflare worker CDN 或者 cloudflare tunnel 套一层。
切换到最新的 VLESS 协议。具体客户端配置请看 config 章节。
v2ray-heroku 是我为了体验 github action 的产物,也是我的主力 backup,我会日常维护它。加入或者修改一些我认为好的配置。但这一般会导致客户端配置需要些许修改。 不过具体配置都会体现在 详细 VLESS websocket 客户端配置
有问题请开 issue 或者 discussions。
很多人反馈 heroku 封号,我自己的还好用,请大家反馈,如果大部分人都被封号,那么就没有办法了,其他的免费的我试了 Okteto Cloud, 秒封。
应需求,加上首页伪装,每次部署都会随机生成首页,如果你有想法,请自己把想要的html放入到 项目html 文件,然后后续 action 部署会自动拿到。
首先查看别人的 youtube 教程,了解怎么配置 v2ray-heroku。本项目使用最新 VLESS 协议,请在客户端配置选择 VLESS。
详细 VLESS websocket 客户端配置 。
如果你还想自动化你的 heroku,请查看下面的教程。
本项目是包含,
-
一键部署 V2ray 到 heroku。
-
支持 heroku 的区域(us 和 eu)
-
利用 cloudflare CDN 进行加速。
-
利用 cloudflare tunnel 进行加速。
-
随机生成首页。每次部署都会产生随机首页。
- 如想自定义主页,请自行在仓库中生成 index.html 放入
html
中
- 如想自定义主页,请自行在仓库中生成 index.html 放入
项目Dockerfile是基于V2fly 官方镜像制作。仅仅增加生产配置文件的脚本。重新部署就可以更新到最新的v2ray。
基于官方镜像,这也是v2fly 推荐的做法。
保持安全最简单的方式就是,保持软件更新。
貌似在这个 repo 下 点击 一键部署貌似 heroku 提示违反某些原则,但是action 正常工作!!建议 fork 时候,项目名字,尽量不要带有 v2ray 关键字。
如果被heroku 提示错误,请用 github action 来部署。
部署成功后,可以先用浏览器访问 ***.herokuapp.com, 查看页面是否能正常访问。会显示一个随机的维基百科页面。
请 Fork 本项目到自己的账户下。 Actions 需要以下 Secrets 才能正常工作,这些 Secrets 会被 workflow 中的 akhileshns/heroku-deploy 使用。
具体实现细节,请查看 workflow 配置文件. 如何配置, 请查看,Github Secrets
Name | Description |
---|---|
APP_NAME | 就是你 heroku 项目的名字. 如果你是第一次创建APP,请确保名字是唯一的 |
heroku 账户的 email | |
HEROKU_API_KEY | heroku API key,在 account 设置下可以找到 |
HEROKU_V2RAY_UUID | V2rayUUID |
HEROKU_TUNNEL_TOKEN | 可选 cloudflare tunnel 的 token |
这样Token一定必须是大写。。请在 heroku 网站创建app,来确保项目的名字的唯一性。
HEROKU_TUNNEL_TOKEN 是可选项,可以忽略. 详细说明,请查看章节 《建立-cloudflare-tunnel-(可选)》
请务必生成新的 UUID。使用已有的 UUID 会使自己 V2ray 暴露在危险之下。
PowerShell:
PS C:\Users\> New-Guid
Shell:
xxx@xxx:/mnt/c/Users/$ uuidgen
路径
项目Setting-->Secrets
路径
heroku Account settings-->API key
Actions
点击 Run workflow
, 输入 deploy。 然后就会重新 deploy。
这里可以选择区域,但是请确保app没有被创建过。如果要切换区域,请先使用 destroy 删除应用。
点击 Run workflow
, 输入 stop。 然后就会 stop,不在计入小时数。
点击 Run workflow
, 输入 start。 然后就会启动。
点击 Run workflow
, 输入 destroy 然后就会删除。
如果遇到创建的app在正常网络下不能访问,请尝试这个。
可以参考 开头的视频。代码如下。
const targetHost = "xxx.herokuapp.com"; //你的heroku的hostname
addEventListener("fetch", (event) => {
let url = new URL(event.request.url);
url.hostname = targetHost;
let request = new Request(url, event.request);
event.respondWith(fetch(request));
});
// herokuapp 如果长时间不访问就会休眠。增加cron事件监听器以支持定时job访问herokuapp url。
addEventListener('scheduled', event => {
event.waitUntil(
handleSchedule(event)
)
})
async function handleSchedule(event) {
let url = new URL("https://" + targetHost);
url.hostname = targetHost;
let request = new Request(url);
const resp = await fetch(request);
//console.log(await resp.text());
}
然后添加Worker的触发器以定时访问herokuapp url:
如果 worker 不好用,请用自己域名代理 worker https://owo.misaka.rest/cf-workers-ban-solution/
为 worker 选择速度更快的 IP。 https://github.com/badafans/better-cloudflare-ip
项目集成 cloudflare tunnel, 在配置 Secrets HEROKU_TUNNEL_TOKEN
之后生效。具体怎么配置,请查看 cloudflare tunnel。
文档介绍: https://docs.github.com/en/actions/deployment/using-environments-for-deployment
"outbounds": [
{
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "***.herokuapp.com", // heroku app URL 或者 cloudflare worker url/ip
"port": 443,
"users": [
{
"id": "", // 填写你的 UUID
"encryption": "none"
}
]
}
]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"serverName": "***.herokuapp.com" // heroku app host 或者 cloudflare worker host
}
}
}
]
"outbounds": [
{
"tag": "proxy",
"protocol": "vless",
"settings": {
"vnext": [{
"address": "******", // 服务器端地址
"port": 8443,
"users": [{
"id": "", // 填写你的 UUID
"security": "auto",
"encryption": "none",
"flow": "xtls-rprx-vision"
}
]
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"allowInsecure": true,
"alpn": [
"h2"
],
"fingerprint": "chrome",
"show": false
}
},
}
]
换成 V2rayN
别人的配置教程参考,https://v2raytech.com/v2rayn-config-tutorial/.
cloudflare worker ip 配置
本项目是一个基于 Docker 的 Caddy + V2Ray + acme.sh 自动证书申请工具的部署方案。使用 Docker Compose 编排 Caddy+V2Ray 和 acme.sh 两个容器,并自动配置 HTTPS 访问。
- Linux系统
- 已安装 Docker 和 Docker Compose
- 已在 Cloudflare 中添加域名,并取得相应的 API Token 和 Account ID
-
在当前用户home目录下创建acme目录。
mkdir ~/acme
-
复制
acme_env.sh.sample
文件到~/acme目录并重命名为acme_env.sh
:cp acme_env.sh.sample ~/acme/acme_env.sh
-
修改
~/acme/acme_env.sh
文件,填入您的邮箱、域名(多个域名以逗号分隔)、Cloudflare API Token 和 Account ID。如果您已经有一个 UUID,请将其填入UUID
变量中;否则,可以留空,脚本将自动生成一个 UUID,并显示在log中。TCP_PORT用于设置v2ray TCP连接的端口号,不设置的话默认使用8443端口。 -
构建镜像:
./docker_build.sh
-
运行容器:
./docker_compose.sh
-
完成以上步骤后,Caddy 和 V2Ray 会自动启动,并监听 80、443 (websocket) 和 8443 (tcp) 端口,同时 acme.sh 会自动申请证书并配置 HTTPS 访问。
- 若要禁用自动申请证书,删除或注释掉
~/acme/acme_env.sh
中的DOMAIN
变量即可。-
如果您已经有可用的证书文件,请提前将其放置到
~/acme/caddy_v2ray-cert
目录下,命名为Caddyfile_https
文件中期待的文件名:privkey.pem
: 证书的私钥。fullchain.pem
: 浏览器需要的完整证书链,包括公钥、元数据、根证书和中间证书等 ( Root CA -> Sub CA -> your cert )。
这样将会使用您所提供的证书。
-
如果没有证书,将禁用https,以http的方式运行在80端口。
-
- 如果您使用的不是 Cloudflare,可以修改
docker_compose.sh
文件中的--dns
参数以适配您的 DNS 服务商,并在acme_env.sh
中设置好相应的环境变量。 - Cloudflare 现已不支持
.tk .cf .ml
等免费域名后缀使用此 DNS API 验证方式,付费域名才受支持。如果您的域名属于这种情况,请修改docker_compose.sh
文件中的--issue
命令改用standalone
等其他方式获取证书。或自行获取证书,然后按上述说明引入证书文件。acme.sh
使用standalone
方式获取证书命令示例:- http 模式(使用80端口):
docker exec acme.sh --issue --standalone -d example.com
- tls 模式(使用443端口):
docker exec acme.sh --issue --standalone --alpn -d example.com
- http 模式(使用80端口):
- 如果您需要更改 Caddy 的配置,请修改
Caddyfile_https
或Caddyfile_http
文件,以及startup.sh
启动脚本,然后重新构建镜像。 - 如果您需要更改 V2Ray 的配置,请修改
config.json.tp
文件,然后重新构建镜像。