Docker 搭建Trojan-go

一、安装脚本文件

root用户ssh连接到主机,使用下面命令安装脚本:

以Debian系为例,升级源并安装软件

1
apt-get update && apt-get install -y wget vim socat

安装ACME脚本

1
wget -qO- get.acme.sh | bash

让别名生效,此后无论在哪里直接使用acme.sh,不用输绝对路径

1
source ~/.bashrc

二、配置证书

2.1 获取Cloudflare api key

注册好cloudflare账号,把域名dns的解析权限交给cloudflare处理,这样以后只需要在cloudflare这里配置解析记录。按照图示获取cloudflare api key

2.2 申请证书(二选一)

这里假定你的域名是yourdomain.com,执行下面命令申请证书:

2.2.1 dns方式验证

1
2
3
4
export CF_Key="slfjksjffjfhfhkjhfksjf"
export CF_Email="yourcloudflare@gmail.com"

acme.sh --issue --dns dns_cf -d yourdomain.com -d *.yourdomain.com -k ec-256

说明:Cloudflare现已不支持.tk .cf .ml等免费申请来的域名后缀使用此dns验证方式,付费域名才受支持,免费域名使用下面2.2.2方式。脚本申请到的证书和key都放在~/.acme.sh/yourdomain.com_ecc目录下。

2.2.2 http方式验证

执行下面命令前请保证你80端口没有被别的程序使用,如果有,kill掉,执行下面命令前需要你先在cloudflare dns那里添加好A记录,可以开启cloudflare cdn(cdn对此http方式验证无影响):

1
acme.sh --issue --standalone -d yourdomain.com -d *.yourdomain.com -k ec-256

说明:跟上面一样,脚本申请到的证书放在~/.acme.sh/yourdomain.com_ecc目录下

1.3 安装证书到指定位置

1
2
3
4
5
# 创建trojan-go目录
mkdir /etc/trojan-go

# 安装证书和私钥到指定位置
acme.sh --installcert -d yourdomain.com -d *.yourdomain.com --fullchain-file /etc/trojan-go/trojan-go.crt --key-file /etc/trojan-go/trojan-go.key --ecc

三、安装配置Caddy

3.1 安装caddy

1
2
3
4
5
# 下载然后重命名放到/usr/bin目录下,这里感谢秋水逸冰释出的编译成果
wget -O /usr/bin/caddy https://dl.lamp.sh/files/caddy_linux_amd64

# 赋予权限
chmod 755 /usr/bin/caddy

说明:之前给出的安装caddy的脚本好像已经不能用了,里面caddy1的下载链接404了,这里使用秋水逸冰编译好的caddy1版本,具体使用方法还跟之前一样。

3.2 创建caddy的配置文件

3.2.1 创建caddy目录

创建caddy目录并切换至此

1
mkdir /root/caddy && cd /root/caddy

3.2.2 创建caddy配置文件Caddyfile

1
2
3
4
5
6
7
8
9
vim Caddyfile #创建并开始编辑文件

#以下是文件内容,请稍作修改后添加至文件
0.0.0.0:80 {
gzip
log /root/caddy/caddy.log
proxy / http://baidu.com
}
#以上是文件内容,请稍作修改后添加至文件

说明:此处用proxy / http://baidu.com来反代别的网站,你也可以去掉此行,用root /path/to/website来指定网站根目录。

3.3 注册caddy服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cd /etc/systemd/system && vim caddy.service #切换到此目录下,创建并开始编辑服务文件

#以下是文件内容,请添加至文件
[Unit]
Description=Caddy Service
After=network.target

[Service]
ExecStart=/usr/bin/caddy -conf /root/caddy/Caddyfile
Restart=on-abort
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target
#以上是文件内容,添加至文件

systemctl daemon-reload #重载守护进程
systemctl start caddy #启动caddy.service服务
systemctl status caddy #查看caddy服务运行状况
systemctl enable caddy #将此服务加入开机自启动

四、用docker启动trojan服务

4.1 安装配置docker

以root用户执行下面命令安装docker

1
2
3
4
5
6
7
8
9
10
11
#安装docker
wget -qO- get.docker.com | bash

#启动docker服务
systemctl start docker
#查看docker运行状态
systemctl status docker
#查看docker版本
docker -v
#将docker服务加入开机自启动
systemctl enable docker

4.2 拉取trojan-go镜像

1
docker pull teddysun/trojan-go

4.3 创建trojan-go服务端配置文件

4.3.1 切换到trojan-go目录并开始编辑配置文件

1
cd /etc/trojan-go && vim config.json

4.3.2 编辑配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"run_type": "server",
"local_addr": "0.0.0.0",
"local_port": 443,
"remote_addr": "127.0.0.1",
"remote_port": 80,
"password": [
"your_awesome_password"
],
"ssl": {
"cert": "/etc/trojan-go/trojan-go.crt",
"key": "/etc/trojan-go/trojan-go.key",
"sni": "www.your-awesome-domain-name.com"
}
}

说明:password可以设置多个,方便多用户使用,关于具体的配置文件,trojan项目给出了详细的解释:点我直达

4.4 启动docker容器

1
docker run -d --name trojan-go --restart always --net host -v /etc/trojan-go:/etc/trojan-go teddysun/trojan-go

说明:这里使用--net host指定容器使用宿主机网络,为的是让其访问127.0.0.1是访问服务端,是转发数据到caddy。也有另外一种方法,这里不用--net host,使用-p 443:443映射443端口,但是在上一步的配置文件里需要修改"remote_addr":"127.0.0.1",将其改为"remote_addr":"你的服务器IP"