網站搜尋

在 Rocky/AlmaLinux 9|8 上安裝 Caddy 網頁伺服器


Caddy 是一個強大、易於使用且開源的網頁平台,用於提供網站、應用程式和服務。Caddy 使用 Go 程式語言編寫,使其成為開源市場中最快的網頁伺服器之一。它注重安全性、效能和易用性,可用於簡單的專案,如簡單的靜態網站,或用來托管更複雜的網頁應用程式。

為什麼使用 Caddy 網頁伺服器

  • 自動 HTTPS: Caddy 會自動為您的網站生成和續期 SSL/TLS 憑證。
  • 它的簡單性:Caddy 的設計原則是簡單化。它使用一個單一且簡單的人類可讀配置文件,稱為 Caddyfile
  • 超凡效能:Caddy 設計旨在以最少的硬體資源達到快速且高效的運行
  • 模組化架構:您可以透過插件和擴充功能來擴展 Caddy 網頁伺服器的功能
  • 多平台支援:Caddy 可以在 Linux、Windows、macOS 或像 Docker/Podman 這樣的內部容器上運行
  • 大型社群:Caddy 擁有活躍且支持度高的社群,能在你開始使用時提供幫助。

在接下來的章節中,我們將介紹如何在 Rocky Linux/AlmaLinux 或 CentOS Stream Linux 系統中安裝、配置及使用 Caddy 網頁伺服器。為了使本教程更實用且具動態性,我們將使用 MariaDB 資料庫來架設 WordPress 網站。在本教程中,我們使用的網域是 blog.cloudlabske.com.

安裝 Caddy 網頁伺服器

要在 Rocky/AlmaLinux/CentOS Stream Linux 機器上安裝 Caddy 網頁伺服器,我們需要在系統中安裝 copr:

sudo dnf -y install 'dnf-command(copr)'

使用 copr 啟用 caddy 軟體倉庫:

sudo dnf copr enable @caddy/caddy

當提示時,按下鍵盤上的 y 鍵:

Enabling a Copr repository. Please note that this repository is not part
of the main distribution, and quality may vary.

The Fedora Project does not exercise any power over the contents of
this repository beyond the rules outlined in the Copr FAQ at
<https://docs.pagure.org/copr.copr/user_documentation.html#what-i-can-build-in-copr>,
and packages are not held to any quality or security level.

Please do not file bug reports about these packages in Fedora
Bugzilla. In case of problems, contact the owner of this repository.

Do you really want to enable copr.fedorainfracloud.org/@caddy/caddy? [y/N]: y
Repository successfully enabled.

一旦啟用該軟體庫後,在您的系統中安裝 Caddy 網頁伺服器:

sudo dnf -y install caddy

你可以使用 rpm 或 dnf 來安裝額外的詳細資料套件

sudo dnf info caddy
# OR
rpm -qi caddy

預設的 Caddy 伺服器配置檔位於 /etc/caddy/Caddyfile。你可以檢查其內容:

cat /etc/caddy/Caddyfile

要啟動服務,請使用 systemctl 命令:

sudo systemctl start caddy

啟用服務以在系統啟動時啟動。

sudo systemctl enable caddy

檢查服務狀態:

$ systemctl status caddy
● caddy.service - Caddy
   Loaded: loaded (/usr/lib/systemd/system/caddy.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2024-08-02 17:43:26 UTC; 39s ago
     Docs: https://caddyserver.com/docs/
 Main PID: 42001 (caddy)
    Tasks: 7 (limit: 48750)
   Memory: 20.0M
   CGroup: /system.slice/caddy.service
           └─42001 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile

Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.719293,"msg":"adapted config to JSON","adapter":"caddyfile"}
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7204406,"logger":"admin","msg":"admin endpoint started","address":"localhost:2019","enforce_origin":false,"origins":["//localhost:2019",">
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"warn","ts":1722620606.7205217,"logger":"http.auto_https","msg":"server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server>
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7206764,"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]}
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7208471,"msg":"autosaved config (load with --resume flag)","file":"/var/lib/caddy/.config/caddy/autosave.json"}
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7209103,"msg":"serving initial configuration"}
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7212656,"logger":"tls.cache.maintenance","msg":"started background certificate maintenance","cache":"0xc000488e00"}
Aug 02 17:43:26 rocky8.computingforgeeks.com systemd[1]: Started Caddy.
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7246072,"logger":"tls","msg":"cleaning storage unit","storage":"FileStorage:/var/lib/caddy/.local/share/caddy"}
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7248337,"logger":"tls","msg":"finished cleaning storage units"}

使用 Caddy 網頁伺服器架設 WordPress

讓我們在您的系統上安裝 PHP。

sudo dnf -y install @php

也安裝其他必要的 PHP 擴充功能。

sudo dnf install php-{cli,fpm,mysqlnd,zip,gd,mbstring,curl,xml,pear,bcmath,json}

將 caddy 使用者設為 FPM 套接字的擁有者。

$ sudo vim /etc/php-fpm.d/www.conf
user = caddy
group = caddy
listen = /run/php-fpm/www.sock
listen.owner = caddy
listen.group = caddy
listen.mode = 0660
listen.acl_users = apache,nginx,caddy

啟動並啟用 PHP FPM 服務。

sudo systemctl enable --now php-fpm

安裝 MariaDB 資料庫伺服器。

sudo dnf -y install @mariadb
sudo systemctl enable --now mariadb
sudo mysql -u root

為您的 WordPress 網站建立資料庫:

