Caddy Web 服务器是一个用 Go 编写的开源 Web 服务器。它使用 Go 标准库来实现其 HTTP 功能并原生支持 HTTPS,这意味着它会负责您的 SSL 证书管理。在本文中,我们将在 VPS 上将静态网站部署到 caddy 网络服务器。我们将使用 ubuntu
先决条件
- 基本的 Linux 经验
- 一个 Ubuntu VP(新的/现有的)
- HTML和CSS的基础知识
- 域名
第 1 步:登录您的新/现有 VPS 并确保其软件包是最新的。
ssh user@
sudo apt update && sudo apt upgrade
第 2 步:安装最新版本的 Go 编程语言。下面的命令将安装最新版本的 Go Snap(无论你安装什么版本,请确保它高于 1.14.2)
sudo snap install go --classic
第三步:下载安装最新版本的xcaddy,xcaddy帮助我们轻松安装caddy
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/xcaddy/gpg.key' | sudo apt-key add -
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/xcaddy/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-xcaddy.list
sudo apt update
sudo apt install xcaddy
第 4 步:现在安装 xcaddy 后,我们需要安装 Caddy 网络服务器。为此,请遵循以下命令
mkdir ~/caddyserver
cd ~/caddyserver
// for only caddy build
xcaddy build
// for building caddy with some plugins
xcaddy build --with=github.com/caddy-dns/cloudflare
sudo mv caddy /usr/bin
要检查 caddy 是否安装成功,您可以使用以下命令,如果它打印出 caddy 的版本,则它已安装
caddy version
//output
v2.4.2 h1:chB106RlsIaY4mVEyq9OQM5g/9lHYVputo/LAX2ndFg=
第 5 步:配置 systemd 服务,以便在系统启动时自动启动 Caddy
sudo groupadd --system caddy
sudo useradd --system --gid caddy --create-home --home-dir /var/lib/caddy --shell /usr/sbin/nologin --comment "Caddy web server | learned from GFG" caddy
由于 caddy 需要自己的组和用户来运行 systemd 进程,第一个命令创建一个新的组 caddy(你可以给你自己的名字,但在故障排除的情况下它会很有用),第二个命令再次创建用户命名球童并将其分配给球童组。 nologin 命令表示您无法以 caddy 用户身份登录 shell。
第 6 步:创建一个 caddy 服务文件并为其添加所需的权限。
sudo nano /etc/systemd/system/caddy.service
从 Caddy 存储库复制并粘贴以下预构建的系统服务文件
# caddy.service
#
# For using Caddy with a config file.
#
# Make sure the ExecStart and ExecReload commands are correct
# for your installation.
#
# See https://caddyserver.com/docs/install for instructions.
#
# WARNING: This service does not use the --resume flag, so if you
# use the API to make changes, they will be overwritten by the
# Caddyfile next time the service is restarted. If you intend to
# use Caddy's API to configure it, add the --resume flag to the
# `caddy run` command or use the caddy-api.service file instead.
[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target
[Service]
Type=notify
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
分配权限,以便只有 root 用户可以修改它
sudo chmod 644 /etc/systemd/system/caddy.service
第 7 步:现在我们需要为 caddy 目录设置目录权限
// 755 permission gives root user rwx but others only rx for caddy binary
sudo chmod 755 /usr/bin/caddy
// creating caddy configuration folder
sudo mkdir /etc/caddy
// creating caddy config file
sudo touch /etc/caddy/Caddyfile
//giving ownership of caddy config folder to both root user and caddy group
sudo chown -R root:caddy /etc/caddy
// creating ssl folder for caddy to store the fetched ssl certificates
sudo mkdir /etc/ssl/caddy
//giving ownership of caddy config folder to both root user and caddy group
sudo chown -R root:caddy /etc/ssl/caddy
// 770 ensures that caddy can write to the folder and it can't be executed
sudo chmod 0770 /etc/ssl/caddy
// create and assign ownership of website contents to caddy uper and group
sudo mkdir /var/www/public_html
sudo chown caddy:caddy /var/www/public_html
第 8 步:创建一个简单的 index.html 文件 int public_html 文件夹我们在上一步创建
sudo nano /var/www/public_html/index.html
Host Static website using Caddy web server
Welcome to GeeksForGeeks
This article explains how to host static websites using caddy webserver
Thank You for Reading
步骤 9:为此配置 Caddy 您需要编辑我们在步骤 7 中创建的配置文件。
sudo nano /etc/caddy/Caddyfile
下面是一个示例球童配置文件。
example.com {
tls {
email hostmaster@example.com
}
root * /var/www/public_html
encode gzip
file_server
header / {
Content-Security-Policy = "upgrade-insecure-requests; default-src 'self'; style-src 'self'; script-src 'self'; img-src 'self'; object-src 'self'; worker-src 'self'; manifest-src 'self';"
Strict-Transport-Security = "max-age=63072000; includeSubDomains; preload"
X-Xss-Protection = "1; mode=block"
X-Frame-Options = "DENY"
X-Content-Type-Options = "nosniff"
Referrer-Policy = "strict-origin-when-cross-origin"
Permissions-Policy = "fullscreen=(self)"
cache-control = "max-age=0,no-cache,no-store,must-revalidate"
}
}
- 第一行告诉球童配置块所属的域名(example.com)。它还用于获取 SSL 证书。
- TLS 块帮助我们为域配置 SSL,对于此特定文件配置,通过电子邮件将主机名发送到 SSL 获取和配置中的任何发布和错误
- root 告诉网站内容的根目录
- 内容编码
- File_server 帮助 caddy 提供静态文件
- 标头块告诉 caddy 将这些标头与响应一起发送,特定配置告诉 caddy 将 CSP、XSS、HSTS 和缓存控制标头与响应一起发送
第 10 步:现在使用以下命令运行 caddy
// reloading daemon to apply caddy system service file
sudo systemctl daemon-reload
// starting caddy
sudo systemctl start caddy
//activating caddy system file
sudo systemctl enable caddy
sudo systemctl restart caddy
现在从您最喜欢的浏览器访问您的网站: