前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在CentOS 7上托管Caddy的网站

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

原创
作者头像
一步
发布2018-08-13 11:49:02
1.6K0
发布2018-08-13 11:49:02
举报

介绍

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

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

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

准备

要学习本教程,您需要:

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

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

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

代码语言:javascript
复制
$ curl -s https://getcaddy.com | bash

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

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

命令输出结果如下所示:

代码语言:javascript
复制
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二进制文件是否已到位。

代码语言:javascript
复制
$ which caddy

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

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

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

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

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

代码语言:javascript
复制
$ 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它应该服务哪些网站以及如何服务。

代码语言:javascript
复制
$ sudo mkdir /etc/caddy

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

代码语言:javascript
复制
$ sudo chown -R root:caddy /etc/caddy

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

代码语言:javascript
复制
$ sudo touch /etc/caddy/Caddyfile

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

代码语言:javascript
复制
$ sudo mkdir /etc/ssl/caddy

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

代码语言:javascript
复制
$ sudo chown -R caddy:root /etc/ssl/caddy

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

代码语言:javascript
复制
$ sudo chmod 0770 /etc/ssl/caddy

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

代码语言:javascript
复制
$ sudo mkdir /var/www

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

代码语言:javascript
复制
$ sudo chown caddy:caddy /var/www

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

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

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

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

代码语言:javascript
复制
$ sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service

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

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

代码语言:javascript
复制
$ sudo vi /etc/systemd/system/caddy.service

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

代码语言:javascript
复制
; User and group the process will run as.
User=www-data
Group=www-data

将两个值更改为如下:

代码语言:javascript
复制
; User and group the process will run as.
User=caddy
Group=caddy

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

代码语言:javascript
复制
$ sudo systemctl daemon-reload

然后,启用Caddy。

代码语言:javascript
复制
$ sudo systemctl enable caddy.service

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

代码语言:javascript
复制
$ sudo systemctl status caddy.service

输出结果应如下所示:

代码语言:javascript
复制
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。

代码语言:javascript
复制
$ sudo firewall-cmd --permanent --zone=public --add-service=http 
$ sudo firewall-cmd --permanent --zone=public --add-service=https
$ sudo firewall-cmd --reload

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

代码语言:javascript
复制
firewall-cmd output
success

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

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

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

代码语言:javascript
复制
$ echo '<h1>Hello World!</h1>' | sudo tee /var/www/index.html

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

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

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

代码语言:javascript
复制
$ sudo vi /etc/caddy/Caddyfile

粘贴以下内容:

代码语言:javascript
复制
http:// {
    root /var/www
    gzip
}

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

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

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

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

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

代码语言:javascript
复制
$ 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》

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第一步 - 安装Caddy二进制文件
  • 第二步 - 为Caddy创建用户和组
  • 第三步 - 设置必要的目录
  • 第四步 - 将Caddy作为系统服务安装
  • 第五步 - 允许HTTP和HTTPS连接(可选)
  • 第六步 - 创建测试网页和Caddy文件
  • 结论
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档