ติดตั้ง 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
เรียนรู้เพิ่มเติมจากหน้าคู่มือเริ่มต้นอย่างเป็นทางการ
