如何在CentOS 7上托管Caddy的网站

介绍

Caddy是一个易于使用的新Web服务器。它非常简单,可以用作快速开发服务器,并且足够强大,可以在生产环境中使用。

Caddy所服务的每个网站都可以通过安全连接自动提供服务,无需其他配置或操作。

在本教程中,您将安装和配置Caddy。

准备

要学习本教程,您需要:

  • 一个CentOS 7服务器,包括一个使用sudo权限的非root用户。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 配置为指向您的服务器的域名。如果你没有域名,建议您先去这里注册一个域名,您需要将域名解析到您的服务器,您可以使用腾讯云云解析进行快速设置。
  • (可选)安装的文本编辑器nano。CentOS 默认带有文本编辑器vi,但nano对于用户更加友好。

第一步 - 安装Caddy二进制文件

Caddy项目提供了一个安装脚本,用于检索和安装Caddy服务器的二进制文件。要执行它,请输入:

$ curl -s https://getcaddy.com | bash

您可以通过访问https://getcaddy.com,使用wgetcurl在执行文件之前或之前下载文件来查看脚本。

在安装过程中,脚本将用sudo获取管理权限,以便将Caddy文件放在系统范围的目录中,因此它可能会提示您输入密码。

命令输出结果如下所示:

Caddy installation script output
Downloading Caddy for linux/amd64...
https://caddyserver.com/download/linux/amd64?plugins=
Extracting...
Putting caddy in /usr/local/bin (may require password)
[sudo] password for sammy:
Caddy 0.10.2
Successfully installed

脚本完成后,Caddy二进制文件将安装在服务器上并准备使用。您可以使用which检查其位置来验证Caddy二进制文件是否已到位。

$ which caddy

输出结果说明了Caddy二进制文件可以在/usr/local/bin/caddy中找到。

Caddy在安装期间不会创建任何系统范围的配置,也不会将其自身安装为服务,这意味着它不会自动启动。在接下来的几个步骤中,我们将创建用于Caddy的用户帐户,Caddy需要运行的文件并安装其服务文件。

第二步 - 为Caddy创建用户和组

虽然两个最受欢迎的HTTP服务器Apache和Nginx在从系统软件包安装期间创建了自己的非特权用户,但Caddy并没有这样做。出于安全原因,也不应该使用超级用户root帐户启动它。在此步骤中,我们将创建一个用户caddy,该用户将仅用于运行Caddy并访问其文件。

要创建名为caddy的用户类型:

$ sudo adduser -r -d /var/www -s /sbin/nologin caddy

-r使新创建的帐户成为系统帐户,-d表示主目录里的用户,在我们的例子中它是/var/www,我们会在后面创建它。无特权的用户不能够登录和访问系统shell,我们通过使用-s设置所需的shell来确保/sbin/nologin系统命令不允许系统登录。最后一个参数是用户名本身 - 在我们的例子中为caddy

现在,当我们为Caddy Web服务器提供用户时,我们可以在下一步中配置用于存储Caddy配置文件的必要目录。

第三步 - 设置必要的目录

Caddy的单元文件(我们将在下一步中安装)期望特定目录和文件以特定权限存在。我们将在此步骤中创建它们。

首先,创建一个包含main的目录Caddyfile,这是一个配置文件,告诉Caddy它应该服务哪些网站以及如何服务。

$ sudo mkdir /etc/caddy

将此目录的所有者更改为root用户,将其组更改为www-data,以便Caddy可以读取它。

$ sudo chown -R root:caddy /etc/caddy

在此目录中,创建一个空的Caddyfile,稍后我们将对其进行编辑。

$ sudo touch /etc/caddy/Caddyfile

在中/etc/ssl创建另一个目录。

$ sudo mkdir /etc/ssl/caddy

Caddy在获取证书时需要能够写入该目录,因此让所有者成为caddy用户。您可以将组保留为root用户,与默认值保持不变:

$ sudo chown -R caddy:root /etc/ssl/caddy

