Caddy Web Server là một máy chủ web mã nguồn mở hiện đại được viết bằng ngôn ngữ GO. Nó không có bất kỳ sự phụ thuộc nào và chạy trên một tệp nhị phân tĩnh và tự động tạo và gia hạn chứng chỉ SSL. Nó có thể hoạt động như một máy chủ tệp tĩnh, proxy ngược có thể mở rộng hoặc một máy chủ động mạnh mẽ và có thể được mở rộng thông qua các plugin. Nó cũng bao gồm hỗ trợ cho các giao thức HTTP/2 và HTTP/3 thử nghiệm.
Trong hướng dẫn này, bạn sẽ cài đặt và cấu hình Caddy để chạy cùng với PHP và MariaDB trên máy chủ chạy Ubuntu 20.04.
Kiểm tra trạng thái của tường lửa.
Bạn sẽ thấy nội dung tương tự như sau.
Cho phép các cổng HTTP và HTTPs.
Kiểm tra lại trạng thái để xác nhận.
Đối với mục đích của hướng dẫn này, chúng tôi sẽ sử dụng kho lưu trữ Caddy chính thức cho các hệ thống dựa trên Ubuntu/Debian.
Thêm Kho lưu trữ vào danh sách.
Điều này sẽ tạo một tệp kho lưu trữ caddy trong thư mục
Cài đặt Caddy.
Điều này sẽ tự động cài đặt và chạy máy chủ web Caddy. Mở http:// trong trình duyệt của bạn và bạn sẽ thấy trang sau.
Cài đặt PHP 7.4 cùng với một số gói bổ sung.
Kiểm tra xem PHP có hoạt động chính xác không.
Bạn sẽ thấy đầu ra tương tự.
Thêm kho lưu trữ chính thức của Mariadb. Bạn có thể chọn một bản sao khác gần với vị trí máy chủ của bạn hơn từ trang kho lưu trữ của MariaDB.
Để cài đặt MariaDB, hãy đưa ra lệnh sau.
Kiểm tra xem MariaDB đã được cài đặt đúng chưa.
Bạn sẽ thấy kết quả sau.
Kích hoạt dịch vụ MariaDB.
Với MariaDB 10.4, giờ đây bạn sẽ được hỏi giữa việc sử dụng mật khẩu gốc hay plugin
Nhấn Enter sẽ chọn tùy chọn mặc định (tùy chọn được viết hoa, trong trường hợp này là Y).
Đăng nhập vào SQL Shell của MariaDB.
Nhập mật khẩu gốc của bạn khi được nhắc.
Tạo cơ sở dữ liệu thử nghiệm và người dùng có quyền truy cập. Thay thế
Thoát khỏi MySQL Shell.
Trước khi cấu hình Caddy, chúng ta nên tạo thư mục gốc cho trang web của mình.
Chúng ta cũng cần tạo một thư mục để lưu trữ các tệp nhật ký cho Caddy.
Máy chủ Caddy khi cài đặt sẽ tạo một người dùng
Trong quá trình cài đặt, Caddy đã tạo một Caddyfile mặc định tại
Nó sẽ trông giống như sau.
Thay thế mã trên bằng mã sau.
Chúng ta hãy xem qua tất cả các phần của Caddyfile bên dưới.
Đầu tiên, chúng ta phải thay đổi tên người dùng cho quy trình PHP. Mở tệp
Tìm các dòng
Ngoài ra, hãy tìm các dòng
Lưu tệp bằng cách nhấn Ctrl+X và nhập Y khi được nhắc.
Khởi động lại quy trình PHP-fpm.
Đảm bảo tên miền của bạn được trỏ đến địa chỉ IP của máy chủ.
Khởi động lại máy chủ Caddy để áp dụng các thay đổi trong Caddyfile mà chúng ta đã tạo ở trên.
Kiểm tra trạng thái của máy chủ Caddy để đảm bảo nó hoạt động bình thường.
Bạn có thể thấy ở trên rằng Caddy đã tự động tạo chứng chỉ khi chúng tôi khởi động lại máy chủ lần đầu tiên sau khi tạo Caddyfile.
Chúng ta hãy tạo một trang thử nghiệm để xác minh rằng Caddy có thể hiển thị PHP và kết nối với cơ sở dữ liệu MariaDB.
Dán mã sau vào trình chỉnh sửa. Thay thế các trường
Lưu tệp bằng cách nhấn Ctrl+X và nhập Y khi được nhắc.
Truy cập trong trình duyệt web. Bạn sẽ nhận được trang sau.
Nếu bạn thấy thông báo lỗi hoặc nếu trang không tải được, hãy kiểm tra lại cấu hình của bạn
Xóa tệp kiểm tra khi bạn đã hài lòng.
Trong hướng dẫn này, bạn sẽ cài đặt và cấu hình Caddy để chạy cùng với PHP và MariaDB trên máy chủ chạy Ubuntu 20.04.
Điều kiện tiên quyết
- Máy chủ Ubuntu 20.04 có tài khoản không phải root có quyền sudo.
- Tên miền đã đăng ký đầy đủ trỏ đến địa chỉ IP của máy chủ của bạn.
Bước 1 - Cấu hình Tường lửa
Nếu bạn đang sử dụng UFW (Tường lửa đơn giản), bạn cần cấu hình để cho phép truy cập vào các cổng HTTP và HTTPS để máy chủ hoạt động.Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo ufw status
Mã:
Trạng thái: hoạt độngĐể hành động từ-- ------ ----OpenSSH CHO PHÉP bất kỳ nơi nàoOpenSSH (v6) CHO PHÉP bất kỳ nơi nào (v6)
Mã:
$ sudo ufw allow http$ sudo ufw allow https
Mã:
$ sudo ufw statusTrạng thái: hoạt độngĐể hành động từ-- ------ ----OpenSSH CHO PHÉP bất kỳ nơi nào80/tcp CHO PHÉP Bất kỳ nơi nào443/tcp ALLOW Bất kỳ nơi nàoOpenSSH (v6) ALLOW Bất kỳ nơi nào (v6)80/tcp (v6) ALLOW Bất kỳ nơi nào (v6)443/tcp (v6) ALLOW Bất kỳ nơi nào (v6)
Bước 2 - Cài đặt Caddy
Có một số cách để cài đặt Caddy bao gồm cài đặt docker, sử dụng kho lưu trữ chính thức hoặc xây dựng từ nguồn. Phương pháp xây dựng từ nguồn hữu ích nếu bạn muốn chức năng chỉ có thể được thêm thông qua mô-đun/plugin của bên thứ 3.Đối với mục đích của hướng dẫn này, chúng tôi sẽ sử dụng kho lưu trữ Caddy chính thức cho các hệ thống dựa trên Ubuntu/Debian.
Thêm Kho lưu trữ vào danh sách.
Mã:
$ echo "deb [trusted=yes] https://apt.fury.io/caddy/ /" | sudo tee -a /etc/apt/sources.list.d/caddy-fury.list$ sudo apt update
/etc/apt/sources.list.d
với vị trí đến kho lưu trữ của Caddy.Cài đặt Caddy.
Mã:
$ sudo apt install caddy
Bước 3 - Cài đặt PHP
Cài đặt kho lưu trữ PHP của Ondrej.
Mã:
$ sudo add-apt-repository ppa:ondrej/php
Mã:
$ sudo apt install php-cli php-fpm php-mysql
Mã:
$ php --version
Mã:
PHP 7.4.6 (cli) (được xây dựng: Ngày 14 tháng 5 năm 2020 10:03:35) ( NTS )Bản quyền (c) The PHP GroupZend Engine v3.4.0, Bản quyền (c) Zend Technologies với Zend OPcache v7.4.6, Bản quyền (c), của Zend Technologies
Bước 4 - Cài đặt MariaDB
MariaDB là một sự thay thế trực tiếp cho MySQL, có nghĩa là các lệnh để chạy và vận hành MariaDB giống như các lệnh dành cho MySQL.Thêm kho lưu trữ chính thức của Mariadb. Bạn có thể chọn một bản sao khác gần với vị trí máy chủ của bạn hơn từ trang kho lưu trữ của MariaDB.
Mã:
$ sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'$ sudo add-apt-repository 'deb [arch=amd64] http://mirror.lstn.net/mariadb/repo/10.4/ubuntu focal main'
Mã:
$ sudo apt install mariadb-server
Mã:
$ mysql --version
Mã:
mysql Ver 15.1 Distrib 10.4.13-MariaDB, dành cho debian-linux-gnu (x86_64) bằng cách sử dụng readline 5.2
Mã:
$ sudo systemctl enable mariadb
Bước 5 - Cấu hình MariaDB
Chạy lệnh sau để thực hiện cấu hình mặc định như cung cấp mật khẩu gốc, xóa người dùng ẩn danh, không cho phép đăng nhập gốc từ xa và xóa bảng thử nghiệm.
Mã:
$ sudo mysql_secure_installation
unix_socket
. Plugin unix_socket
cho phép bạn đăng nhập vào MariaDB bằng thông tin đăng nhập người dùng Linux của mình. Mặc dù vậy, plugin này được coi là an toàn hơn vì bạn sẽ cần tên người dùng/mật khẩu truyền thống để sử dụng các ứng dụng của bên thứ 3 như phpMyAdmin. Chúng tôi sẽ sử dụng plugin unix_socket
cho hướng dẫn này. Bạn vẫn có thể sử dụng phpMyAdmin thông qua bất kỳ người dùng nào mà bạn tạo cho cơ sở dữ liệu của mình.Nhấn Enter sẽ chọn tùy chọn mặc định (tùy chọn được viết hoa, trong trường hợp này là Y).
Mã:
LƯU Ý: KHUYẾN NGHỊ CHẠY TẤT CẢ CÁC PHẦN CỦA TỪNG PHẦN NÀY CHO TẤT CẢ CÁC MÁY CHỦ MariaDB ĐANG SỬ DỤNG TRONG SẢN XUẤT! VUI LÒNG ĐỌC KỸ TỪNG BƯỚC!Để đăng nhập vào MariaDB để bảo mật, chúng ta sẽ cầnmật khẩu hiện tại cho người dùng root. Nếu bạn vừa cài đặt MariaDB vàchưa đặt mật khẩu root, bạn chỉ cần nhấn enter tại đây.Nhập mật khẩu hiện tại cho root (enter nếu không có): [NHẤN ENTER]OK, đã sử dụng mật khẩu thành công, tiếp tục...Đặt mật khẩu root hoặc sử dụng unix_socket đảm bảo rằng không aicó thể đăng nhập vào người dùng root MariaDB mà không có quyền thích hợp.Tài khoản root của bạn đã được bảo vệ, do đó bạn có thể trả lời 'n' một cách an toàn.Chuyển sang xác thực unix_socket [Y/n] [NHẤN ENTER]Đã bật thành công!Đang tải lại bảng đặc quyền.. ... Thành công!Tài khoản root của bạn đã được bảo vệ, do đó bạn có thể trả lời 'n' một cách an toàn.Thay đổi mật khẩu root? [Y/n] [TRẢ LỜI n]... bỏ qua.Theo mặc định, cài đặt MariaDB có một người dùng ẩn danh, cho phép bất kỳ aiđăng nhập vào MariaDB mà không cần phải tạo tài khoản người dùng chohọ. Điều này chỉ nhằm mục đích thử nghiệm và để quá trình cài đặtdiễn ra suôn sẻ hơn một chút. Bạn nên xóa những người dùng này trước khi chuyển sangmôi trường sản xuất.Xóa người dùng ẩn danh? [Y/n] [NHẤN ENTER] ... Thành công!Thông thường, root chỉ được phép kết nối từ 'localhost'. Điều nàyđảm bảo rằng không ai có thể đoán được mật khẩu root từ mạng.Không cho phép root đăng nhập từ xa? [Y/n] [NHẤN ENTER] ... Thành công!Theo mặc định, MariaDB đi kèm với một cơ sở dữ liệu có tên là 'test' mà bất kỳ ai cũng có thểtruy cập. Cơ sở dữ liệu này cũng chỉ dành cho mục đích thử nghiệm và cần phải xóatrước khi chuyển sang môi trường sản xuất.Xóa cơ sở dữ liệu thử nghiệm và truy cập vào cơ sở dữ liệu đó? [Y/n] [NHẤN ENTER] \- Đang xóa cơ sở dữ liệu thử nghiệm... ... Thành công! \- Xóa các đặc quyền trên cơ sở dữ liệu thử nghiệm... ... Thành công!Tải lại các bảng đặc quyền sẽ đảm bảo rằng tất cả các thay đổi đã thực hiện cho đến naysẽ có hiệu lực ngay lập tức.Tải lại các bảng đặc quyền ngay bây giờ? [Y/n] [NHẤN ENTER] ... Thành công!Đang dọn dẹp...Xong! Nếu bạn đã hoàn tất tất cả các bước trên, thì cài đặt MariaDBcủa bạn hiện đã an toàn.Cảm ơn bạn đã sử dụng MariaDB!
Mã:
$ sudo mysql
Tạo cơ sở dữ liệu thử nghiệm và người dùng có quyền truy cập. Thay thế
database
và user
bằng lựa chọn của bạn. Thay thế password
bằng mật khẩu mạnh.
Mã:
CREATE DATABASE testdb;CREATE USER 'user' IDENTIFIED BY 'password';GRANT ALL PRIVILEGES ON testdb.* TO 'user';
Mã:
exit
Bước 6 - Cấu hình Caddy
Caddy có thể được cấu hình theo nhiều cách - lệnh gọi API, tệp JSON hoặc tệp Caddy. Caddyfile là cách dễ nhất để cấu hình Caddy mà chúng ta sẽ sử dụng trong hướng dẫn của mình.Trước khi cấu hình Caddy, chúng ta nên tạo thư mục gốc cho trang web của mình.
Mã:
$ sudo mkdir -p /var/www/example.com/html
-p
cờ cũng tạo bất kỳ thư mục cha nào bị thiếu.Chúng ta cũng cần tạo một thư mục để lưu trữ các tệp nhật ký cho Caddy.
Mã:
$ sudo mkdir /var/log/caddy
caddy
để xử lý các tác vụ cho người dùng đó. Chúng ta cần cấp quyền cho thư mục nhật ký để Caddy có thể truy cập và ghi vào đó.
Mã:
$ sudo chown -R caddy:caddy /var/log/caddy
/etc/caddy/Caddyfile
. Hãy mở nó ra.
Mã:
$ sudo nano /etc/caddy/Caddyfile
Mã:
# Caddyfile là một cách dễ dàng để cấu hình máy chủ web Caddy của bạn.## Trừ khi tệp bắt đầu bằng khối tùy chọn toàn cục, dòng đầu tiên# không có chú thích luôn là địa chỉ trang web của bạn.## Để sử dụng tên miền của riêng bạn (với HTTPS tự động), trước tiên hãy# đảm bảo rằng các bản ghi DNS A/AAAA của miền của bạn được trỏ đúng đến# IP công khai của máy này, sau đó thay thế dòng bên dưới bằng# tên miền của bạn.:80# Đặt đường dẫn này đến thư mục trang web của bạn.root * /usr/share/caddy# Bật máy chủ tệp tĩnh.file_server# Một tác vụ phổ biến khác là thiết lập proxy ngược:# reverse_proxy localhost:8080# Hoặc phục vụ một trang web PHP thông qua php-fpm:# php_fastcgi localhost:9000# Tham khảo tài liệu Caddy để biết thêm thông tin:# https://caddyserver.com/docs/caddyfile
:80
yêu cầu Caddy phục vụ mọi thứ qua cổng số 80. root
thiết lập đường dẫn cho thư mục gốc của trang web của bạn. file_server
cho phép Caddy chạy như một máy chủ tệp tĩnh.Thay thế mã trên bằng mã sau.
Mã:
{ experimental_http3}example.com { root * /var/www/example.com/html log { tệp đầu ra /var/log/caddy/example.com.access.log { roll_size 3MiB roll_keep 5 roll_keep_for 48h } format console } encode gzip zstd php_fastcgi unix//run/php/php7.4-fpm.sock tls [emailprotected] { protocols tls1.2 tls1.3 }}
- Khối đầu tiên trong bất kỳ Caddyfile nào là khối toàn cục trừ khi bạn chỉ định tên máy chủ thì khối đó sẽ trở thành khối site. Khối toàn cục mang theo các chỉ thị được áp dụng cho tất cả các trang web mà bạn lưu trữ dưới máy chủ. Trong ví dụ của chúng tôi, chúng tôi đã bật hỗ trợ cho giao thức HTTP/3 thử nghiệm. Khối toàn cục hoàn toàn tùy chọn và bạn luôn có thể bắt đầu Caddyfile của mình bằng khối trang web trực tiếp.
- Khối tiếp theo là khối trang web. Nếu bạn chỉ có 1 trang web trên máy chủ, bạn không cần phải bao gồm cấu hình của mình trong một khối nhưng nếu bạn sẽ lưu trữ nhiều trang web, bạn nên lưu trữ cấu hình của từng trang web trong khối riêng của nó. Một khối trang web được đánh dấu bằng dấu ngoặc nhọn. Mỗi khối trang web bắt đầu bằng tên máy chủ của trang web.
-
log
cho phép và cấu hình ghi nhật ký yêu cầu HTTP. Nếu không có chỉ thịlog
, Caddy sẽ không ghi nhật ký bất cứ thứ gì.output
cấu hình nơi ghi tệp nhật ký vào.format
mô tả cách mã hóa hoặc định dạng nhật ký.console
định dạng mục nhập nhật ký để con người có thể đọc được. -
encode
chỉ thị ở đây cho phép nén Gzip và Zstandard cho trang web. -
php_fastcgi
ủy quyền các yêu cầu đến máy chủ PHP FastCGI nhưphp-fpm
. Ở đây chúng tôi đang lắng nghe các yêu cầu qua một socket Unix. -
tls
khối cấu hình các thiết lập liên quan đến chứng chỉ SSL và bảo mật. Ở đây, chúng tôi đã bật hỗ trợ cho cả giao thức TLSv1.2 và TLSv1.3. Theo mặc định, Caddy hỗ trợ TLS v1.2 ngay khi cài đặt. Caddy cũng tự động tạo chứng chỉ SSL cho tất cả các trang web. Nếu bạn không muốn Caddy tạo SSL cho mình, bạn có thể thực hiện bằng cách sử dụng địa chỉ IP thay vì tên máy chủ hoặc chỉ định URL đầy đủ, tức là http://example.com. Trong những trường hợp như vậy, Caddy sẽ không tạo chứng chỉ SSL.
Bước 7 - Cấu hình PHP
Bây giờ, Caddyfile của chúng ta đã sẵn sàng, đã đến lúc cấu hình PHP.Đầu tiên, chúng ta phải thay đổi tên người dùng cho quy trình PHP. Mở tệp
/etc/php-fpm.d/www.conf
.
Mã:
$ sudo nano /etc/php/7.4/fpm/pool.d/www.conf
user=www-data
và group=www-data
trong tệp và đổi chúng thành caddy
.
Mã:
...; Người dùng/nhóm quy trình Unix; Lưu ý: Người dùng là bắt buộc. Nếu nhóm không được đặt, nhóm người dùng mặc định; sẽ được sử dụng.; RPM: người dùng apache được chọn để cung cấp quyền truy cập vào cùng thư mục với httpduser = caddy; RPM: Giữ cho một nhóm được phép ghi vào thư mục nhật ký.group = caddy...
listen.owner=www-data
và listen.group=www-data
trong tệp và đổi chúng thành caddy
.
Mã:
listen.owner = caddylisten.group = caddy
Khởi động lại quy trình PHP-fpm.
Mã:
$ sudo systemctl restart php7.4-fpm
Bước 8 - Khởi chạy trang web demo
Bây giờ chúng ta đã tạo Caddyfile và cấu hình PHP để chạy với máy chủ, đã đến lúc tạo và khởi chạy trang web demo.Đảm bảo tên miền của bạn được trỏ đến địa chỉ IP của máy chủ.
Khởi động lại máy chủ Caddy để áp dụng các thay đổi trong Caddyfile mà chúng ta đã tạo ở trên.
Mã:
$ sudo systemctl restart caddy
Mã:
$ sudo systemctl status caddy? caddy.service - Caddy Đã tải: đã tải (/lib/systemd/system/caddy.service; đã bật; cài đặt trước của nhà cung cấp: đã bật) Đang hoạt động: đang hoạt động (đang chạy) kể từ Thứ 4, 2020-05-20 07:09:25 UTC; 2 giây trước Tài liệu: https://caddyserver.com/docs/ PID chính: 25410 (caddy) Nhiệm vụ: 7 (giới hạn: 1074) Bộ nhớ: 17,8M CGroup: /system.slice/caddy.service ??25410 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile20 tháng 5 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO][example.com] Đã lấy được: Đã lấy được khóa; đang tiến hành...20 tháng 5 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO][cache:0xc0006f8cd0] Đã bắt đầu quy trình bảo trì chứng chỉ20 tháng 5 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO] acme: Đang đăng ký tài khoản cho [emailprotected]20 tháng 5 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO][example.com] Đang chờ bộ giới hạn tốc độ...20 tháng 5 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO][example.com] Đã chờ xong20 tháng 5 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO] [example.com] acme: Đang lấy chứng chỉ SAN được đóng gói có CSR20 tháng 5 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/469612328920 tháng 5 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] acme: sử dụng trình giải tls-alpn-0120 tháng 5 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] acme: Đang cố gắng giải TLS-ALPN-0120 tháng 5 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 http: Lỗi bắt tay TLS từ 127.0.0.1:39466: EOF
Chúng ta hãy tạo một trang thử nghiệm để xác minh rằng Caddy có thể hiển thị PHP và kết nối với cơ sở dữ liệu MariaDB.
Mã:
$ sudo nano /var/www/example.com/html/test.php
"user"
và "password"
bằng thông tin đăng nhập MariaDB mà bạn đã tạo trước đó.
Mã:
Caddy Demo Site #wrap { width: 900px; margin: 0 auto; } [HEADING=2]Caddy Demo Site[/HEADING]
Truy cập trong trình duyệt web. Bạn sẽ nhận được trang sau.
Nếu bạn thấy thông báo lỗi hoặc nếu trang không tải được, hãy kiểm tra lại cấu hình của bạn
Xóa tệp kiểm tra khi bạn đã hài lòng.
Mã:
$ sudo rm /var/www/example.com/html/test.php