在 CentOS 7 上为 Caddy 创建 Systemd 服务
如我们所见,Caddy Web 服务器在 CentOS 7 上的安装和配置不是一个自动化过程,我们正在创建每个文件/目录并调整其权限。
同样,我们需要创建一个系统服务,以在守护进程模式下自动运行 Caddy Web 服务器。
幸运的是,官方 Caddy 存储库提供了一个 Caddy 系统单元文件,我们可以使用它在 CentOS 7 上创建 systemd 服务。
我们没有使用实际的文件,而是派生了一个我们自己的更简单的版本。
[root@centos7.onitroad.com ~]# vi /usr/lib/systemd/system/caddy.service
并其中添加以下代码行。
[Unit] Description=Caddy HTTP/2 web server Documentation=https://caddyserver.com/docs After=network-online.target Wants=network-online.target systemd-networkd-wait-online.service [Service] Restart=on-abnormal StartLimitIntervalSec=14400 StartLimitBurst=10 User=caddy Group=caddy Environment=CADDYPATH=/etc/ssl/caddy ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp ExecReload=/bin/kill -USR1 $MAINPID KillMode=mixed KillSignal=SIGQUIT TimeoutStopSec=5s LimitNOFILE=1048576 LimitNPROC=512 PrivateTmp=true PrivateDevices=false ProtectHome=true ProtectSystem=full ReadWritePaths=/etc/ssl/caddy ReadWriteDirectories=/etc/ssl/caddy [Install] WantedBy=multi-user.target
在 CentOS 7 上安装 Caddy Web Server
登录到服务器
使用以下命令安装 Caddy Web 服务器的最新稳定版本。
[root@centos7.onitroad.com ~]# curl https://getcaddy.com | bash -s personal
我们在这里安装 Caddy Web 服务器个人版。
如果我们想下载 Caddy 网络服务器的商业版本,我们必须提供帐户 ID 和 API 密钥,如 Caddy 下载页面所述。
找到 Caddy Web 服务器的安装目录。
[root@centos7.onitroad.com ~]# whereis caddy caddy: /usr/local/bin/caddy
与 Apache 和 Nginx 不同;Caddy Web 服务器不创建配置文件、systemd 服务和拥有 Caddy 服务和文件的专用用户。
因此,我们必须手动为 Caddy Web 服务器创建一个用户。
[root@centos7.onitroad.com ~]# adduser -r -s /sbin/nologin -d /var/www caddy
其中:
- 使用 -r 参数的系统用户
- 使用 /sbin/nologin shell 和
- 默认主目录设置为 /var/www 。
在 Caddy Web 服务器上配置自动 TLS:
自动 TLS 是 Caddy Web 服务器的独特功能,它将 Caddy 与其他 Web 服务器区分开来。
如果配置了自动 TLS,则 Caddy Web 服务器会自动从 Let's Encrypt(一个免费、自动化和开放的证书颁发机构)请求和更新 TLS 证书。
编辑 Caddyfile 以配置自动 TLS。
[root@centos7.onitroad.com ~]# vi /etc/caddy/Caddyfile
并添加另一个服务器块。
caddy-01.onitroad.com { root /var/www gzip tls jackli@onitroad.com }
其中
- caddy-01.onitroad.com 必须是注册域并且可以通过 Internet 访问。
- tls 指令将通知 Caddy 服务从 Let's Encrypt 获取 TLS 证书并在默认 https 端口 443 上启动该服务。
在 CentOS 7 防火墙中允许 https 服务。
[root@centos7.onitroad.com ~]# firewall-cmd --permanent --add-service=https success [root@centos7.onitroad.com ~]# firewall-cmd --reload success
重新启动 Caddy 服务以加载更改。
[root@centos7.onitroad.com ~]# systemctl restart caddy.service
在浏览器中浏览 URL https://caddy-01.onitroad.com。
如果配置正确,那么它将显示相同的“Hello World”网页,但这次是通过 https 协议。
为 Caddy Web Server 创建目录结构:
Caddy 的安装过程不会创建必要的目录,因此,我们必须手动创建这些目录并设置适当的权限。
为 Caddy web server 创建一个配置目录。
[root@centos7.onitroad.com ~]# mkdir /etc/caddy [root@centos7.onitroad.com ~]# chown -R root:caddy /etc/caddy [root@centos7.onitroad.com ~]# touch /etc/caddy/Caddyfile
Caddy Web 服务器自动从 Let's Encrypt 获取 SSL 证书,它需要以下目录来存储该 SSL 证书。
[root@centos7.onitroad.com ~]# mkdir /etc/ssl/caddy [root@centos7.onitroad.com ~]# chown -R caddy:root /etc/ssl/caddy [root@centos7.onitroad.com ~]# chmod o-rwx /etc/ssl/caddy/
创建目录以在 Caddy Web 服务器上托管网站。
[root@centos7.onitroad.com ~]# mkdir /var/www [root@centos7.onitroad.com ~]# chown caddy:caddy /var/www
在 Caddyfile 中创建一个服务器块
配置 Caddyfile 并创建一个简单的服务器块。
[root@centos7.onitroad.com ~]# vi /etc/caddy/Caddyfile
添加以下指令以添加 HTTP 服务器块。
http:// { root /var/www gzip }
为我们的网站创建一个索引页面。
[root@centos7.onitroad.com ~]# vi /var/www/index.html
在此文件中添加以下代码。
<html> <head><title>Hello World</title> <body><h1>Hello World</h1></body> </html>
启用并启动 caddy.service 。
[root@centos7.onitroad.com ~]# systemctl enable --now caddy.service Created symlink from /etc/systemd/system/multi-user.target.wants/caddy.service to /usr/lib/systemd/system/caddy.service.
在 CentOS 7 防火墙中允许 http 服务。
[root@centos7.onitroad.com ~]# firewall-cmd --permanent --add-service=http success [root@centos7.onitroad.com ~]# firewall-cmd --reload success
在客户端浏览器中打开 URL http://caddy-01.onitroad.com。
如果配置正确,则网页会显示“Hello World”。
在本文中,我们将在 CentOS 7 上安装 Caddy Web 服务器并在 Caddy 上配置 HTTP 和 HTTPS 网站。
Caddy Web 服务器是一个开源的、支持 HTTP/2 的 Web 服务器,用 Go 语言编写。
Caddy 最显着的功能之一是自动为托管网站启用 TLS。
Caddy 自动从 Let's Encrypt 获取和更新 TLS 证书。
Caddy 也可以配置为反向代理服务器。