caddy开机自启配置
它是什么Caddy 是用 Go 编写的开源 Web 服务器,默认自动 HTTPS。
Caddy 是用 Go 编写的开源 Web 服务器,默认自动 HTTPS。直接用命令行运行时,进程会随终端关闭而退出,重启后站点无法恢复。本页整理基于 systemd 与 Docker Compose 的开机自启配置方法、验证命令与日志查看方式,适合自建站点与反向代理运维者。
详细介绍
简介
Caddy 是用 Go 编写的开源 Web 服务器,支持 HTTP/1.1、HTTP/2、HTTP/3,默认自动 HTTPS,配置文件格式简洁。直接用命令行界面运行 Caddy 时,进程会随终端会话结束而退出,服务器重启后站点也随之消失。本页整理的 caddy 开机自启配置,围绕 systemd 服务管理器展开:让 Caddy 在系统重启后自动启动,并把 stdout/stderr 输出交给日志系统捕获,同时给出 Docker Compose 的容器自启做法。适合自建博客、反向代理、多站点虚拟主机以及生产环境的运维者,核心优势是启动可预期、日志可追溯、重启后无需人工干预。
核心功能
- 执行 systemctl enable caddy,通过创建符号链接把 caddy.service 文件加入开机自启动的服务列表。
- systemd 在启动阶段自动加载并启动这些已启用的服务,无需人工逐次拉起进程。
- 服务管理器会捕获 Caddy 的 stdout/stderr 日志,避免命令行窗口关闭后输出丢失。
- 用 journalctl --boot -u caddy.service 查看本次启动以来该服务产生的日志。
- 用 sudo systemctl start caddy.service 手动启动服务,用于验证配置是否能正常加载。
- Docker 部署可用 Docker Compose 编写 docker-compose.yml,由容器运行时负责重启后拉起。
- Caddy 还提供管理配置的接口,可配合自动化脚本实现配置管理与集成发布。
使用场景
- 自建博客或个人站点部署在云服务器上,希望机器重启后站点自动恢复访问。
- 作为反向代理托管多个虚拟主机与站点,需要服务常驻并持续对外提供 HTTPS。
- 生产环境要求进程状态可查询、日志可用 journalctl 统一检索与排查。
- 用 Docker Compose 跑 Caddy 容器,由编排文件声明启动顺序与自动运行策略。
- 通过 GitHub Actions 配合 self-hosted runner 部署 Caddyfile,部署完成后服务需保持运行。
- 从 Nginx 迁移过来的用户,希望减少手工证书与服务守护方面的维护工作。
安装与获取步骤
- 准备系统环境:更新系统、安装必要依赖,添加 Caddy 的 GPG 密钥与 APT 软件源(以官方页面为准)。
- 写好 Caddyfile 配置文件,确认站点域名、监听地址与反向代理目标已按需填写。
- 执行 sudo systemctl start caddy.service 启动服务,先确认配置能被正常加载。
- 执行 journalctl --boot -u caddy.service 查看本次启动日志,确认服务输出与报错信息。
- 执行 systemctl enable caddy,创建符号链接把 caddy.service 加入开机自启列表。
- 改用容器方式时,创建 docker-compose.yml 并用 Docker Compose 启动,更多细节参见 Docker Hub 上的文档。
与同类方案的区别
Nginx 需要手动申请与续期证书,而 Caddy 默认自动 HTTPS,社区文章常用三行配置替代 Nginx 的手动 SSL 管理;两者在 HTTP/2 支持上能力接近,Caddy 还支持 HTTP/3。守护方式上,命令行直接运行 Caddy 与交给 systemd 托管是两条路线:前者进程随终端退出,后者由服务管理器负责重启后自动启动并集中收集日志。
- 证书管理:Caddy 默认自动处理,Nginx 需自行维护证书文件与续期任务。
- 配置格式:Caddyfile 为简化的人类可读格式,同时保留功能更强的原生 JSON 配置。
- 守护与日志:systemd 托管可捕获 stdout/stderr,Docker Compose 则由容器运行时负责拉起。
注意事项
- enable 与 start 作用不同:前者只把服务加入自启列表,后者才真正拉起进程,两者通常都需要执行。
- caddy.service 单元文件的具体路径与内容以官方页面为准,不同发行版的写法可能不同。
- 若仍然直接用命令行界面运行 Caddy,终端关闭后进程会退出,重启后站点不会自动恢复。
- 排查启动失败时优先看 journalctl --boot -u caddy.service 的输出,报错通常会打印在其中。
- 执行 systemctl 相关命令需要相应权限,命令行中一般以 sudo 前缀运行。
- Docker 方式的配置细节参见 Docker Hub 上的 Compose 文档,本页命令仅作流程参考。
更新记录
最近更新:2026-10-03
软件参数速览
下载
常见问题
执行 systemctl enable caddy 之后还需要再执行 start 吗?
需要。enable 只是通过创建符号链接把 caddy.service 加入开机自启动列表,systemd 会在下次启动时加载它;要让当前这次立即运行,还要执行 sudo systemctl start caddy.service。
journalctl --boot -u caddy.service 查不到任何日志怎么办?
先确认服务是否已启动,可执行 sudo systemctl start caddy.service 后再查;--boot 表示只看本次启动以来的输出,若服务在上次启动运行过,去掉该参数再查询。
我一直是命令行直接跑 Caddy,为什么重启后站点打不开?
命令行方式下进程随终端会话结束而退出,重启后不会自动恢复。改用服务管理器托管,执行 systemctl enable caddy 并 start 服务,才能在系统重启后自动启动。
Caddy 和 Nginx 在证书管理上主要差在哪里?
Caddy 默认自动 HTTPS,社区文章常用三行配置替代 Nginx 的手动 SSL 管理;两者都支持 HTTP/2,Caddy 还支持 HTTP/3,配置格式提供 Caddyfile 与原生 JSON 两种。
用 Docker Compose 跑 Caddy,怎么做重启后自动运行?
创建 docker-compose.yml 声明服务并用 Docker Compose 启动,由容器运行时负责重启后的拉起;更多细节参见 Docker Hub 上的文档,本页命令仅作流程参考。
systemctl enable caddy 提示找不到 caddy.service?
说明服务单元文件尚未就位,其路径与内容以官方页面为准;不同发行版写法不同,先确认单元文件存在,再执行 enable 创建符号链接。
改完 Caddyfile 之后怎么确认新配置生效?
素材给出的做法是写完配置后执行 sudo systemctl start caddy.service 启动服务,再用 journalctl --boot -u caddy.service 查看输出确认加载情况,具体重载方式以官方页面为准。
想用 GitHub Actions 自动部署 Caddyfile,服务侧要注意什么?
该方案使用 self-hosted runner 部署 Caddyfile,部署完成后 Caddy 仍需由服务管理器或容器运行时保持运行,否则进程退出后站点无法访问,日志可用 journalctl 统一查看。