Pasang Pelayan Web Caddy pada Rocky/AlmaLinux 9|8


Caddy adalah platform web yang kuat, mesra pengguna dan sumber terbuka yang digunakan untuk menghidangkan laman web, aplikasi, dan perkhidmatan. Caddy ditulis dalam bahasa pengaturcaraan Go menjadikannya salah satu pelayan web terpantas dalam pasaran sumber terbuka. Ia menumpukan pada keselamatan, prestasi, dan kemudahan penggunaan serta boleh digunakan untuk projek mudah seperti laman statik ringkas atau untuk menempatkan aplikasi web yang lebih kompleks.

Kenapa Menggunakan Pelayan Web Caddy

  • HTTPS Automatik: Caddy mengautomatikkan penjanaan dan pembaharuan sijil SSL/TLS untuk laman web anda.
  • Kesederhanaannya: Caddy direka berdasarkan prinsip membuatnya mudah. Ia menggunakan satu fail konfigurasi yang sederhana dan mudah dibaca manusia yang dipanggil Caddyfile
  • Prestasi Hebat: Caddy direka untuk menggunakan sumber perkakasan dengan minimum sambil tetap pantas dan cekap
  • Senibina modular: Anda boleh memanjangkan fungsi pelayan web Caddy menggunakan pemalam dan sambungan
  • Sokongan pelbagai platform: Caddy boleh dijalankan pada Linux, Windows, macOS, atau bekas dalaman seperti Docker/Podman
  • Komuniti besar: Caddy mempunyai komuniti yang aktif dan menyokong yang bersedia membantu anda ketika anda mula menggunakan.

Dalam bahagian seterusnya, kami akan melihat bagaimana anda boleh memasang, mengkonfigurasi dan menggunakan pelayan web Caddy dalam sistem Linux Rocky/AlmaLinux atau CentOS Stream. Untuk menjadikan tutorial ini praktikal dan dinamik, kami akan menempatkan laman web WordPress dengan pangkalan data MariaDB. Untuk tutorial ini, kami menggunakan domain blog.cloudlabske.com.

Pasang pelayan web Caddy

Untuk memasang pelayan web Caddy pada mesin Rocky/AlmaLinux/CentOS Steam Linux, kita perlu memasang copr dalam sistem kita:

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

Dayakan repositori caddy menggunakan copr:

sudo dnf copr enable @caddy/caddy

Tekan kekunci y pada papan kekunci anda apabila diminta:

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.

Setelah repositori diaktifkan, pasang pelayan web Caddy di sistem anda:

sudo dnf -y install caddy

Anda boleh mendapatkan pakej maklumat tambahan menggunakan rpm atau dnf

sudo dnf info caddy
# OR
rpm -qi caddy

Fail konfigurasi pelayan Caddy lalai terletak di /etc/caddy/Caddyfile. Anda boleh menyemak kandungannya:

cat /etc/caddy/Caddyfile

Untuk memulakan perkhidmatan, gunakan arahan systemctl:

sudo systemctl start caddy

Dayakan perkhidmatan untuk bermula semasa sistem dihidupkan.

sudo systemctl enable caddy

Memeriksa status perkhidmatan:

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

Mengehos WordPress menggunakan Pelayan Web Caddy

Mari kita pasang PHP dalam sistem anda.

sudo dnf -y install @php

Juga pasang sambungan PHP lain yang diperlukan.

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

Tetapkan pengguna caddy sebagai pemilik soket 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

Mulakan dan aktifkan perkhidmatan PHP FPM.

sudo systemctl enable --now php-fpm

Pasang pelayan pangkalan data MariaDB.

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

Buat pangkalan data untuk laman web WordPress anda:

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

Muat turun WordPress, nyahzip, dan pindahkan folder wordpress ke /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 

Konfigurasikan sambungan pangkalan data 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' );

Tetapkan kebenaran untuk direktori kepada pengguna caddy:

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

Konfigurasikan Caddy untuk WordPress

Buka fail konfigurasi Caddy untuk disunting

sudo vim /etc/caddy/Caddyfile

Ubah konfigurasi di bawah untuk disesuaikan dengan persekitaran anda. Tukar domain blog.cloudlabske.com, nama pengguna pentadbir

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

Buat direktori log.

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

Sahkan bahawa sintaks konfigurasi anda sah:

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

Mulakan semula pelayan web Caddy setelah anda mengesahkan konfigurasi adalah baik.

sudo systemctl restart caddy

Periksa status perkhidmatan Caddy dan cari baris penjanaan SSL. Perhatikan kejayaan penjanaan 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"}

Akses laman web WordPress di http://yourdomain dan ia sepatutnya akan dialihkan secara automatik ke https://yourdomain

Ketahui lebih lanjut dari halaman panduan rasmi Memulakan.