ค้นหาเว็บไซต์

ติดตั้ง Caddy Web Server บน Rocky/AlmaLinux 9|8


Caddy เป็นแพลตฟอร์มเว็บที่ทรงพลัง ใช้ง่าย และเป็นโอเพ่นซอร์ส ใช้สำหรับให้บริการเว็บไซต์ แอปพลิเคชัน และบริการต่างๆ Caddy เขียนด้วยภาษาโปรแกรม Go ทำให้เป็นหนึ่งในเว็บเซิร์ฟเวอร์ที่เร็วที่สุดในตลาดโอเพ่นซอร์ส มันเน้นไปที่ความปลอดภัย ประสิทธิภาพ และความง่ายในการใช้งาน และสามารถใช้ได้ทั้งโครงการง่ายๆ เช่น เว็บไซต์สแตติกธรรมดา หรือโฮสต์แอปพลิเคชันเว็บที่ซับซ้อนมากขึ้น

ทำไมต้องใช้ Caddy Web Server

  • HTTPS อัตโนมัติ: Caddy ทำการสร้างและต่ออายุใบรับรอง SSL/TLS สำหรับเว็บไซต์ของคุณโดยอัตโนมัติ
  • ความง่ายดายของมัน: Caddy ถูกออกแบบตามหลักการทำให้มันง่ายต่อการใช้งาน มันใช้ไฟล์การกำหนดค่าที่อ่านง่ายและเรียบง่ายเพียงไฟล์เดียวที่เรียกว่า Caddyfile
  • ประสิทธิภาพยอดเยี่ยม: Caddy ถูกออกแบบมาให้ใช้ทรัพยากรฮาร์ดแวร์น้อยที่สุดในขณะที่ยังเร็วและมีประสิทธิภาพ
  • สถาปัตยกรรมแบบโมดูลาร์: คุณสามารถเพิ่มขีดความสามารถของเว็บเซิร์ฟเวอร์ Caddy ได้โดยใช้ปลั๊กอินและส่วนขยาย
  • รองรับหลายแพลตฟอร์ม: Caddy สามารถทำงานบน Linux, Windows, macOS, หรือคอนเทนเนอร์ภายในเช่น Docker/Podman
  • ชุมชนขนาดใหญ่: Caddy มีชุมชนที่กระตือรือร้นและให้การสนับสนุน ซึ่งพร้อมช่วยเหลือคุณเมื่อคุณเริ่มต้นใช้งาน

ในส่วนต่อไปเราจะมาดูกันว่าคุณสามารถติดตั้ง กำหนดค่า และใช้งานเว็บเซิร์ฟเวอร์ Caddy บนระบบ Rocky Linux/AlmaLinux หรือ CentOS Stream Linux ได้อย่างไร เพื่อให้บทแนะนำนี้เป็นไปอย่างปฏิบัติได้จริงและมีความยืดหยุ่น เราจะทำการโฮสต์เว็บไซต์ WordPress พร้อมฐานข้อมูล MariaDB สำหรับบทแนะนำนี้เราใช้โดเมน blog.cloudlabske.com

ติดตั้งเซิร์ฟเวอร์เว็บ Caddy

ในการติดตั้งเซิร์ฟเวอร์เว็บ Caddy บนเครื่อง Rocky/AlmaLinux/CentOS Steam Linux เราจำเป็นต้องติดตั้ง copr ในระบบของเรา:

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

เปิดใช้งานที่เก็บ caddy โดยใช้ copr:

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

โฮสต์ WordPress โดยใช้ Caddy Web Server

มาติดตั้ง 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/

ตั้งค่า Caddy สำหรับ WordPress

เปิดไฟล์การตั้งค่า 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

เรียนรู้เพิ่มเติมจากหน้าคู่มือเริ่มต้นอย่างเป็นทางการ