parent
16ba760868
commit
96ed46b2dc
|
@ -0,0 +1,158 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
V2Ray Docker 管理脚本
|
||||
|
||||
功能描述:
|
||||
该脚本用于管理 V2Ray Docker 容器的安装、配置以及删除操作。用户可以通过输入操作命令来实现以下功能:
|
||||
|
||||
1. **安装 (install)**:
|
||||
- 根据给定的服务器信息列表,为每个服务器生成对应的 V2Ray 配置文件,并启动 Docker 容器。
|
||||
- 配置文件包括 V2Ray 的 `inbounds` 和 `outbounds` 设置,使用 WebSocket 协议。
|
||||
- 每个 Docker 容器的端口号从 9001 开始递增。
|
||||
|
||||
2. **删除 (remove)**:
|
||||
- 根据给定的服务器信息列表,停止并删除 Docker 容器,并删除相关的配置文件夹。
|
||||
- 清理 Docker 容器和配置目录,以便完全删除相关的配置和容器。
|
||||
|
||||
功能详情:
|
||||
- 配置文件目录:`/etc/v2ray{port}/config.json`
|
||||
- Docker 容器名称:`v2ray_{port}`
|
||||
- 每个服务器对应的端口号从 9001 开始递增。
|
||||
|
||||
依赖:
|
||||
- `Docker`:需要在系统中安装 Docker,脚本通过 Docker 命令来启动和删除容器。
|
||||
- `os` 和 `shutil` 模块:用于操作文件和目录。
|
||||
- `json` 模块:用于处理配置文件的 JSON 格式。
|
||||
|
||||
使用示例:
|
||||
1. 安装并配置 V2Ray:
|
||||
python v2ray_docker_manager.py install
|
||||
2. 删除已安装的 V2Ray 配置和 Docker 容器:
|
||||
python v2ray_docker_manager.py remove
|
||||
|
||||
作者:
|
||||
- 由用户定制的 V2Ray Docker 容器管理脚本
|
||||
|
||||
"""
|
||||
import os
|
||||
import json
|
||||
import shutil
|
||||
|
||||
def write_config(file_path, server_address, user, password, port):
|
||||
"""
|
||||
将格式化的 JSON 配置写入指定文件。如果文件的目录不存在,则创建该目录。
|
||||
|
||||
:param file_path: str,配置文件的路径
|
||||
:param server_address: str,服务器地址
|
||||
:param user: str,用户名
|
||||
:param password: str,密码
|
||||
:param port: int,端口号
|
||||
"""
|
||||
# 定义客户端 ID
|
||||
client_id = "2ee57806-f6e4-482a-ef08-7360c04cd3e5"
|
||||
|
||||
# 创建配置字典
|
||||
config = {
|
||||
"inbounds": [{
|
||||
"port": 9000,
|
||||
"protocol": "vless",
|
||||
"settings": {
|
||||
"clients": [{
|
||||
"id": client_id,
|
||||
"alterId": 64
|
||||
}],
|
||||
"decryption": "none"
|
||||
},
|
||||
"streamSettings": {
|
||||
"network": "ws",
|
||||
"wsSettings": {
|
||||
"path": "/"
|
||||
}
|
||||
}
|
||||
}],
|
||||
"outbounds": [{
|
||||
"protocol": "socks",
|
||||
"settings": {
|
||||
"servers": [{
|
||||
"address": server_address,
|
||||
"port": port,
|
||||
"users": [{
|
||||
"user": user,
|
||||
"pass": password
|
||||
}]
|
||||
}]
|
||||
}
|
||||
}]
|
||||
}
|
||||
|
||||
# 获取文件的目录路径
|
||||
dir_name = os.path.dirname(file_path)
|
||||
|
||||
# 如果目录不存在,则创建目录
|
||||
if dir_name and not os.path.exists(dir_name):
|
||||
os.makedirs(dir_name)
|
||||
|
||||
# 将配置写入文件
|
||||
with open(file_path, 'w', encoding='utf-8') as file:
|
||||
json.dump(config, file, ensure_ascii=False, indent=4)
|
||||
|
||||
def install_v2ray(server_info_list):
|
||||
"""
|
||||
安装并配置 V2Ray Docker 容器
|
||||
"""
|
||||
for server_info in server_info_list:
|
||||
# 使用冒号分割字符串
|
||||
server_address, server_port, user, password, port = server_info.split(':')
|
||||
|
||||
# 构建配置文件路径
|
||||
file_path = f'/etc/v2ray{port}/config.json'
|
||||
|
||||
# 写入配置
|
||||
write_config(file_path, server_address, user, password, int(server_port))
|
||||
|
||||
# 运行 Docker 容器
|
||||
docker_run_command = f'docker run -d -p {port}:9000 --name v2ray_{port} --restart=always -v /etc/v2ray{port}:/etc/v2ray teddysun/v2ray'
|
||||
os.system(docker_run_command)
|
||||
print(f"V2Ray 配置已写入 {file_path},并启动了 Docker 容器 v2ray_{port}。")
|
||||
|
||||
def remove_v2ray(server_info_list):
|
||||
"""
|
||||
删除 V2Ray Docker 容器及其配置文件
|
||||
"""
|
||||
for server_info in server_info_list:
|
||||
# 使用冒号分割字符串
|
||||
_, _, _, _, port = server_info.split(':')
|
||||
|
||||
# 删除 Docker 容器
|
||||
docker_stop_command = f'docker stop v2ray_{port} && docker rm v2ray_{port}'
|
||||
os.system(docker_stop_command)
|
||||
|
||||
# 删除配置文件
|
||||
config_dir = f'/etc/v2ray{port}'
|
||||
if os.path.exists(config_dir):
|
||||
shutil.rmtree(config_dir)
|
||||
print(f"已删除 Docker 容器 v2ray_{port} 和配置目录 {config_dir}。")
|
||||
else:
|
||||
print(f"未找到配置目录 {config_dir},跳过删除。")
|
||||
|
||||
# 示例用法
|
||||
if __name__ == "__main__":
|
||||
# 定义服务器信息列表
|
||||
server_info_list = [
|
||||
"38.33.77.252:17888:666666:666666:9001",
|
||||
"38.6.101.39:17888:666666:666666:9002",
|
||||
"38.6.126.202:17888:666666:666666:9003",
|
||||
"38.6.102.89:17888:666666:666666:9004",
|
||||
"38.6.103.77:17888:666666:666666:9005",
|
||||
"38.33.74.197:17888:666666:666666:9006",
|
||||
]
|
||||
|
||||
action = input("请输入操作 (install / remove): ").strip().lower()
|
||||
|
||||
if action == "install":
|
||||
install_v2ray(server_info_list)
|
||||
elif action == "remove":
|
||||
remove_v2ray(server_info_list)
|
||||
else:
|
||||
print("无效的操作。请输入 'install' 或 'remove'。")
|
Loading…
Reference in New Issue