CREATE DATABASE wp_db;
GRANT ALL PRIVILEGES ON wp_db.* to 'wp_user'@'localhost' IDENTIFIED BY 'DBStr%ngPassw0rd';
FLUSH PRIVILEGES;
EXIT

下載 WordPress,解壓縮,然後將 wordpress 資料夾移動到 /var/www

wget wordpress.org/latest.tar.gz
tar xvf latest.tar.gz
sudo mv wordpress /var/www
sudo cp  /var/www/wordpress/wp-config-sample.php  /var/www/wordpress/wp-config.php 

設定 WordPress 資料庫連線

$ sudo vim /var/www/wordpress/wp-config.php
// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wp_db' );

/** Database username */
define( 'DB_USER', 'wp_user' );

/** Database password */
define( 'DB_PASSWORD', 'DBStr%ngPassw0rd' );

/** Database hostname */
define( 'DB_HOST', 'localhost' );

為目錄設定 caddy 使用者的權限:

sudo chown -R caddy:caddy /var/www/wordpress/

為 WordPress 配置 Caddy

打開 Caddy 配置文件進行編輯

sudo vim /etc/caddy/Caddyfile

請修改以下配置以符合您的環境。更改網域 blog.cloudlabske.com、管理員用戶名稱

blog.cloudlabske.com {
	tls [email 
	log {
		output file /var/log/caddy/wordpress.log
		format console
	}

	root * /var/www/wordpress
	encode gzip
	file_server
	php_fastcgi unix//run/php-fpm/www.sock

	@disallowed {
		path /xmlrpc.php
		path *.sql
		path /wp-content/uploads/*.php
	}

	rewrite @disallowed '/index.php'
}

建立日誌目錄。

sudo mkdir /var/log/caddy/
sudo chown -R caddy:caddy  /var/log/caddy/

確認您的配置語法是否有效:

$ sudo caddy validate --config /etc/caddy/Caddyfile
2024/08/03 07:25:16.349	INFO	using config from file	{"file": "/etc/caddy/Caddyfile"}
2024/08/03 07:25:16.351	INFO	adapted config to JSON	{"adapter": "caddyfile"}
2024/08/03 07:25:16.351	INFO	http.auto_https	server is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS	{"server_name": "srv0", "https_port": 443}
2024/08/03 07:25:16.351	INFO	http.auto_https	enabling automatic HTTP->HTTPS redirects	{"server_name": "srv0"}
2024/08/03 07:25:16.351	WARN	http.auto_https	server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server	{"server_name": "srv1", "http_port": 80}
2024/08/03 07:25:16.351	INFO	tls.cache.maintenance	started background certificate maintenance	{"cache": "0xc000157680"}
2024/08/03 07:25:16.352	INFO	tls.cache.maintenance	stopped background certificate maintenance	{"cache": "0xc000157680"}

確認配置無誤後,重啟 Caddy 網頁伺服器。

sudo systemctl restart caddy

檢查 Caddy 服務狀態並查看 SSL 生成的相關訊息。注意是否成功生成 Let’s Encrypt 證書:

$ systemctl status caddy
● caddy.service - Caddy
   Loaded: loaded (/usr/lib/systemd/system/caddy.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2024-08-03 07:23:34 UTC; 5s ago
     Docs: https://caddyserver.com/docs/
 Main PID: 45140 (caddy)
    Tasks: 7 (limit: 48750)
   Memory: 19.6M
   CGroup: /system.slice/caddy.service
           └─45140 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile

Aug 03 07:23:36 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669816.0895815,"logger":"tls.issuance.acme","msg":"served key authentication","identifier":"blog.cloudlabske.com","challenge":"http-01","remote">
Aug 03 07:23:36 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669816.2393315,"logger":"tls.issuance.acme","msg":"served key authentication","identifier":"blog.cloudlabske.com","challenge":"http-01","remote">
Aug 03 07:23:36 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669816.3801627,"logger":"tls.issuance.acme","msg":"served key authentication","identifier":"blog.cloudlabske.com","challenge":"http-01","remote">
Aug 03 07:23:36 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669816.7106369,"logger":"tls.issuance.acme.acme_client","msg":"authorization finalized","identifier":"blog.cloudlabske.com","authz_status":"vali>
Aug 03 07:23:36 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669816.7106667,"logger":"tls.issuance.acme.acme_client","msg":"validations succeeded; finalizing order","order":"https://acme-v02.api.letsencryp>
Aug 03 07:23:37 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669817.3649049,"logger":"tls.issuance.acme.acme_client","msg":"got renewal info","names":["blog.cloudlabske.com"],"window_start":1727765075,"win>
Aug 03 07:23:37 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669817.666609,"logger":"tls.issuance.acme.acme_client","msg":"got renewal info","names":["blog.cloudlabske.com"],"window_start":1727765075,"wind>
Aug 03 07:23:37 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669817.6666691,"logger":"tls.issuance.acme.acme_client","msg":"successfully downloaded available certificate chains","count":2,"first_url":"http>
Aug 03 07:23:37 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669817.6672106,"logger":"tls.obtain","msg":"certificate obtained successfully","identifier":"blog.cloudlabske.com","issuer":"acme-v02.api.letsen>
Aug 03 07:23:37 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669817.6673443,"logger":"tls.obtain","msg":"releasing lock","identifier":"blog.cloudlabske.com"}

訪問 WordPress 網站 http://yourdomain,它應該會自動重定向到 https://yourdomain

從入門官方指南頁面了解更多資訊。