需要在服务器构建如下目录结构:
sing-box
├── data
├── config.json
├── entry.sh
└── tls
└── docker-compose.yml
其中,data/config.json
是sing-box
的配置文件,所有节点配置信息都在里面。
data/entry.sh
是容器启动脚本。
tls文件夹用于存储tls证书,sing-box
可以自动颁发证书,你也可以使用自己现有的证书。如果自动颁发,就空文件夹就行,运行后该目录下会生成证书文件;如果要使用现有证书,可以将证书拷贝到当前文件夹下。
docker-compose.yml
参考内容如下:
version: '3'
services:
sing-box:
image: ghcr.io/sagernet/sing-box
container_name: sing-box
restart: unless-stopped
network_mode: "host"
# ports:
# - 80:80
# - 443:443
# - 8080:8080
# - 8090:8090
# - 10080-10099:10080-10099/udp
volumes:
- ./data:/data
- ./tls:/tls
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
entrypoint: ["/bin/bash", "/data/entry.sh"]
其中,网络模式使用了network_mode: "host"
,直接使用了宿主机的网络环境,需要关闭宿主机的防火墙,命令如下:
# CentOS:
systemctl disable firewalld
# Debian/Ubuntu:
sudo ufw disable
如果host模式
有问题,也可以切换到指定ports模式(注释掉network_mode
,然后删掉下方prots的注释)
参考内容如下:
#!/bin/bash
set -e
configFilePath="/data/config.json"
logFilePath="/data/sing-box.json"
echo "entry"
sing-box version
# https://sing-box.sagernet.org/configuration/
echo -e "\nconfig:"
sing-box check -c $configFilePath || cat $configFilePath
sing-box format -c /data/config.json -w
cat $configFilePath
echo -e "\nstarting"
sing-box run -c $configFilePath
tail -f $logFilePath
会输出sing-box
版本,检查并格式化配置文件,启动sing-box
,并追踪日志。
最关键的配置文件,参考内容如下:
{
"log": {
"level": "trace",
"output": "/data/sing-box.log",
"timestamp": true
},
"inbounds": [
{
"type": "vmess",
"tag": "vmess-in",
"listen": "0.0.0.0",
"listen_port": 8080,
"users": [
{
"name": "<proxy_name>",
"uuid": "<proxy_uuid>"
}
],
"multiplex": {
"enabled": true
},
"transport": {
"type": "ws",
"path": "/download",
"headers": {
"Host": "download.windowsupdate.com"
}
}
},
{
"type": "hysteria2",
"tag": "hy2-in",
"listen": "0.0.0.0",
"listen_port": 10080,
"users": [
{
"name": "<proxy_name>",
"password": "<proxy_pwd>"
}
],
"tls": {
"enabled": true,
"server_name": "<domain>",
"alpn": ["h3","h2","http/1.1"],
"acme": {
"domain": "<domain>",
"data_directory": "/tls",
"default_server_name": "<domain>",
"email": "<email>"
}
}
},
{
"type": "naive",
"tag": "naive-in",
"listen": "0.0.0.0",
"listen_port": 8090,
"domain_strategy": "ipv4_only",
"users": [
{
"username": "<proxy_name>",
"password": "<proxy_pwd>"
}
],
"network": "tcp",
"tls": {
"enabled": true,
"server_name": "<domain>",
"acme": {
"domain": "<domain>",
"data_directory": "/tls",
"default_server_name": "<domain>",
"email": "<email>"
}
}
}
]
}
其中,有几处需要替换的地方:
<proxy_uuid>
替换为代理的uuid,自己取,可以找网站在线生成<proxy_name>
替换为代理的用户名,自己取,如Ray
<proxy_pwd>
替换为代理的密码,自己取,如1234@qwer
<domain>
替换为域名<email>
替换为邮箱
如上就配置了三个节点,一个8080端口的vmess+ws节点,一个基于udp的10080端口的hysteria2
节点,一个基于tcp的8090端口的naive
节点。
如果你的云上有安全策略,请确保这几个端口都开放了。
证书的话,如果tls目录下没有现有证书,会自动颁发。
其他配置可以查阅官方文档了解。
在docker-compose.yml
同级目录下,执行:
docker compose up -d
等待容器启动。
如果一切正常,就是启动成功,可以去使用自己的客户端连接了。(就是这么简单)
其他参考指令:
# 查看当前运行中的容器
docker ps
# 查看容器启动日志
docker logs sing-box
# 追踪容器运行日志(使用Ctrl C退出追踪)
docker logs -f sing-box
# 进入容器
docker exec -it sing-box bash