v2中文文档
项目

保持Caddy运行

虽然Caddy可以通过直接使用它的命令行界面成功运行,但使用服务管理器来保持它的运行有很多好处,例如确保它在系统启动时重新启动,并捕捉stdout/stderr日志。

Linux服务

推荐使用我们的官方systemd单元文件,在带有systemd的Linux发行版上运行Caddy。

单元文件

我们提供了两个不同的systemd单元文件,你可以根据你的使用情况来选择:

它们非常相似,但在ExecStartExecReload命令中有所不同,以适应工作流程。

如果需要在服务之间切换,应该先禁用和停止前一个服务,然后再启用和启动另一个服务。例如,要从caddy服务切换到caddy-api服务:

sudo systemctl disable --now caddy
sudo systemctl enable --now caddy-api

使用服务

如果使用Caddyfile,你可以用nanovi或者你喜欢的编辑器来编辑你的配置:

sudo nano /etc/caddy/Caddyfile

你可以把你的静态站点文件放在/var/www/html/srv中。确保caddy用户有读取文件的权限。

查询服务是否正在运行:

systemctl status caddy

status命令还将显示当前运行的服务文件的位置。

当使用我们的官方服务文件运行时,Caddy的输出将被重定向到journalctl。为了阅读你的完整日志,避免行数被截断:

journalctl -u caddy --no-pager | less +G

如果使用一个配置文件,你可以在做任何改变后优雅地重新加载Caddy:

sudo systemctl reload caddy

你可以使用下面的命令停止服务:

sudo systemctl stop caddy

Caddy进程将作为caddy用户运行,它的$HOME设置为/var/lib/caddy。这意味着。

  • 默认的[数据存储位置](/docs/conventions#data-directory)(用于证书和其他状态信息)将在/var/lib/caddy/.local/share/caddy
  • 默认的配置存储位置(用于自动保存的JSON配置,主要对caddy-api服务有用)将在/var/lib/caddy/.config/caddy

手动安装

一些安装方法自动设置Caddy作为服务运行。如果你选择的方法没有这样做,你可以按照这些指示来做。

要求:

把caddy二进制文件移到$PATH目录,比如:

sudo mv caddy /usr/bin/

检查是否能正常工作:

caddy version

创建一个叫caddy的群组:

sudo groupadd --system caddy

创建一个有可写权限家目录的caddy用户:

sudo useradd --system \
    --gid caddy \
    --create-home \
    --home-dir /var/lib/caddy \
    --shell /usr/sbin/nologin \
    --comment "Caddy web server" \
    caddy

如果有配置文件,需要确保caddy用户具有刻度权限。

接下来,选择一个满足使用需求的systemd单元文件

仔细检查ExecStartExecReload指令。 确保二进制文件的位置和命令行参数对你的安装来说是正确的!例如:如果使用一个配置文件,如果你的--config路径与默认值不同,请改变它。

通常保存服务文件的地方是: /etc/systemd/system/caddy.service

保存好服务文件后,你可以用通常的systemctl方式来首次启动服务。

sudo systemctl daemon-reload
sudo systemctl enable --now caddy

验证它是否正在运行。

systemctl status caddy

现在,你已经准备好使用服务

覆盖

覆盖服务文件各个方面的最好方法是使用这个命令:

sudo systemctl edit caddy

这将用你的默认终端文本编辑器打开一个空白文件,你可以在其中覆盖或添加指令到单元定义。这被称为"插入式"文件。

例如,如果你需要定义环境变量用于你的配置,你可以这样做:

```systemd
[Service]
Environment="CF_API_TOKEN=super-secret-cloudflare-tokenvalue"

或者,例如你需要将配置文件从Caddyfile的默认值改为使用JSON文件(注意Exec*指令必须在设置新值之前用空字符串重置)。

[Service]
ExecStart=
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/caddy.json
ExecReload=
ExecReload=/usr/bin/caddy reload --config /etc/caddy/caddy.json

然后,保存文件并退出文本编辑器,并重新启动服务使之生效:

sudo systemctl restart caddy

Windows服务

用这些说明在Windows上把Caddy安装成一个服务。

要求:

  • 下载从源代码构建caddy.exe二进制文件。
  • 任何来自WinSW服务封装器(以下服务配置是为v2.x版本编写的)最新版本的.exe

将所有文件放入一个服务目录。在下面的例子中,我们使用C:\caddy

WinSW-x64.exe文件重命名为caddy-service.exe

在同一目录下添加一个caddy-service.xml

<service>
  <id>caddy</id>
  <!-- 服务的显示名称 -->
  <name>Caddy Web Server (powered by WinSW)</name>
  <!-- 服务描述 -->
  <description>Caddy Web Server (https://caddyserver.com/)</description>
  <executable>%BASE%\caddy.exe</executable>
  <arguments>run</arguments>
  <log mode="roll-by-time">
    <pattern>yyyy-MM-dd</pattern>
  </log>
</service>

现在你可以用以下方式安装该服务:

caddy-service install

你可能想启动Windows服务控制台,看看该服务是否正确运行:

services.msc

请注意,Windows服务不能被重新加载,所以你必须直接告诉caddy进行重新加载:

caddy reload

重启可以通过正常的Windows服务命令进行,例如通过任务管理器的 "服务 "标签。

关于定制服务包装器,请参见WinSW文档

Docker Compose

使用Docker启动和运行的最简单方法是使用Docker Compose。以下只是摘录,更多细节请参见Docker Hub上的文档

首先,创建一个文件docker-compose.yml(或者把这个服务添加到你现有的文件中):

version: "3.7"

services:
  caddy:
    image: caddy:<version>
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - $PWD/Caddyfile:/etc/caddy/Caddyfile
      - $PWD/site:/srv
      - caddy_data:/data
      - caddy_config:/config

volumes:
  caddy_data:
  caddy_config:

确保在<version>中填写最新的版本号,你可以在Docker Hub的 "Tags "部分找到。

然后,在docker-compose.yml旁边创建一个名为Caddyfile的文件,并写下你的Caddyfile配置。

如果你有静态文件需要服务,你可以把它们放在配置旁边的site/目录中,然后把root指令设为/srv/。如果你不这样做,那么你可以删除/srv卷装载。

然后,你就可以启动这个容器了:

docker-compose up -d

在对你的Caddy文件进行修改后,要重新加载Caddy:

docker-compose exec -w /etc/caddy caddy caddy reload

查看caddy的日志:

docker-compose logs caddy