Caddy là một trong những web server mã nguồn mở mới được sử dụng phổ biến hiện nay. Caddy không chỉ mang lại giải pháp đa nền tảng đơn giản, dễ sử dụng, mà còn đáp ứng được yêu cầu về hiệu suất, tốc độ đối với môi trường production. Hãy cùng Vietnix tìm hiểu cách lưu trữ một website với Caddy trên CentOS 7 qua bài viết được chia sẻ dưới đây.
Yêu cầu cần có
Trước khi đến với hướng dẫn chi tiết, bạn cần đáp ứng các điều kiện sau:
- Một máy chủ CentOS 7 đã được thiết lập với tài khoản user non-root với quyền sudo.
- Một tên miền đã được cấu hình và trỏ đến máy chủ của bạn. Đây là điều kiện không thể thiếu để Caddy có thể lấy chứng chỉ SSL cho website của bạn. Ngược lại, trong trường hợp bạn không sử dụng tên miền đáp ứng yêu cầu, trang web sẽ không được cung cấp mã hóa TLS an toàn.
- Có thể cài đặt hoặc không: Trình soạn thảo văn bản
nano
được cài đặt vớisudo yum install nano
. Mặc dù theo mặc định, CentOS thường đi kèm với văn bảnvi
, nhưngnano
sẽ được ưu tiên hơn vì sự thân thiện với người dùng.
Các bước thực hiện
Dưới đây là 7 bước chi tiết để lưu trữ một trang web với Caddy trên CentOS 7 mà bạn có thể tham khảo:
Bước 1: Cài đặt Caddy Binaries
Dự án Caddy sẽ cung cấp cho bạn một script để truy xuất và cài đặt các file binary vào máy chủ Caddy. Bạn nhập dòng sau để thực thi lệnh:
curl -s https://getcaddy.com | bash
Trên trình duyệt của mình, bạn có thể truy cập vào https://getcaddy.com
để xem script , hoặc tải chúng xuống với wget
hoặc curl
trước khi bắt đầu thực thi.
Trong suốt quá trình cài đặt, script sẽ giành quyền quản trị bằng sudo
để đưa các file Caddy vào thư mục trên hệ thống. Khi đó, script có thể yêu cầu bạn nhập mật khẩu. Output lúc này sẽ hiển thị như sau:
Caddy installation script output
Downloading Caddy for linux/amd64...
https://caddyserver.com/download/linux/amd64?plugins=
Extracting...
Putting caddy in /usr/local/bin (may require password)
[sudo] password for vietnix:
Caddy 0.10.2
Successfully installed
Sau khi kết thúc script, các file binary của Caddy đã được cài đặt và sẵn sàng sử dụng trên máy chủ. Để chắc chắn hơn về việc chúng đã được đặt đúng chỗ hay chưa, bạn có thể dùng which
để kiểm tra.
which caddy
Lúc này, output sẽ hiển thị rằng bạn có thể tìm thấy file binary
trong file /usr/local/bin/caddy
.
Cần lưu ý là trong quá trình cài đặt, Caddy sẽ không tạo bất cứ cấu hình toàn hệ thống nào. Đồng thời Caddy sẽ không tự khởi động khi máy chủ khởi động. Vậy nên, bạn cần tạo tài khoản người dùng để sử dụng web server này.
Bước 2: Tạo User và Group cho Caddie
Caddy mang lại những đặc quyền riêng khi người dùng cài đặt các gói hệ thống. Tuy nhiên, để đảm bảo an toàn và bảo mật tối đa, bạn không nên bắt đầu với superuser root
. Thay vào đó, bạn nên tạo một người dùng chuyên dụng với tên là caddy
dùng riêng cho quá trình chạy và truy cập vào các file Caddy.
Để tạo tài khoản người dùng với tên caddy
, bạn cần nhập lệnh sau:
sudo adduser -r -d /var/www -s /sbin/nologin caddy
Switch -r
sẽ giúp cho tài khoản bạn vừa tạo được gọi là tài khoản hệ thống, còn switch -d
biểu thị thư mục chính cho tài khoản đó. Trong trường hợp trên, thư mục này chính là /var/www
mà bạn sẽ tạo sau này.
-s
là sẽ cài đặt shell thành /sbin/nologin
và khiến những người dùng không được cấp quyền không thể đăng nhập và truy cập vào shell hệ thống. Tham số cuối cùng trong câu lệnh trên chính là tên người dùng (user), ở trường hợp này là caddy
.
Như vậy, bạn đã có user người dùng cho máy chủ Caddy, giờ là lúc bạn cần cấu hình cho các thư mục cần thiết để lưu trữ file cấu hình. Thao tác này sẽ được hướng dẫn cụ thể ở bước tiếp theo của bài viết.
Bước 3: Thiết lập thư mục cần thiết
Ở bước này, bạn sẽ tiến hành tạo một số thư mục và file gắn liền với các quyền cụ thể để hỗ trợ cho việc cài đặt file đơn vị và hỗ trợ TLS tự động của Caddy ở bước sau.
Đầu tiên, hãy tạo một thư mục chứa file Caddyfile
chính. File cấu hình này giúp Caddy biết rằng nó sẽ phục vụ cho những trang web nào với cách thức như thế nào.
sudo mkdir /etc/caddy
Bạn cần thay đổi chủ sở hữu của thư mục thành người dùng root và nhóm của nó sẽ là www-data để Caddy có thể nhận diện và đọc được:
sudo chown -R root:caddy /etc/caddy
Tại thư mục này, bạn hãy tạo một Caddyfile
trống để thuận tiện cho việc chỉnh sửa sau này:
sudo touch /etc/caddy/Caddyfile
Tiếp tục, hãy tạo một thư mục khác bên trong /etc/ssl
để Caddy lưu trữ các chứng chỉ và khóa riêng tư (private key) SSL mà nó nhận tự động từ Let’s Encrypt.
sudo mkdir /etc/ssl/caddy
Caddy cần được cấp quyền ghi vào thư mục này khi nó nhận được chứng chỉ, vì vậy bạn nên đặt chủ sở hữu thành user Caddy. Ngoài ra, bạn cũng có thể để nhóm thuộc root và không cần phải thay đổi gì nhiều so với mặc định.
sudo chown -R caddy:root /etc/ssl/caddy
Tiếp theo, xóa tất cả quyền truy cập của người dùng khác với lệnh sau:
sudo chmod 0770 /etc/ssl/caddy=
Cuối cùng, bạn cần phải tạo thêm một thư mục tại nơi trang web được xuất bản, trong trường hợp này là /var/www
.
sudo mkdir /var/www
Để thư mục này thuộc quyền sở hữu hoàn toàn của Caddy, bạn nhập:
sudo chown caddy:caddy /var/www
Như vậy là bạn đã hoàn tất quá trình chuẩn bị môi trường cần thiết để chạy Caddy. Ở bước tiếp theo, bạn cần cấu hình Caddy như một dịch vụ hệ thống nhằm chắc chắn rằng nó này sẽ tự động chạy khi server khởi động, đồng thời cho phép người dùng quản lý thông qua các file systemctl
.
Để quá trình cài đặt và cấu hình Caddy diễn ra thuận lợi, không gặp trở ngại nào thì bạn cần sử dụng một máy chủ có khả năng mở rộng linh hoạt và tối đa hóa khả năng quản trị của bạn. Tuy nhiên, việc chọn một nhà cung cấp dịch vụ máy chủ phù hợp có thể không đơn giản.
VPS Server là một giải pháp tuyệt vời cho các nhà phát triển web và các doanh nghiệp vừa và nhỏ. Với VPS Vietnix, bạn có thể chọn từ nhiều gói dịch vụ khác nhau như VPS Giá Rẻ, VPS Phổ Thông, VPS Cao Cấp, VPS NVMe, VPS GPU phù hợp với nhu cầu và ngân sách của bạn.
Ngoài ra, VPS Vietnix còn cung cấp các tính năng nổi trội như:
- Toàn quyền quản trị và cài đặt hệ thống theo nhu cầu sử dụng. Bạn cũng có thể gửi yêu cầu hỗ trợ tới đội ngũ Vietnix nếu gặp khó khăn trong quá trình này.
- Backup tự động giúp bảo vệ dữ liệu hiệu quả.
- Giao diện quản trị thân thiện, dễ dàng làm quen và sử dụng giúp quá trình quản lý hệ thống tiết kiệm thời gian.
Liên hệ để được tư vấn gói cấu hình tối ưu nhất theo nhu cầu của bạn.
Bước 4: Cài đặt Caddy làm dịch vụ hệ thống
Đầu tiên, bạn cần tải file xuống từ repository của Caddy. Tham số -o
được bổ sung vào lệnh curl
sẽ lưu file trong thư mục /etc/systemd/system/
và hiển thị với systemd
.
sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service
Trước khi đến với thao tác tiếp theo, bạn cần chỉnh sửa file để nó sử dụng user caddy
đã thiết lập ở phần trên. Hãy mở file bằng vi
hoặc bất cứ trình soạn thảo văn bản nào bạn yêu thích với:
sudo vi /etc/systemd/system/caddy.service
Sau đó, bạn cần tìm kiếm phân đoạn chịu trách nhiệm chỉ định tài khoản user và group:
/etc/systemd/system/caddy.service
; User and group the process will run as.
User=www-data
Group=www-data
Bây giờ, bạn chỉ cần thay đổi cả hai giá trị thành caddy
, cụ thể là:
/etc/systemd/system/caddy.service
; User and group the process will run as.
User=caddy
Group=caddy
Đừng quên lưu và đóng file để thoát. Lúc này, file dịch vụ đã sẵn sàng để sử dụng với các cài đặt của bạn. Tuy nhiên, bạn cũng cần phải cho systemd
biết đâu là file dịch vụ mới với lệnh:
sudo systemctl daemon-reload
Kế đó, bạn cấp quyền cho Caddy chạy khi khởi động:
sudo systemctl enable caddy.service
Để kiểm tra xem liệu dịch vụ đã được tải và kích hoạt đúng cách hay chưa, bạn có thể xác minh qua trạng thái:
sudo systemctl status caddy.service
Output sẽ như thế này:
Caddy service status output
● caddy.service - Caddy HTTP/2 web server
Loaded: loaded (/etc/systemd/system/caddy.service; enabled; vendor preset: disabled)
Active: inactive (dead)
Docs: https://caddyserver.com/docs
Nội dung trên cho biết rằng dịch vụ đã được tải và kích hoạt thành công, nhưng nó vẫn chưa chạy được. Vì quá trình cấu hình vẫn chưa hoàn tất nên bạn không được khởi động máy chủ.
Đến bước này, bạn đã cấu hình Caddy thành một dịch vụ hệ thống và tự chạy khi server khởi động. Tiếp theo, bạn cần đến với bước 5 để cho phép lưu lượng truy cập web với firewall.
Bước 5: Cho phép kết nối HTTP với HTTPS (tùy chọn)
Để chuyển lưu lượng truy cập internet đến Caddy, trước đó bạn sẽ phải thêm các quy tắc tường lửa bằng cách thủ công. Caddy sẽ phục vụ cho các trang web sử dụng giao thức HTTP và HTTPS nên bạn cần cho phép truy cập vào những cổng phù hợp:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
Sau khi chạy 3 lệnh trên, bạn sẽ nhận được thông báo thành công như sau:
firewall-cmd output
success
Như vậy, Caddy đã được cấp phép phục vụ cho các trang web với khách truy cập tự do. Ở bước 6, bạn sẽ tiến hành tạo nên một trang web mẫu và cập nhật Caddylife
để có thể kiểm tra cài đặt Caddy một cách nhanh chóng.
Bước 6: Tạo một trang web thử nghiệm và một Caddylife
Bạn cần tạo một trang HTML đơn giản để hiển thị thông điệp Hello World!. Sau khi thực hiện lệnh bên dưới, bạn sẽ tạo được một file index.html
trong thư mục trang web (đã được thiết lập trước đó) với dòng văn bản <h1>Hello World!</h1>
ở bên trong.
echo '<h1>Hello World!</h1>' | sudo tee /var/www/index.html
Sau đó, bạn cần điền vào Caddyfile.
Caddyfile
ở dạng đơn giản nhất thường chỉ bao gồm 1 hoặc một vài server block. Mỗi server block sẽ xác định cấu hình cho một trang web. Về cơ bản, một server block sẽ bắt đầu với một định nghĩa địa chỉ và đi theo phía sau đó là dấu ngoặc nhọn. Ngoài ra, bên trong dấu ngoặc nhọn có thể chứa các chỉ thị cấu hình bạn muốn sử dụng cho trang web đó.
Định nghĩa địa chỉ sẽ được chỉ định bên trong biểu mẫu protocol :// host : port
. Caddy sẽ tự mặc định một số giá trị nếu bạn để trống các trường. Chẳng hạn như trong trường hợp bạn chỉ định giao thức nhưng lại không chỉ định cổng, thì cổng 80
sẽ được chỉ định cho HTTP và cổng 443
được chỉ định cho HTTPS.
Bây giờ, bạn cần mở Caddyfile
đã tạo (ở bước 2) thông qua vi
hoặc trình soạn thảo mà mình yêu thích:
sudo vi /etc/caddy/Caddyfile
Sau đó, bạn dán vào nội dung như sau:
http:// {
root /var/www
gzip
Sau thao tác trên, bạn lưu file và thoát. Giải thích ý nghĩa lệnh này như sau:
http://
được sử dụng làm định nghĩa địa chỉ. Thông qua đó, Caddy nhận biết được nó sẽ liên kết với cổng 80 và thực hiện các yêu cầu thông qua giao thức HTTP thuần túy (không bao gồm mã hóa TLS) với bất cứ tên miền nào kết nối với máy chủ. Lúc này, bạn có thể truy cập vào các trang web đang được lưu trữ bởi Caddy thông qua địa chỉ IP máy chủ của mình.- Chỉ thị
root
: Giúp Caddy nhận diện vị trí các file trang web, trong trường hợp này là/var/www
– nơi mà bạn đã tạo ra trang thử nghiệm bên trên. - Chỉ thị
gzip
: Cho phép Caddy sử dụng tính năng nén Gzip để gia tăng hiệu suất, tốc độ cho trang web mà không cần đến cấu hình bổ sung.
Sau khi file cấu hình đã hoàn tất và sẵn sàng, bạn đã có thể bắt đầu khởi động dịch vụ Caddy.
sudo systemctl start caddy
Để chắc chắn rằng trang web vẫn đang hoạt động tốt, bạn có thể kiểm tra thông qua địa chỉ IP công cộng của máy chủ. Trong trường hợp bạn không biết địa chỉ IP, bạn có thể lấy nó một cách dễ dàng với curl -4 icanhazip.com
. Sau đó, bạn dùng địa chỉ IP đã có được truy cập vào http:// your_server_ip
trên một trình duyệt bất kỳ để kiểm tra website Hello World!.
Nếu truy cập thành công, tức là cài đặt Caddy của bạn vẫn đang hoạt động tốt. Ở bước 7, bạn cần phải kích hoạt chế độ kết nối an toàn tới website của mình thông qua hỗ trợ TLS tự động của Caddy.
Bước 7: Cấu hình TLS tự động
Caddy sở hữu tính năng đặc biệt so với các web server khác là có thể tự động yêu cầu, gia hạn chứng chỉ TLS từ Let’s Encrypt. Hơn nữa, để thiết lập Caddy tự động chạy các website qua kết nối an toàn chỉ cần thay đổi một dòng trong Caddyfile
.
Vai trò Caddy là bật kết nối HTTPS an toàn cho toàn bộ server block và xác định cấu hình, tự động nhận chứng chỉ cần thiết nếu đạt yêu cầu. Cụ thể nếu muốn TLS hoạt động, Caddy cần đáp ứng được một số yêu cầu sau:
- Caddy có thể tự liên kết với cổng
443
của HTTPS, đồng thời cổng đó còn phải cho phép truy cập từ internet. - Không đặt giao thức thành HTTP, không đặt cổng thành
80
và không được tắt hoặc ghi đè TLS với các cài đặt khác (chẳng hạn như lệnh TLS trong server block). - Máy chủ phải có tên miền hợp lệ, không được để trống máy chủ, không đặt thành
localhost
và cũng không được để địa chỉ IP. Nguyên nhân là vì Let’s Encrypt chỉ cấp chứng chỉ cho những tên miền hợp lệ. - Caddy buộc phải biết được địa chỉ email dùng để khôi phục khóa bằng Let’s Encrypt.
Khi bạn đã thực hiện đến bước này, thì yêu cầu đầu tiên đã được đáp ứng. Tuy nhiên, địa chỉ server block hiện tại đang được cấu hình là http://
, đây là một schema HTTP đơn giản (không được mã hóa, không có tên miền). Đồng thời, bạn cũng chưa cung cấp địa chỉ email mà Let’s Encrypt yêu cầu khi tạo chứng chỉ cho Caddy.
Trong trường hợp bạn không cung cấp địa chỉ khi cấu hình, Caddy sẽ yêu cầu nhập địa chỉ trong quá trình khởi động. Tuy nhiên, Caddy lại được cài đặt như một dịch vụ hệ thống nên nó không thể đặt câu hỏi trong quá trình khởi chạy và dẫn tới việc Caddy không được khởi động đúng cách.
Để khắc phục sự cố này, bạn chỉ cần mở Caddyfile
để sửa đổi như sau:
sudo vi /etc/caddy/Caddyfile
Trước hết, bạn cần thay thế tên miền của mình cho định nghĩa địa chỉ http:// ban đầu. Điều này giúp loại bỏ kết nối không an toàn bắt buộc của HTTP và cung cấp tên miền cho chứng chỉ TLS. Tiếp theo, bạn cũng phải sử dụng chỉ thị tls
bên trong server block để cung cấp địa chỉ email cho Caddy.
Sau khi thay đổi tên miền và địa chỉ email, Caddyfile
sẽ như thế này:
/etc/caddy/Caddyfile
example.com {
root /var/www
gzip
tls vietnix@example.com
}
Bây giờ, bạn lưu file và thoát khỏi trình chỉnh sửa, sau đó khởi động lại Caddy để áp dụng các thay đổi vừa thực hiện.
sudo systemctl restart caddy
Lúc này, bạn mở trình duyệt và truy cập vào https:// example.com
để kiểm tra xem các thay đổi đã được áp dụng một cách chính xác hay chưa. Hãy xem lại trang Hello World! đồng thời xác minh xem liệu trang web có được cung cấp HTTP thông qua URL hoặc biểu tượng ổ khóa trong thanh URL.
Vietnix là nhà cung cấp giải pháp VPS với hơn 10 năm kinh nghiệm và đã phục vụ cho hơn 50.000 khách hàng cá nhân và doanh nghiệp. Ngoài ra, tới thời điểm hiện tại, Vietnix đã kích hoạt hơn 100.000 dịch vụ, cho thấy sự đáng tin cậy và chuyên nghiệp của đội ngũ Vietnix.
Không chỉ vậy, sau khi sử dụng dịch vụ đã có tới 97% khách hàng đã giới thiệu Vietnix cho người khác, chứng tỏ chất lượng và dịch vụ của Vietnix được hầu hết khách hàng đánh giá cao. Chính vì vậy, nếu bạn đang cần một giải pháp VPS cho doanh nghiệp hoặc cá nhân, Vietnix là một lựa chọn đáng tin cậy và chuyên nghiệp.
Mọi vấn đề thắc mắc cần tư vấn, quý khách vui lòng liên hệ:
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh
- Hotline: 1800 1093 – 07 088 44444
- Email: sales@vietnix.com.vn
Lời kết
Sau khi thực hiện các bước trên, bạn đã cấu hình Caddy thành công để có thể phục vụ trang web đúng cách thông qua kết nối TLS an toàn. Lúc này, trang web của bạn đã có thể tự động lấy và gia hạn chứng chỉ từ Let’s Encrypt bằng giao thức HTTP/2 mới, đồng thời tối ưu hiệu suất, giảm thiểu thời gian tải với nén gzip. Ngoài ra, nếu có bất cứ thắc mắc hay gặp khó khăn trong quá trình cấu hình Caddy, đừng quên để lại comment bên dưới để được giải đáp và hỗ trợ bởi đội ngũ kỹ thuật viên của Vietnix nhé.