然后确保没有其他人可以通过删除其他人的所有访问权限来读取这些文件。

$ sudo chmod 0770 /etc/ssl/caddy

我们需要创建的最终目录是网站本身将被发布的目录。我们将使用/var/www,这是惯用的,也是使用其他Web服务器(如Apache或Nginx)时的默认路径。

$ sudo mkdir /var/www

这个目录应该由Caddy完全拥有。

$ sudo chown caddy:caddy /var/www

您现在已经为Caddy准备了必要的环境。在下一步中,我们将Caddy配置为系统服务,以确保它从系统启动开始,并可以使用systemctl进行管理。

第四步 - 将Caddy作为系统服务安装

虽然Caddy没有将自己安装为服务,但该项目提供了一个官方systemd单元文件。此文件假设我们在上一步中设置的目录结构,因此请确保您的配置匹配。

从官方Caddy存储库下载文件。curl命令的附加-o参数将文件保存在/etc/systemd/system/目录中并使其对systemd可见。

$ sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service

在我们继续之前,我们必须稍微修改文件,以使其使用我们的非特权caddy用户来运行服务器。

用您喜欢的文本编辑器打开文件:

$ sudo vi /etc/systemd/system/caddy.service

并找到负责指定用户帐户和组的片段:

; User and group the process will run as.
User=www-data
Group=www-data

将两个值更改为如下:

; User and group the process will run as.
User=caddy
Group=caddy

保存并关闭文件以退出。现在,服务文件已准备好与我们的安装一起使用。请让systemd知道新的服务文件。

$ sudo systemctl daemon-reload

然后,启用Caddy。

$ sudo systemctl enable caddy.service

您可以通过检查其状态来验证服务是否已正确加载启动。

$ sudo systemctl status caddy.service

输出结果应如下所示:

Caddy service status output
● caddy.service - Caddy HTTP/2 web server
   Loaded: loaded (/etc/systemd/system/caddy.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: https://caddyserver.com/docs

具体来说,它表示服务已加载启用,但尚未运行。我们暂时不会启动服务器,因为配置仍然不完整。

您现在已将Caddy配置为系统服务,该服务将在启动时自动启动,而无需手动运行。接下来,我们将允许Web流量通过防火墙。

第五步 - 允许HTTP和HTTPS连接(可选)

我们必须手动添加防火墙规则以通过Caddy传递的互联网流量。

Caddy使用HTTP和HTTPS协议为网站提供服务,因此我们需要允许访问适当的端口,以便从互联网上获取Caddy。

$ sudo firewall-cmd --permanent --zone=public --add-service=http 
$ sudo firewall-cmd --permanent --zone=public --add-service=https
$ sudo firewall-cmd --reload

所有三个命令都将输出以下结果:

firewall-cmd output
success

这将允许Caddy自由地为访问者提供网站。在下一步中,我们将创建一个示例网页并更新Caddyfile来提供服务,以便测试Caddy安装。

第六步 - 创建测试网页和Caddy文件

让我们首先创建一个非常简单的HTML页面,它将显示一个简单的Hello World!信息。这个命令将在我们之前创建的网站目录中创建一个文件index.html,里面只有一行文本<h1>Hello World!</h1>

$ echo '<h1>Hello World!</h1>' | sudo tee /var/www/index.html

接下来,我们将填写CaddyfileCaddyfile以其最简单的形式由一个或多个服务器块组成,每个服务器块定义单个网站的配置。 服务器块以地址定义开头,后跟大括号。在大括号内,您可以包含要应用于该网站的配置指令。

地址定义在表格protocol://host:port中指定。如果您将某些字段留空,Caddy将自行承担一些默认值。例如,如果您指定协议但不指定端口,则后者将自动派生(即假定端口80为HTTP,并假定端口443为HTTPS)。管理地址格式的规则在官方Caddyfile文档中有详细描述。

使用vi或您喜欢的文本编辑器打开在步骤2中创建的Caddyfile

$ sudo vi /etc/caddy/Caddyfile

粘贴以下内容:

http:// {
    root /var/www
    gzip
}

