说明
教程使用基于docker 的caddy 实现各类型服务的搭建,具有以下特性:自动SSL证书、通配符证书(泛域名)申请,自动续期,易于迁移等功能,基本取代NGINX实现高性能反向代理。迁移的化仅仅需要打包当前文件夹,移动到新服务器下重新启动相应服务即可实现。
正文
- 前提和基础
Linux操作系统,配置好用户名,安装docker,并确保服务正常运行(运行docker ps
不会报错)。当前docker最新版已经集成docker-compose,所以不需要重复安装docker-compose,只是原有的docker-compose
变更为docker compose
.新建用户不是必要操作,不过直接使用root用户威力过大,使用test+sudo可以避免一些权限问题。
# 以下均在root用户下执行
adduser test #新建一个test用户
export DOWNLOAD_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce" #国内
curl -fsSL https://get.docker.com/ | sh # 如使用 curl
# wget -O- https://get.docker.com/ | sh # 如使用 wget
usermod -aG sudo,docker test # 将test添加至sudo及docker组当中
newgrp docker #更新用户组
- 配置Caddy服务器。使用普通用户
test
执行如下操作:新建文件夹及相应配置文件。
mkdir /home/test/CaddyWeb && cd /home/test/CaddyWeb
touch access.log .env docker-compose.yaml Caddyfile && mkdir caddy_data
提供caddy的docker-compose 配置文件,主要采用host模式(必须),占用了80和443端口,文件内容如下,
# Path:/home/test/CaddyWeb/docker-compose.yaml
services:
caddy:
image: ghcr.io/caddybuilds/caddy-cloudflare:latest
restart: unless-stopped
env_file:
- $PWD/.env
cap_add:
- NET_ADMIN
# ports:
# - "80:80"
# - "443:443"
# - "443:443/udp"
network_mode: host
volumes:
- $PWD/Caddyfile:/etc/caddy/Caddyfile
- $PWD/access.log:/var/log/caddy/access.log
- $PWD/caddy_data:/data/caddy
为安全起见,所有的服务(rss,aria2c,pan,)IP绑定为localhost,不为0.0.0.0,因此不能够通过IP地址访问服务; .env
文件存放较为敏感的信息,如域名、Cloudflare Token 等.Caddyfile 配置文件也比较简单,此处实现泛域名证书,需要提前设置相应子域名DNS解析。
# Path:/home/test/CaddyWeb/.env
SERVER_NAME="example.com"
CLOUDFLARE_API_TOKEN="自行修改"`
# Path:/home/test/CaddyWeb/Caddyfile
{
order reverse_proxy before route
admin off
log {
output file /var/log/caddy/access.log {
roll_size 100mb
roll_keep 5
roll_keep_for 4320h
}
}
#证书自动申请续期。
acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
# 泛域名设置
*.{$SERVER_NAME} {$SERVER_NAME} {
#root * /var/www/html
file_server
encode gzip
@root host {$SERVER_NAME}
# 从上往下模式匹配,默认则为最后一项: aria2c: https://example.com/jsonrpc 端口号为443不为6800;
#
handle @root {
reverse_proxy /jsonrpc localhost:6800 # aria2c 配置设置
reverse_proxy /Seick localhost:65178 # 奇怪的伪装Path的服务
reverse_proxy /frac localhost:27015 # 异星工厂服务器
reverse_proxy localhost:22303 # chagpt
}
# 此处注意标签@pan ,访问网址为 pan.example.com,需要提前解析pan 子域名
@pan host pan.{$SERVER_NAME}
handle @pan {
reverse_proxy localhost:5244 #Alist服务
}
@latex host latex.{$SERVER_NAME}
handle @latex {
reverse_proxy localhost:8085 # latex服务
}
@admin host admin.{$SERVER_NAME}
handle @admin {
reverse_proxy localhost:38574 #1panel服务
}
@rss host rss.{$SERVER_NAME}
handle @rss {
reverse_proxy localhost:8080 #freshrss
}
}
- 使用搭建各类型服务。自行查找相关服务的配置文件。使用airia2c举例来说:
# Path:/home/test/aria2down/docker-compose.yaml
services:
Aria2-Pro:
container_name: aria2-pro
image: p3terx/aria2-pro
environment:
- PUID=65534
- PGID=65534
- UMASK_SET=022
- RPC_SECRET=P3TERX
- RPC_PORT=6800
- LISTEN_PORT=6888
- DISK_CACHE=64M
- IPV6_MODE=false
- UPDATE_TRACKERS=true
- CUSTOM_TRACKER_URL=
- TZ=Asia/Shanghai
volumes:
- ${PWD}/aria2-config:/config #需要提前在目录中新建 aria2-config和 aria2-downloads 文件夹
- ${PWD}/aria2-downloads:/downloads
ports:
- 127.0.0.1:6800:6800 # 没有使用 - 6800(可以任意选取,但是必须与Caddyfile反向代理的端口一致):6800 是基于安全考虑,
- 127.0.0.1:6888:6888
- 127.0.0.1:6888:6888/udp
restart: unless-stopped
logging:
driver: json-file
options:
max-size: 1m
- 在使用 Docker Compose 管理服务时,通常需要在 docker-compose.yaml 文件所在的目录下(如
/home/test/CaddyWeb
或者/home/test/aria2down
)执行命令。以下是一些常用的 Docker Compose 命令及其说明:
docker ps # 查看当前服务的状态
docker compose up # 在首次运行或进行重大更改后,建议先使用 docker compose up(不带 -d)来启动服务并观察输出,确保一切正常后再使用后台模式。
docker compose up -d # 后台运行服务,按照设置完全不需要在进行管理,重启主机后等服务跟随docker自动启动
docker compose down # 停止并移除所有容器、网络
docker compose stop # 停止服务但不删除容器
docker compose start # 启动已停止的服务
docker compose restart {服务名称} # 仅仅修改挂载的配置文件,如果存在多个子服务的话重启单个子服务需要提供名称(Aria2-Pro)
docker compose down --rmi all --volumes --remove-orphans # 删除所有未使用的容器、网络和镜像
注意事项:
- 当前使用的具有docker运行权限的test用户,配置文件夹放在当前用户目录下。如果使用1panel,可以直接在1panel下运行部署相关服务。
- 部分内容(docker用法、镜像下载及cloudflare API Token申请等)介绍不太详细,网上参考资料比较多,可以自行查询。国外服务器的话按照配置教程,完全不存在任何问题。CF可以改用其他的DNS解析,如阿里、腾讯等等,此时可能需要修改相关的镜像及配置Token等。
- caddy申请的证书保存在
/home/test/CaddyWeb/caddy_data
当中,权限设置需要root用户进行查看。 - 如果不习惯命令行,推荐使用1panel面板(类似于宝塔等)的方式,界面轻量化,系统占用较低,可以管理相应的服务。
- 主流需要的服务大多提供了docker-compose的配置方式。个人常用的服务主要有:freshrss、aria2c、latex、alist、chat-acad,new-api等。
- 在首次运行或进行重大更改后,建议先使用 docker compose up(不带 -d)来启动服务并观察输出,确保一切正常后再使用后台模式。如果只修改了挂载的配置文件,通常只需要重启相关服务即可,可以使用 docker compose restart <service_name>。
来个小心心吧