自动https无需上传证书 个人用户最友好的反代工具Caddy快速部署教程

在这篇文章中,我将介绍如何使用Docker Compose创建并配置一个Caddy容器。Caddy 是一个强大的反向代理服务器,具有自动HTTPS、轻松的配置以及高性能等优点。通过Docker Compose,我们可以轻松地管理和部署Caddy容器化应用。这样我们访问各种服务的时候就不用带上端口号,也可以避免http明文传输带来的安全性风险。

相比nginx,我觉得Caddy最大的优势是会自动帮你完成Let’s Encrypt的SSL挑战并获取证书,而你需要做的只是手动把域名指向你的服务器IP即可。下面我将提供快速部署Caddy的教学。

安装Docker以运行Caddy

如果你还没有安装Docker,运行以下代码安装:

apt update

apt install curl -y

curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh

目前DockerHub是被墙的状态,如果你的服务器在国内切想稳定使用,需要找一个可用的镜像源或者使用梯子,Linux个人推荐ShellCrash,这部分请自行查看文档恕不提供教学。

编辑Caddyfile

创建一个用于管理caddy相关文件的文件夹,例如~/caddy。随后我们执行cd ~/caddy进入刚刚创建的caddy目录。

首先,我们在目录下创建一个Caddyfile文件,添加反代的规则。基本的规则如下,首先是你的服务要对应的域名,随后是本地的IP以及端口。当你使用下方的第一种方式配置时,Caddy会自动检查你的服务是否支持https并自动启用。此外caddy会自动帮你完成ssl挑战并自动管理和应用证书:

yourdomain.com {
    reverse_proxy http://127.0.0.1:5000 #ip+端口
}

将域名指向服务器的IP

以腾讯云为例,前往云解析DNS,我的解析,选择添加记录

随后添加一条解析记录

你可以添加单独一条,就像上图一样,Caddy中的配置就对应为:

blog.yourdomain.com {
    reverse_proxy http://backend-ip:port1
}

也可以添加整个子域名范围,这样Caddy应用子域名的时候就不用再来添加了,例如添加*.blog,一样指向你的服务器IP。这样你就可以在Caddy添加多个子域名来对应多个服务,例如aaa, bbb, ccc

aaa.blog.yourdomain.com {
    reverse_proxy http://backend-ip:port2
}

bbb.blog.yourdomain.com {
    reverse_proxy http://backend-ip:port3
}

ccc.blog.yourdomain.com {
    reverse_proxy http://backend-ip:port4
}

使用Docker Compose创建Caddy容器

接下来,我们将编写一个docker-compose.yml文件来配置Caddy容器。以下是一个示例配置文件:

version: '3.3'

services:
  caddy:
    image: caddy:latest
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./site:/srv
      - caddy_data:/data
      - caddy_config:/config
    network_mode: host  # 使用host网络模式

volumes:
  caddy_data:
  caddy_config:

完成配置后,使用以下命令启动Caddy容器:

docker compose up -d

这将以守护进程模式启动Caddy容器,Caddy将直接通过宿主机的网络端口提供服务。

静态网站的运行

我们在Docker compse中进行了如下映射./site:/srv。假设你在本地有一个目录结构为 ~/caddy/site/your_site_folder,那么他将会被 Docker Compose 映射到容器中的 /srv/your_site_folder,那么 Caddyfile 可以如下配置:

http://example.com {
    root * /srv/your_site_folder    # 使用映射到容器内的 /srv/your_site_folder 目录作为网站根目录
    file_server                     # 启用文件服务器功能,提供静态文件服务
}

https://example.com {
    root * /srv/your_site_folder    # 使用映射到容器内的 /srv/your_site_folder 目录作为网站根目录
    file_server                     # 启用文件服务器功能,提供静态文件服务

    # 反向代理配置
    reverse_proxy /api/* http://127.0.0.1:5000  # 将 /api/* 的请求代理到本地主机的5000端口
}

如此,我们的https配置就大功告成了。更新Caddyfile文件后,你只需要运行

docker compose down
docker compose up -d

就可以应用新的配置啦。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