跳至主要內容

安装Caddy作为Web服务器

MonoLogueChi大约 2 分钟

这一节来安装 Web 服务器,Caddy 和 Nginx 看个人喜好

注意

请勿照搬本文中的命令,请先理解命令,然后检查自己的实际情况是否和本文相同,并且正确替换用户名和目录。

提示

caddy 详细内容请看文档open in new window

安装 Caddy

这里选择自行编译,可以看我以前发的文章

使用 vscode 打开前面创建好的 www 目录,创建一个 caddy 目录。

mkdir caddy && mkdir caddy/bin

然后将二进制文件上传到 caddy/bin 目录,再授予运行权限。

cd caddy
chmod +x bin/caddy

配置文件

首先在 vscode 服务端安装插件 Caddyfile Supportopen in new window,并配置远程设置,可能需要关闭远程并重新登录才能看到配置选项。

{ "caddyfile.executable": "/home/ubuntu/www/caddy/bin/caddy" }

创建配置文件,并编辑

code Caddyfile

写入配置并保存

# 全局设置
{
    email xxwhite@foxmail.com
    log {
        level error
        output file /home/ubuntu/www/caddy/logs/log.json
    }
    storage file_system /home/ubuntu/www/caddy/.caddy
    servers :443 {
        protocols h1 h2 h3
    }
}

# 导入配置文件
import conf.d/*.caddyfile

创建其他目录

mkdir conf.d logs .caddy

配置守护进程

创建 caddy.service

code caddy.service

编写内容并保存

[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target

[Service]
Type=notify
User=ubuntu
Group=ubuntu
ExecStart=/home/ubuntu/www/caddy/bin/caddy run --environ --config /home/ubuntu/www/caddy/Caddyfile
ExecReload=/home/ubuntu/www/caddy/bin/caddy reload --config /home/ubuntu/www/caddy/Caddyfile --force
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateDevices=yes
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

执行以下命令,添加开机启动

sudo systemctl enable /home/ubuntu/www/caddy/caddy.service

尝试启动

sudo systemctl start caddy

配置泛域名证书

注意

我这样只是其中一种配置方法,不是唯一,而且存在一定弊端,就是添加新的泛域名证书时,一定要先成功申请证书,再去添加相关站点配置,否则会因为证书文件不存在导致启动失败。

修改 Caddyfile 全局配置

# 全局设置
{
    email xxwhite@foxmail.com
    log {
        level error
        output file /home/ubuntu/www/caddy/logs/log.json
    }
    storage file_system /home/ubuntu/www/caddy/.caddy
    servers :443 {
        protocols h1 h2 h3
    }
}

# 匹配所有域名
*.u2sb.com: {
    tls {
        dns  alidns {
            access_key_id {env.ALIYUN_ACCESS_KEY_ID}
            access_key_secret {env.ALIYUN_ACCESS_KEY_SECRET}
        }
    }
    respond 400
}

# 导入配置文件
import conf.d/*.caddyfile

重启 caddy

sudo systemctl restart caddy

然后看日志输出和 .caddy 目录下证书是否正常申请到。

如果证书能正常申请到,就可以按照以下步骤继续做,否则就要尝试排查错误,这部分不在本文范围呢。

添加一个片段文件,方便以后导入

mkdir conf.d/snippets && code conf.d/snippets/tls.conf

写入内容并保存

tls /home/ubuntu/www/caddy/.caddy/certificates/acme-v02.api.letsencrypt.org-directory/{args.0}/{args.0}.crt /home/ubuntu/www/caddy/.caddy/certificates/acme-v02.api.letsencrypt.org-directory/{args.0}/{args.0}.key

再创建一个文件

code conf.d/snippets/u2sb.conf

写入内容并保存

import tls.conf wildcard_.u2sb.com
encode zstd br gzip
file_server

然后就可以在其他站点配置里引用这段代配置文件了

code conf.d/my-server.u2sb.com.caddyfile

然后编辑并保存

my-server.u2sb.com: {
    import snippets/u2sb.conf
    root * /home/ubuntu/www/wwwroot/my-server.u2sb.com/
}

重启服务并测试

sudo systemctl restart caddy