├── .github └── workflows │ └── koyeb.yml ├── Dockerfile ├── README.md ├── entrypoint.sh └── nginx.conf /.github/workflows/koyeb.yml: -------------------------------------------------------------------------------- 1 | name: "Build and push images" 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | Building: 8 | runs-on: ubuntu-latest 9 | name: "Build V2ray images" 10 | env: 11 | DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} 12 | DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} 13 | DOCKERHUB_REPOSITORY: ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO }}:latest 14 | 15 | steps: 16 | - name: Set up QEMU 17 | uses: docker/setup-qemu-action@v2.2.0 18 | 19 | - name: Set up Docker Buildx 20 | uses: docker/setup-buildx-action@v2.10.0 21 | 22 | - name: Login to DockerHub 23 | uses: docker/login-action@v2.2.0 24 | with: 25 | username: ${{ env.DOCKER_USERNAME }} 26 | password: ${{ env.DOCKER_PASSWORD }} 27 | 28 | - name: Build and push images to Docker hub 29 | uses: docker/build-push-action@v4.1.1 30 | with: 31 | push: true 32 | platforms: linux/amd64 33 | tags: ${{ env.DOCKERHUB_REPOSITORY }} 34 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:latest 2 | EXPOSE 80 3 | WORKDIR /app 4 | USER root 5 | 6 | COPY nginx.conf /etc/nginx/nginx.conf 7 | COPY entrypoint.sh ./ 8 | 9 | RUN apt-get update && apt-get install -y wget unzip iproute2 systemctl &&\ 10 | wget -O temp.zip $(wget -qO- "https://api.github.com/repos/v2fly/v2ray-core/releases/latest" | grep -m1 -o "https.*linux-64.*zip") &&\ 11 | unzip temp.zip v2ray geoip.dat geosite.dat &&\ 12 | mv v2ray v &&\ 13 | rm -f temp.zip &&\ 14 | chmod -v 755 v entrypoint.sh &&\ 15 | echo 'ewogICAgImxvZyI6ewogICAgICAgICJsb2dsZXZlbCI6Indhcm5pbmciLAogICAgICAgICJhY2Nl\ 16 | c3MiOiIvZGV2L251bGwiLAogICAgICAgICJlcnJvciI6Ii9kZXYvbnVsbCIKICAgIH0sCiAgICAi\ 17 | aW5ib3VuZHMiOlsKICAgICAgICB7CiAgICAgICAgICAgICJwb3J0IjoxMDAwMCwKICAgICAgICAg\ 18 | ICAgInByb3RvY29sIjoidm1lc3MiLAogICAgICAgICAgICAibGlzdGVuIjoiMTI3LjAuMC4xIiwK\ 19 | ICAgICAgICAgICAgInNldHRpbmdzIjp7CiAgICAgICAgICAgICAgICAiY2xpZW50cyI6WwogICAg\ 20 | ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgImlkIjoiVVVJRCIsCiAg\ 21 | ICAgICAgICAgICAgICAgICAgICAgICJhbHRlcklkIjowCiAgICAgICAgICAgICAgICAgICAgfQog\ 22 | ICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAic3RyZWFtU2V0dGlu\ 23 | Z3MiOnsKICAgICAgICAgICAgICAgICJuZXR3b3JrIjoid3MiLAogICAgICAgICAgICAgICAgIndz\ 24 | U2V0dGluZ3MiOnsKICAgICAgICAgICAgICAgICAgICAicGF0aCI6IlZNRVNTX1dTUEFUSCIKICAg\ 25 | ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAg\ 26 | ICAgICAicG9ydCI6MjAwMDAsCiAgICAgICAgICAgICJwcm90b2NvbCI6InZsZXNzIiwKICAgICAg\ 27 | ICAgICAgImxpc3RlbiI6IjEyNy4wLjAuMSIsCiAgICAgICAgICAgICJzZXR0aW5ncyI6ewogICAg\ 28 | ICAgICAgICAgICAgImNsaWVudHMiOlsKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg\ 29 | ICAgICAgICAgICAgICJpZCI6IlVVSUQiCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg\ 30 | ICAgICAgXSwKICAgICAgICAgICAgICAgICJkZWNyeXB0aW9uIjoibm9uZSIKICAgICAgICAgICAg\ 31 | fSwKICAgICAgICAgICAgInN0cmVhbVNldHRpbmdzIjp7CiAgICAgICAgICAgICAgICAibmV0d29y\ 32 | ayI6IndzIiwKICAgICAgICAgICAgICAgICJ3c1NldHRpbmdzIjp7CiAgICAgICAgICAgICAgICAg\ 33 | ICAgInBhdGgiOiJWTEVTU19XU1BBVEgiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0K\ 34 | ICAgICAgICB9CiAgICBdLAogICAgIm91dGJvdW5kcyI6WwogICAgICAgIHsKICAgICAgICAgICAg\ 35 | InByb3RvY29sIjoiZnJlZWRvbSIsCiAgICAgICAgICAgICJzZXR0aW5ncyI6ewoKICAgICAgICAg\ 36 | ICAgfQogICAgICAgIH0KICAgIF0sCiAgICAiZG5zIjp7CiAgICAgICAgInNlcnZlcnMiOlsKICAg\ 37 | ICAgICAgICAgIjguOC44LjgiLAogICAgICAgICAgICAiOC44LjQuNCIsCiAgICAgICAgICAgICJs\ 38 | b2NhbGhvc3QiCiAgICAgICAgXQogICAgfQp9Cg==' > config 39 | 40 | ENTRYPOINT [ "./entrypoint.sh" ] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # V2ray for Koyeb 2 | 3 | * * * 4 | 5 | # 目录 6 | 7 | - [项目特点](README.md#项目特点) 8 | - [部署](README.md#部署) 9 | - [鸣谢下列作者的文章和项目](README.md#鸣谢下列作者的文章和项目) 10 | - [鸣谢项目赞助商](README.md#鸣谢项目赞助商) 11 | - [免责声明](README.md#免责声明) 12 | 13 | * * * 14 | 15 | ## 项目特点: 16 | * 本项目用于在 Koyeb 免费服务上部署 V2ray ,采用的方案为 Nginx + WebSocket + VMess/VLess + TLS。 17 | * V2ray 核心文件和配置文件作了“特殊处理”,每个项目都不同,大大降低被封和连坐风险 18 | * vmess 和 vless 的 uuid,路径既可以自定义,又或者使用默认值 19 | * 集成哪吒探针,可以自由选择是否安装 20 | * 部署完成如发现不能上网,请检查域名是否被墙,可使用 Cloudflare CDN 或者 worker 解决。 21 | 22 | ## 部署: 23 | * 注册 [Koyeb.com](https://app.koyeb.com/auth/signin/) 24 | * [![Deploy to Koyeb](https://www.koyeb.com/static/images/deploy/button.svg)](https://app.koyeb.com/deploy?type=docker&name=v2r&ports=80;http;/&env[UUID]=de04add9-5c68-8bab-950c-08cd5320df18&env[NEZHA_SERVER]=server%20domain%20or%20ip&env[NEZHA_PORT]=server%20port&env[NEZHA_KEY]=agent%20key&image=docker.io/fscarmen/v2-koyeb) | 25 | * 可用到的变量 26 | | 变量名 | 是否必须 | 默认值 | 备注 | 27 | | ------------ | ------ | ------ | ------ | 28 | | UUID | 否 | de04add9-5c68-8bab-950c-08cd5320df18 | 可在线生成 https://www.zxgj.cn/g/uuid | 29 | | VMESS_WSPATH | 否 | /vmess | 以 / 开头 | 30 | | VLESS_WSPATH | 否 | /vless | 以 / 开头 | 31 | | NEZHA_SERVER | 否 | | 哪吒探针服务端的 IP 或域名 | 32 | | NEZHA_PORT | 否 | | 哪吒探针服务端的端口 | 33 | | NEZHA_KEY | 否 | | 哪吒探针客户端专用 Key | 34 | 35 | ![image](https://user-images.githubusercontent.com/92626977/211201128-8eb8c495-03b1-4837-b11d-db5d5cf37a10.png) 36 | ![image](https://user-images.githubusercontent.com/92626977/211201164-51917877-c672-4b62-9031-67b497fd0936.png) 37 | ![image](https://user-images.githubusercontent.com/92626977/211201178-386d8e2c-189b-40ba-a37f-ebcd4ae2be5e.png) 38 | ![image](https://user-images.githubusercontent.com/92626977/211201189-62649d0d-ebb0-42f4-946a-38dea2601b46.png) 39 | ![image](https://user-images.githubusercontent.com/92626977/211201196-3d7e59ae-3b55-42db-81ac-b324d60a0bb1.png) 40 | ![image](https://user-images.githubusercontent.com/92626977/211201217-6a5c9493-4aa9-4c68-9cba-966893617ab0.png) 41 | 42 | ## 鸣谢下列作者的文章和项目: 43 | * ifeng 的 v2ray 项目,在此基础上作修改 https://www.hicairo.com https://github.com/hiifeng 44 | 45 | ## 鸣谢项目赞助商 46 | * 感谢[YXVM](https://yxvm.com/aff.php?aff=764)提供赞助 47 | * [NodeSupport](https://github.com/NodeSeekDev/NodeSupport) 48 | 49 | ## 免责声明: 50 | * 本程序仅供学习了解, 非盈利目的,请于下载后 24 小时内删除, 不得用作任何商业用途, 文字、数据及图片均有所属版权, 如转载须注明来源。 51 | * 使用本程序必循遵守部署免责声明。使用本程序必循遵守部署服务器所在地、所在国家和用户所在国家的法律法规, 程序作者不对使用者任何不当行为负责。 52 | -------------------------------------------------------------------------------- /entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # 定义 UUID 及 伪装路径,请自行修改.(注意:伪装路径以 / 符号开始,为避免不必要的麻烦,请不要使用特殊符号.) 4 | base64 -d config > config.json 5 | UUID=${UUID:-'de04add9-5c68-8bab-950c-08cd5320df18'} 6 | VMESS_WSPATH=${VMESS_WSPATH:-'/vmess'} 7 | VLESS_WSPATH=${VLESS_WSPATH:-'/vless'} 8 | sed -i "s#UUID#$UUID#g;s#VMESS_WSPATH#${VMESS_WSPATH}#g;s#VLESS_WSPATH#${VLESS_WSPATH}#g" config.json 9 | sed -i "s#VMESS_WSPATH#${VMESS_WSPATH}#g;s#VLESS_WSPATH#${VLESS_WSPATH}#g" /etc/nginx/nginx.conf 10 | 11 | # 伪装 v2ray 执行文件 12 | RELEASE_RANDOMNESS=$(tr -dc 'A-Za-z0-9' config 15 | rm -f config.json 16 | 17 | # 如果有设置哪吒探针三个变量,会安装。如果不填或者不全,则不会安装 18 | TLS=${NEZHA_TLS:+'--tls'} 19 | [ -n "${NEZHA_SERVER}" ] && [ -n "${NEZHA_PORT}" ] && [ -n "${NEZHA_KEY}" ] && wget https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh -O nezha.sh && chmod +x nezha.sh && echo '0' | ./nezha.sh install_agent ${NEZHA_SERVER} ${NEZHA_PORT} ${NEZHA_KEY} ${TLS} 20 | 21 | # 运行 nginx 和 v2ray 22 | nginx 23 | base64 -d config > config.json 24 | ./${RELEASE_RANDOMNESS} run -------------------------------------------------------------------------------- /nginx.conf: -------------------------------------------------------------------------------- 1 | 2 | user nginx; 3 | worker_processes auto; 4 | 5 | error_log /var/log/nginx/error.log notice; 6 | pid /var/run/nginx.pid; 7 | 8 | 9 | events { 10 | worker_connections 1024; 11 | } 12 | 13 | 14 | http { 15 | include /etc/nginx/mime.types; 16 | default_type application/octet-stream; 17 | 18 | log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 19 | '$status $body_bytes_sent "$http_referer" ' 20 | '"$http_user_agent" "$http_x_forwarded_for"'; 21 | 22 | access_log /var/log/nginx/access.log main; 23 | 24 | sendfile on; 25 | #tcp_nopush on; 26 | 27 | keepalive_timeout 65; 28 | 29 | #gzip on; 30 | 31 | #include /etc/nginx/conf.d/*.conf; 32 | 33 | server { 34 | listen 80 default_server; 35 | listen [::]:80 default_server; 36 | 37 | server_name _; 38 | charset utf-8; 39 | root html; 40 | 41 | location / { 42 | root /usr/share/nginx/html; 43 | index index.html index.htm; 44 | } 45 | 46 | location VMESS_WSPATH { 47 | proxy_redirect off; 48 | proxy_pass http://127.0.0.1:10000; 49 | proxy_http_version 1.1; 50 | proxy_set_header Upgrade $http_upgrade; 51 | proxy_set_header Connection upgrade; 52 | proxy_set_header Host $http_host; 53 | } 54 | 55 | location VLESS_WSPATH { 56 | proxy_redirect off; 57 | proxy_pass http://127.0.0.1:20000; 58 | proxy_http_version 1.1; 59 | proxy_set_header Upgrade $http_upgrade; 60 | proxy_set_header Connection upgrade; 61 | proxy_set_header Host $http_host; 62 | } 63 | } 64 | } 65 | --------------------------------------------------------------------------------