所用构件:
- Traefik: SSL 部份交由Traefik 控制 ,查看【Traefik的配置文件】
- V2ray镜像:使用镜像,alphacodinghub/v2ray-nginx,镜像自带nginx配置
一、创建文件目录
#进相应文件夹
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的位置:
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"
。
注意:
config.json
这里的配置信息要中,alertId的值要改成0,否则按步骤配置会显示错误。想了解具体原因,请参考V2ray配置测试文章:V2ray 出现 “failed to process outbound traffic”解决办法, 文章有详细说明改值的原因,以及更改步骤。
注意,上面代码已把值改好为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"
PS:图片是以前截的,对应位置修改即可。
文章结构作出重大修改,统一改用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;
}
}