所用构件

一、创建文件目录

#进相应文件夹
mkdir v2ray
cd v2ray
touch docker-compose.yml
mkdir nginxconf
mkdir nginxconf/conf.d
touch nginxconf/conf.d/default.conf
mkdir v2rayconf
touch v2rayconf/config.json

二、V2ray相关配置

1. docker-compose.yml

nano docker-compose.yml,复制代码并修改 port, 与下面 nginx 的default.conf配置对应
version: '3.7'

services:
  v2ray:
    image: alphacodinghub/v2ray-nginx
    expose:
      - port
    container_name: v2ray
    volumes:
      - ./conf/html:/var/www/html
      - ./nginxconf/conf.d:/etc/nginx/conf.d
      - ./v2rayconf:/etc/v2ray
    networks:
      - proxy
    restart: always

networks:
  proxy:
    external: true

配置解释:

这是拉起V2ray容器的 docker-compose配置文件,重点关注以下几点:

  • expose -port --> 暴露端口级Traefik 导流。随便设个没被使用的端口,如 expose -12201
  • /conf/html --> v2ray容器中默认的 html访问目录,端口对应失败会默认显示html目录下的index.html。
  • /nginxconf/conf.d --> 对访问流量分流的 nginx配置,默认设置为 default.conf
  • /v2rayconf --> 存放v2ray服务器端的配置文件,这里默认为config.json

2. default.conf

nano nginxconf/conf.d/default.conf,复制代码并修改 port 和 v2ray 分发路径 /path
server {
    server_name yourdomain.com;
    listen 80;

    location / {
        root   /var/www/html;
        index  index.html index.htm;
    }

    location /path { // change yourpath
        proxy_redirect off;
        proxy_pass http://127.0.0.1:port; //change your listen port
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
    }

    location ~ \.php$ {
        deny all;
    }
}

配置解释:

这是容器的nginx配置文件,需要关注以下内容

  • proxy_pass http://127.0.0.1:port,修改port为docker-compose.yml文件里的 expose port,如上面例子,端口是12201,那么设置可以写成如下内容:proxy_pass http://127.0.0.1:12201
  • server_name yourdomain.com;,修改这里的youdomain.com为客户端的地址,也就是 v2rayN里设置的访问地址,下图2的位置

    Traefik 快速部署V2ray+WS+TLS

3. config.json

nano v2rayconf/config.json, 复制代码并修改 port 和 v2ray 分发路径 /path,与上面文件对应

{
  "log": {
    //"access": "/var/log/v2ray/access.log",
    //"error": "/var/log/v2ray/error.log",
    "access": "",
    "error": "",
    "loglevel": "debug"
  },
  "inbound": {
    "port": port,  //v2ray listen port
    "listen": "127.0.0.1",
    "protocol": "vmess",
    "settings": {
      "clients": [
        {
          "id": "uuid", // your own uuid
          "alterId": 0 //原值是64,2023年3月10日更新,改值为0
        }
      ]
    },
    "streamSettings": {
      "network": "ws",
      "wsSettings": {
        "path": "/path" //v2ray path
      }
    }
  },
  "outbound": {
    "protocol": "freedom",
    "settings": {}
  }
}

配置解释:

这是V2ray的服务器端配置文件,自行对应客户端的配置,也就是 上图V2rayN的配置。重点修改以下几点:

  • "port": port, 修改对应的端口,注意里不是客户端的端口,而是服务器的端口,沿用上面例子: "port": 12201,
  • "id": "uuid", ,对应的是客户端的用户ID(id)也就是上图的3位置,例:"id": "15ccc3e1-dc14-4121-138f-1819ef8s0c84",
  • "path": "/path",对应客户端的路径(path),也就是图上图的5位置,例:"path": "/productsall"
配置文件已于2023.3.5有所更新,旧配置需同步更新方能正常使用

注意,上面代码已把值改好为0,不用担心出现文章中所说的错误提示,导致V2ray无法连接。

三、Traefik 配置:

A、找出V2ray 容器的服务地址

  • 启动v2ray

docker-compose up -d

  • 查看容器运行情况

docker ps

root@localhost:~/v2ray# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED         STATUS                  PORTS                                      NAMES
0fdfb4931b21   alphacodinghub/v2ray-nginx   "/entrypoint.sh /usr…"   9 seconds ago   Up 8 seconds            80/tcp, 13308/tcp                          v2ray
  • 查找V2ray 内部地址:

docker inspect --format='{{.NetworkSettings.Networks.proxy.IPAddress}}' v2ray

root@localhost:~/v2ray# docker inspect --format='{{.NetworkSettings.Networks.proxy.IPAddress}}'  v2ray
172.18.0.4

找到IP为 172.18.0.4;

B、配置Traefik动态文件Docker file

vi /root/traefik2/data/configurations/dynamic.yml,增加 router 和service 并修改网址和服务地址

增加router和service

  • Routers :
    # Roter3:  v2ray
    v2ray:
      entryPoints:
        - "websecure"
      service: v2ray-service
      rule: "Host(`yourdomain.com`)"
  • Service:
     # service2:  v2ray
      v2ray-service:
        loadBalancer:
          servers:
          -  url: "http://172.18.0.4"

Traefik 快速部署V2ray+WS+TLS

PS:图片是以前截的,对应位置修改即可。

2021.3.18 更新

文章结构作出重大修改,统一改用docker@file动态控制routers、middlewares、services,实现类似电脑USB的热插拔功能,基本实现按顺序一步一步复制代码即可使用的状态。

写在最后

1.容器相关文件结构解释

查看镜像的dockerfile可见:

# configure Nginx
COPY docker-conf/nginx.conf /etc/nginx/
COPY docker-conf/default.conf /etc/nginx/conf.d/
# configure supervisord
COPY docker-conf/supervisord.conf /etc/supervisor/conf.d/supervisord.conf

#  web content volume
VOLUME /var/www/html
WORKDIR /var/www/html
COPY docker-conf/html/* /var/www/html/
RUN chown -R www-data.www-data /var/www
  • 镜像内,nginx配置文件位于:
/etc/nginx/
  • 镜像内,webdir位置
/var/www/html

2.如何修改相关配置文件

部署后想修改V2ray 配置,需要同时修改 .conf 文件和 V2ray config.json文件
V2ray配置文件位置:~/conf/v2ray/config.json

{
  "log": {
    "access": "/var/log/v2ray/access.log",
    "error": "/var/log/v2ray/error.log",
    "loglevel": "debug"
  },
  "inbound": {
    "port": LISTENING_PORT,
    "listen": "127.0.0.1",
    "protocol": "vmess",
    "settings": {
      "clients": [
        {
          "id": "CLIENT_ID",
          "alterId": CLIENT_ALTERID
        }
      ]
    },
    "streamSettings": {
      "network": "ws",
      "wsSettings": {
        "path": "CLIENT_WSPATH"
      }
    }
  },
  "outbound": {
    "protocol": "freedom",
    "settings": {}
  }
}

nginx 配置文件位置:~/conf/conf.d/default.conf

server {
    server_name _;
    listen 80;

    location / {
        root   /var/www/html;
        index  index.html index.htm;
    }

    location CLIENT_WSPATH {
        proxy_redirect off;
        proxy_pass http://127.0.0.1:LISTENING_PORT;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
    }

    location ~ \.php$ {
        deny all;
    }
}