📜  如何使用 Caddy Webserver 部署静态网站?

📅  最后修改于: 2021-10-28 02:20:50             🧑  作者: Mango

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

安装 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=

安装了 Caddy Web 服务器

第 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

索引.html

步骤 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

Caddy 服务器运行成功

现在从您最喜欢的浏览器访问您的网站:

在浏览器中运行