原作者:毕世平 https://shiping.date/66.html
本文以Debian10
发行版为例,介绍使用docker-compose
配置容器组,先后拉取teddysun/caddy
作为web服务器,取teddysun/trojan-go
作为代理镜像,申请SSL证书使用acme.sh
脚本。大概分为以下几个步骤:
- 安装
docker
,并安装docker-compose
- 安装
acme.sh
脚本,并给域名example.com
申请证书 - 分别创建
caddy
和trojan-go
目录及其配置文件 - 将证书安装到
trojan-go
目录下 - 创建
docker-compose.yml
文件,并基于此创建容器组
以root
用户执行下面命令安装docker:
# 升级源并安装一些必要软件
apt update && apt install wget vim -y
# 安装docker
wget -qO- get.docker.com | bash
# 启动docker(如果是Debian,上面一步执行完貌似就已启动docker,并加入了开机自启)
systemctl start docker
# 加入开机自启
systemctl enable docker
安装完docker
后,只需从github下载docker-compose
的可执行文件即可,执行下面命令配置docker-compose
:
# 从github下载docker-compose的包,并重命名为docker-compose,放置在/usr/local/bin目录下
wget -O /usr/local/bin/docker-compose https://github.com/docker/compose/releases/download/v2.4.0/docker-compose-linux-x86_64
# 赋予可执行权限
chmod +x /usr/local/bin/docker-compose
# 查看版本
docker-compose --version
docker-compose releases发布地址是:点我打开
以root
用户执行下面命令安装脚本:
# 安装socat
apt -y install socat
# 安装脚本
wget -qO- get.acme.sh | bash
# 使脚本在~/.bashrc文件追加的一行环境变量(别名)生效
source ~/.bashrc
由于acme.sh
脚本现已将zerossl
设置为申请证书默认上游颁发机构,而要使用它的证书必须提供邮箱,想必不少人跟我一样还是想用letsencrypt
的证书,那么执行下面命令替换之:
# 将letsencrypt设置为默认CA
acme.sh --set-default-ca --server letsencrypt
本文假定你的域名是example.com
,那么给它申请证书执行下面命令:
# 执行下面命令前请保证vps 80端口没有被占用,且当前用户可监听(本文root默认支持)
acme.sh --issue -d example.com --standalone -k ec-256
---------------------
(题外话)
我在使用vultr debian10测试时候,第一次没申请成功,没想到它默认系统开启了防火墙ufw,因此需要关闭防火墙,或者给80端口放行
# 停止ufw运行并关闭自启动
systemctl stop ufw && systemctl disable ufw
保证当前登陆用户是root
用户,下面执行路径为~
即/root
目录,不要求此目录,使用其它目录也行:
# 创建目录
mkdir /root/dockerconf
# 分别创建caddy和trojan-go目录
cd /root/dockerconf
mkdir caddy && mkdir trojan-go
秋大的caddy镜像默认使用Caddyfile
作为配置文件,执行下面命令配置caddy目录:
# 切换路径
cd /root/dockerconf/caddy
# 在此目录下创建配置文件,取名Caddyfile,配置文件示例如下
example.com:80 {
gzip
log /etc/caddy/caddy.log
proxy / http://bing.com
}
--------------------
# 创建caddy.log空文件,否则docker容器创建时会启动失败
touch caddy.log
上面第二步已经给域名example.com
申请好了证书,那么下面只需要将其安装到此目录下即可,执行下面命令:
# 切换路径
cd /root/dockerconf/trojan-go
# 安装证书
acme.sh --installcert -d example.com --fullchain-file ./trojan.crt --key-file ./trojan.key --ecc
跟3.3一样,同样是在/root/dockerconf/trojan-go
目录下,创建config.json
作为配置文件
# 创建配置文件
vim config.json
# 下面是配置文件示例
{
"run_type":"server",
"local_addr":"0.0.0.0",
"local_port":443,
"remote_addr":"example.com",
"remote_port":80,
"password":[
"password0"
],
"ssl":{
"cert":"/etc/trojan-go/trojan.crt",
"key":"/etc/trojan-go/trojan.key",
"sni":"example.com",
"fallback_addr":"example.com",
"fallback_port":80
},
"websocket":{
"enabled":true,
"path":"/trojan_path",
"host":"example.com"
}
}
说明:请将上述示例配置文件中的全部example.com
替换为你自己的域名,切记。
以root
用户执行下面命令:
# 切换路径
cd /root/dockerconf
# 创建配置文件
vim docker-compose.yml
# 下面是配置文件示例
version: "3"
services:
caddy:
image: teddysun/caddy
container_name: caddy
restart: always
network_mode: "host"
volumes:
- ./caddy:/etc/caddy
trojan-go:
image: teddysun/trojan-go
container_name: trojan-go
restart: always
network_mode: "host"
volumes:
- ./trojan-go:/etc/trojan-go
上面创建好docker-compose.yml
配置文件以后,它会被作为执行docker-compose up
路径下的默认配置文件:
# 保证你切换到docker-compose.yml所在路径下
cd /root/dockerconf
# 一键启动
docker-compose up -d
# 查看logs
docker-compose logs
# 停止并移除(两个)容器组
docker-compose down
由于路径可能有些复杂,这里用tree
命令,具体分布如下:
# 执行此命令
root@localhost:~/dockerconf# tree /root/dockerconf
/root/dockerconf
├── caddy
│ ├── Caddyfile
│ └── caddy.log
├── docker-compose.yml
└── trojan-go
├── config.json
├── trojan.crt
└── trojan.key
2 directories, 6 files
本文参考了很多大佬教程,这里拜谢。本文如有错误,欢迎留言指正。
参考链接: