最常见Web服务器是Apache或者 Nginx,但是对于一些简单用途,配置起来相对太复杂。Caddy(https://caddyserver.com/)是一个用 Go 写的 Web 服务器,配置简洁,功能强大,适合一些简单快速用途,比如作为HTTP FileServer,实现YUM/APT软件仓库等。当然,Caddy能自动开启 HTTPS、支持 HTTP/2 && QUIC等特性,可以满足各种复杂的Web Server功能要求。Caddy还支持MIPS、ARM和X86等架构,最新版本也可以在国产信创设备上使用。
网上的大多数文章都是Caddy1版本的,现在官方已经升级到Caddy 2版本了,配置文件格式和以前不同(https://caddyserver.com/docs/v2-upgrade)。应以官方文档为准《Caddyfile Quickstart》。
本文暂时只讨论Caddy配置作为基本的HTTP File Server用途(Linux软件仓库应用),其它配置请参考Caddy官方文档:https://caddyserver.com/docs。
1. 下载与安装caddy
caddy(https://caddyserver.com/)基于Go语言( Go 1.14 or newer),Go语言的软件往往就是一个单一文件,Caddy也是。
在caddy网站上下载对应的caddy二进制包,最新版本2.3,支持linx、windows、bsd以及x86、ARM、MIPS(分MIPS、MIPS64和MIPS64le)等架构,在龙芯平台下载选择Linux 64le(文件名caddy_linux_mips64le)。
chmod +x caddy_linux_mips64le #直接下载的,需要加上执行权限;测试时或者chmod 777 caddy_linux_mips64le
mv caddy_linux_mips64le /user/bin/caddy #放到系统PATH中
或者如果下载其它版本的,访问https://github.com/caddyserver/caddy/releases,下面例子是下载2.2.1版本的对应二进制文件:
[root@backupDK /]tar xf caddy_2.2.1_linux_amd64.tar.gz
#解压后就是一个caddy单文件,移动到系统PATH路径的文件夹下
[root@backupDK /]mv caddy /usr/bin/
caddy的启动参数:
[root@backupDK /]# caddy
Caddy is an extensible server platform.
usage:
caddy <command> [<args...>]
commands:
adapt Adapts a configuration to Caddy's native JSON
build-info Prints information about this build
environ Prints the environment
file-server Spins up a production-ready file server
fmt Formats a Caddyfile
hash-password Hashes a password and writes base64
help Shows help for a Caddy subcommand
list-modules Lists the installed Caddy modules
reload Changes the config of the running Caddy instance
reverse-proxy A quick and production-ready reverse proxy
run Starts the Caddy process and blocks indefinitely
start Starts the Caddy process in the background and then returns
stop Gracefully stops a started Caddy process
trust Installs a CA certificate into local trust stores
untrust Untrusts a locally-trusted CA certificate
validate Tests whether a configuration file is valid
version Prints the version
Use 'caddy help <command>' for more information about a command.
Full documentation is available at:
https://caddyserver.com/docs/command-line
caddy测试-显示版本号,表示安装成功:
[root@backupDK /]caddy version
v2.2.1 h1:Q62GWHMtztnvyRU+KPOpw6fNfeCD3SkwH7SfT1Tgt2c=
2. 运行Caddy
Caddy首页上有其基本的用法:
Quick, local file server
$ caddy file-server
Public file server over HTTPS
$ caddy file-server --domain example.com
HTTPS reverse proxy
$ caddy reverse-proxy --from example.com --to localhost:9000
Run server with Caddyfile in working directory (if present)
$ caddy run
//Caddy 2's default protocol is always HTTPS if a hostname or IP is known. This is different from Caddy 1, where only public-looking domains used HTTPS by default. Now, every site uses HTTPS (unless you disable it by explicitly specifying port :80 or http://).
(一)直接在命令行带参数方式启动Caddy服务器
启动caddy默认会将启动的目录作为主目录,如下面启动目录就是“/home/linuxrepo”。
- file-server表示是作为文件服务,配置文件中是“file_server”
- 如果目录下没有index.htm文件,仅仅显示文件列表,加入-browse,配置文件中是“file_server browse”
- 指定端口号:-listen: 8800,(注意8800前面是个空格!),配置文件中是“ :8800”
- 可以指定根目录(默认是启动目录):-root /opt/software,配置文件中是“root * /opt/software“
cd /home/linuxrepo/
caddy file-server -browse
#caddy file-server -browse -listen :8800 -root /opt/software
(二)配置文件Caddyfile方式启动Caddy服务器
Caddy的配置文件名是Caddyfile,启动Caddy时可以如 --config /etc/caddy/Caddyfile 指定配置文件(不指定默认使用当前启动目录中的Caddyfile文件),最简单的测试Caddyfile例子如下(访问http://ip:2015 ,返回“Hello World!”):
[root@backupDK linuxrepo]# cat /etc/caddy/Caddyfile
:2015
respond "Hello world!"
作为HTTP文件服务器的例子:
[root@backupDK /]# cat /home/linuxrepo/Caddyfile
localhost
file_server browse
注:只要端口号不冲突,可以很容易启动多个Caddy Web Server!
3. 作为服务启动
参考官方文档:https://caddyserver.com/docs/install#linux-service
caddy.service格式基本如下,文件链接是:https://github.com/caddyserver/dist/blob/master/init/caddy.service
[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target
[Service]
User=caddy
Group=caddy
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target
准备Caddy服务的系统账户:
#Move the caddy binary into your $PATH, for example:
$mv caddy /usr/bin/
$groupadd --system caddy
$useradd --system \
--gid caddy \
--create-home \
--home-dir /var/lib/caddy \
--shell /usr/sbin/nologin \
--comment "Caddy web server" \
caddy
安装服务:
编辑 /etc/systemd/system/caddy.service,修改.service文件中的ExecStart and ExecReload为实际路径,然后如下安装:
#第一次安装服务
sudo systemctl daemon-reload
sudo systemctl enable caddy
sudo systemctl start caddy
#Verify that it is running:
systemctl status caddy
4. 基于Web的网盘应用
私有网络的网盘应用现在解决方案都已经比较成熟,如nextcloud(owncloud)等,Caddy是一个很好的承载平台。
- nextcloud等如果使用caddy的话,配置参考《Caddy环境下一些Web应用程序的配置参考》
- filebrowser(原名filemanager)是一个基于Go的极简web文件管理器,单一命令文件。可以实现类似的HTTP网盘功能,filebrowser也可以和Caddy配合使用,Caddy作为代理,filebrowser使用详见https://filebrowser.org/installation。可以参考https://www.moerats.com/archives/316/、https://github.com/filebrowser/caddy。