然后保存文件并退出。让我们来解释一下Caddyfile具体的作用。

在这里,http://用于地址定义。这告诉Caddy它应该绑定到端口80并使用普通HTTP协议(没有TLS加密)服务所有请求,无论用于连接到服务器的域名如何。这将允许您使用服务器的IP地址访问Caddy托管的网站。

在我们的服务器块的括号内,有两个指令:

  • root指令告诉Caddy网站文件的位置。在我们的示例/var/www 中,我们创建了测试页面。
  • gzip指令告诉Caddy使用Gzip压缩来加快网站速度。它不需要额外的配置。

配置文件准备就绪后,启动Caddy服务。

$ sudo systemctl start caddy

我们现在可以测试网站是否有效。为此,您使用服务器的公共IP地址。如果您不知道服务器的IP地址,可以使用curl -4 icanhazip.com。之后,访问http://your_server_ip来查看Hello World!网站。

这意味着您的Caddy安装正常。

结论

您现在已将Caddy配置正确地为您的网站提供服务。它将通过使用gzip压缩减少加载时间。

这是开始使用Caddy的一个简单示例。您可以在官方Caddy文档中阅读有关Caddy独特功能和配置指令的更多信息。


参考文献:《How To Host a Website with Caddy on CentOS 7》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jed的技术阶梯

Kafka 源码编译

进入 kafka 源码根目录下,执行gradle wrapper命令,下载 wrapper 包:

89530
来自专栏Java技术分享

手把手教你用Mysql-Cluster-7.5搭建数据库集群

当你的业务到达一定的当量,肯定需要一定数量的数据库来负载均衡你的数据库请求,我在之前的博客中已经说明了,如何实现负载均衡,但是还有一个问题就是数据同步,因为负载...

59780
来自专栏散尽浮华

linux下的缓存机制及清理buffer/cache/swap的方法梳理

1)缓存机制介绍 在Linux系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存...

65780
来自专栏vue学习

npm

本来打算暑假将自己每天学到的东西写下来,每天做成一篇文章的,结果现在每周能产出一篇文章就不错了。。。【掩面】。。今天学了点npm命令行操作,就写一下

12810
来自专栏码生

mac python virtualenv 安装虚拟环境

主要是为了解决在同一个系统中存在多个项目的情况, 采用虚拟的方式,为每个项目创建各自的环境,使各个项目不会相互干扰

23820
来自专栏Java技术分享

手把手教你用Mysql-Cluster-7.5搭建数据库集群

当你的业务到达一定的当量,肯定需要一定数量的数据库来负载均衡你的数据库请求,我在之前的博客中已经说明了,如何实现负载均衡,但是还有一个问题就是数据同步,因为负...

28490
来自专栏架构技术

使用docker+consul+nginx集成分布式的服务发现与注册架构

consul-Server 是运行在docker里的consul实例的server模式,可以通过DNS或者HTTP接口使服务注册并对容器进行健康状态检查,con...

13930
来自专栏北京马哥教育

Linux基础之软件包管理

概述 在redhat系列的发行版中,采用rpm软件包管理器,rpm原名是Red Hat Package Manager,后来当其他发行版也采用这种软件包管理机制...

37480
来自专栏Albert陈凯

Linux配置网卡

最简单的vi命令 vi 一个文件名以后 输入i才可以编辑 i 插入 键盘左上角的esc键可以退出 :wq 保存退出 :q! 不保存退出 上下左右可以调整光标 手...

54170
来自专栏Pythonista

Linux之文档与目录结构

Linux目录结构的组织形式和Windows有很大的不同。首先Linux没有“盘(C盘、D盘、E盘)”的概念。已经建立文件系统的硬盘分区被挂载到某一个目录下,用...

20930

扫码关注云+社区

领取腾讯云代金券