Tìm kiếm trang web

Cài đặt Máy chủ Web Caddy trên Rocky/AlmaLinux 9|8


Caddy là một nền tảng web mã nguồn mở mạnh mẽ, thân thiện với người dùng, được sử dụng để phục vụ các trang web, ứng dụng và dịch vụ. Caddy được viết bằng ngôn ngữ lập trình Go, khiến nó trở thành một trong những máy chủ web nhanh nhất trên thị trường mã nguồn mở. Nó tập trung vào bảo mật, hiệu suất và sự dễ sử dụng, và có thể được sử dụng cho các dự án đơn giản như các trang tĩnh đơn giản hoặc để lưu trữ các ứng dụng web phức tạp hơn.

Tại sao nên sử dụng Máy chủ Web Caddy

  • HTTPS Tự động: Caddy thực hiện việc tự động tạo và gia hạn chứng chỉ SSL/TLS cho các trang web của bạn.
  • Sự Đơn Giản: Caddy được thiết kế dựa trên nguyên tắc làm cho mọi thứ trở nên đơn giản. Nó sử dụng một tệp cấu hình duy nhất, đơn giản và dễ đọc dành cho con người có tên là Caddyfile
  • Hiệu Suất Vượt Trội: Caddy được thiết kế để sử dụng tối thiểu tài nguyên phần cứng trong khi vẫn nhanh và hiệu quả
  • Kiến trúc mô-đun: Bạn có thể mở rộng các chức năng của máy chủ web Caddy bằng cách sử dụng các plugin và tiện ích mở rộng
  • Hỗ trợ đa nền tảng: Caddy có thể chạy trên Linux, Windows, macOS, hoặc trong các container nội bộ như Docker/Podman
  • Cộng đồng lớn: Caddy có một cộng đồng năng động và hỗ trợ, luôn sẵn sàng giúp bạn khi mới bắt đầu.

Trong các phần tiếp theo, chúng ta sẽ tìm hiểu cách cài đặt, cấu hình và sử dụng máy chủ web Caddy trên các hệ thống Rocky Linux/AlmaLinux hoặc CentOS Stream Linux. Để làm cho hướng dẫn này thực tế và sinh động, chúng ta sẽ lưu trữ website WordPress với cơ sở dữ liệu MariaDB. Trong hướng dẫn này, chúng tôi sử dụng tên miền blog.cloudlabske.com.

Cài đặt máy chủ web Caddy

Để cài đặt máy chủ web Caddy trên máy Rocky/AlmaLinux/CentOS Stream Linux, chúng ta cần cài đặt copr trên hệ thống của mình:

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

Kích hoạt kho lưu trữ caddy bằng cách sử dụng copr:

sudo dnf copr enable @caddy/caddy

Nhấn phím y trên bàn phím khi được yêu cầu:

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.

Khi kho lưu trữ đã được kích hoạt, hãy cài đặt máy chủ web Caddy vào hệ thống của bạn:

sudo dnf -y install caddy

Bạn có thể nhận gói chi tiết bổ sung bằng cách sử dụng rpm hoặc dnf

sudo dnf info caddy
# OR
rpm -qi caddy

Tệp cấu hình mặc định của máy chủ Caddy nằm tại /etc/caddy/Caddyfile. Bạn có thể kiểm tra nội dung:

cat /etc/caddy/Caddyfile

Để khởi động dịch vụ, sử dụng lệnh systemctl:

sudo systemctl start caddy

Kích hoạt dịch vụ để khởi động cùng hệ thống.

sudo systemctl enable caddy

Đang kiểm tra trạng thái dịch vụ:

$ 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"}

Lưu trữ WordPress sử dụng Máy chủ Web Caddy

Hãy cài đặt PHP trên hệ thống của bạn.

sudo dnf -y install @php

Cũng cài đặt các tiện ích mở rộng PHP cần thiết khác.

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

Đặt người dùng caddy làm chủ sở hữu của socket 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

Khởi động và bật dịch vụ PHP FPM.

sudo systemctl enable --now php-fpm

Cài đặt máy chủ cơ sở dữ liệu MariaDB.

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

Tạo cơ sở dữ liệu cho website WordPress của bạn:

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

Tải wordpress, giải nén và di chuyển thư mục wordpress vào /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 

Cấu hình kết nối cơ sở dữ liệu 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' );

Đặt quyền cho thư mục cho người dùng caddy:

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

Cấu hình Caddy cho WordPress

Mở tệp cấu hình Caddy để chỉnh sửa

sudo vim /etc/caddy/Caddyfile

Chỉnh sửa các cấu hình dưới đây để phù hợp với môi trường của bạn. Thay đổi tên miền blog.cloudlabske.com, tên người dùng quản trị

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'
}

Tạo thư mục nhật ký.

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

Xác nhận rằng cú pháp cấu hình của bạn hợp lệ:

$ 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"}

Khởi động lại máy chủ web Caddy sau khi bạn đã xác nhận cấu hình ổn.

sudo systemctl restart caddy

Kiểm tra trạng thái dịch vụ Caddy và tìm các dòng tạo SSL. Chú ý đến việc tạo Let’s Encrypt thành công:

$ 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"}

Truy cập trang web WordPress tại http://yourdomain và nó sẽ tự động chuyển hướng đến https://yourdomain

Tìm hiểu thêm từ trang hướng dẫn chính thức Bắt đầu.