Cách lưu trữ một trang web với Caddy trên CentOS 7
Caddy là một web server mới được tạo ra với mục đích dễ sử dụng. Nó đủ đơn giản để được sử dụng như một server phát triển nhanh và đủ mạnh để được sử dụng trong môi trường production .Nó có file cấu hình trực quan, hỗ trợ HTTP / 2 và mã hóa TLS tự động. HTTP / 2 là version mới của giao thức HTTP giúp trang web nhanh hơn bằng cách sử dụng một kết nối duy nhất để truyền nhiều file và nén tiêu đề trong số các tính năng khác. TLS được sử dụng để phục vụ các trang web được mã hóa qua kết nối an toàn và mặc dù nó đã được chấp nhận rộng rãi trên Internet, việc lấy và cài đặt certificate theo cách thủ công thường rất phức tạp.
Caddy tích hợp chặt chẽ với Let's Encrypt , một tổ chức cung cấp certificate cung cấp certificate TLS / SSL miễn phí và tự động lấy và gia hạn certificate khi cần. Nói cách khác, mọi trang web mà Caddy phục vụ có thể được phục vụ tự động qua kết nối an toàn mà không cần cấu hình hoặc hành động bổ sung.
Trong hướng dẫn này, bạn sẽ cài đặt và cấu hình Caddy. Sau khi làm theo hướng dẫn này, bạn sẽ có một trang web hoạt động đơn giản được cung cấp bằng HTTP / 2 và kết nối TLS an toàn.
Yêu cầu
Để làm theo hướng dẫn này, bạn cần :
- Một server CentOS 7 được cài đặt với hướng dẫn cài đặt server ban đầu này , bao gồm một user không phải root có quyền sudo .
- Tên domain được cấu hình để trỏ đến server của bạn. Điều này là cần thiết để Caddy có được certificate SSL cho trang web; nếu không sử dụng domain thích hợp, trang web sẽ không được cung cấp một cách an toàn với mã hóa TLS. Bạn có thể tìm hiểu cách trỏ domain tới server DigitalOcean theo hướng dẫn Cách cài đặt tên server với DigitalOcean .
- Tùy chọn, editor
nano
được cài đặt vớisudo yum install nano
. CentOS đi kèm với editorvi
theo mặc định, nhưngnano
có thể thân thiện với user hơn.
Bước 1 - Cài đặt Caddy Binaries
Dự án Caddy cung cấp một lệnh cài đặt sẽ truy xuất và cài đặt các file binary của server Caddy. Để thực thi nó, hãy nhập:
- curl -s https://getcaddy.com | bash
Bạn có thể xem tập lệnh bằng cách truy cập https://getcaddy.com
trong trình duyệt của bạn hoặc download file bằng wget
hoặc curl
trước khi thực thi.
Trong quá trình cài đặt, tập lệnh sẽ sử dụng sudo
để có được quyền quản trị nhằm đưa các file Caddy vào các folder trên toàn hệ thống, vì vậy nó có thể nhắc bạn nhập password .
Đầu ra lệnh sẽ giống như sau:
Caddy installation script outputDownloading Caddy for linux/amd64... https://caddyserver.com/download/linux/amd64?plugins= Extracting... Putting caddy in /usr/local/bin (may require password) [sudo] password for sammy: Caddy 0.10.2 Successfully installed
Sau khi tập lệnh kết thúc, các file binary Caddy được cài đặt trên server và sẵn sàng sử dụng. Bạn có thể xác minh các mã binary Caddy đã được đưa vào bằng cách sử dụng mã which
để kiểm tra vị trí của chúng.
- which caddy
Đầu ra lệnh sẽ cho biết rằng file binary Caddy có thể được tìm thấy trong /usr/local/bin/caddy
.
Caddy không tạo bất kỳ cấu hình toàn hệ thống nào trong quá trình cài đặt và không tự cài đặt như một dịch vụ, nghĩa là nó sẽ không tự động khởi động trong khi khởi động. Trong vài bước tiếp theo, ta sẽ tạo account user để sử dụng với Caddy, các file Caddy cần để hoạt động và cài đặt file dịch vụ của nó.
Bước 2 - Tạo User và Group cho Caddie
Trong khi Apache và Nginx, hai server HTTP phổ biến nhất, tạo user không có quyền của riêng họ trong quá trình cài đặt từ các gói hệ thống, Caddy không làm điều đó. Vì lý do bảo mật, nó cũng không nên được bắt đầu bằng account root
superuser. Trong bước này, ta sẽ tạo một user dành riêng có tên là caddy
sẽ chỉ được sử dụng để chạy Caddy và truy cập các file của nó.
Để tạo user có tên caddy
hãy nhập:
- sudo adduser -r -d /var/www -s /sbin/nologin caddy
Lựa chọn -r
làm cho account mới tạo được gọi là account hệ thống, lựa chọn -d
biểu thị folder chính cho user này, trong trường hợp của ta , nó sẽ là /var/www
mà ta sẽ tạo sau này. User không có quyền sẽ không thể đăng nhập và truy cập shell hệ thống, điều mà ta đảm bảo với -s
switch sẽ cài đặt một shell mong muốn thành /sbin/nologin
, một lệnh hệ thống không cho phép đăng nhập hệ thống. Tham số cuối cùng là tên user - trong trường hợp của ta là caddy
.
Bây giờ, khi ta có sẵn user cho web server Caddy, ta có thể cấu hình các folder cần thiết để lưu trữ file cấu hình Caddy trong bước tiếp theo.
Bước 3 - Cài đặt các folder cần thiết
Hỗ trợ TLS tự động của Caddy và file đơn vị (mà ta sẽ cài đặt trong bước tiếp theo) mong đợi các folder và file cụ thể tồn tại với các quyền cụ thể. Ta sẽ tạo tất cả chúng trong bước này.
Đầu tiên, hãy tạo một folder chứa Caddyfile
chính, đây là một file cấu hình cho Caddy biết nó sẽ phục vụ những trang web nào và như thế nào.
- sudo mkdir /etc/caddy
Thay đổi chủ sở hữu của folder này thành user root và group của nó thành www-data để Caddy có thể đọc nó.
- sudo chown -R root:caddy /etc/caddy
Trong folder này, hãy tạo một Caddyfile
trống mà ta sẽ chỉnh sửa sau.
- sudo touch /etc/caddy/Caddyfile
Tạo một folder khác trong /etc/ssl
. Caddy cần điều này để lưu trữ các certificate và private key SSL mà nó tự động nhận được từ Let's Encrypt.
- sudo mkdir /etc/ssl/caddy
Caddie cần có khả năng ghi vào folder này khi nó nhận được certificate , vì vậy hãy đặt chủ sở hữu là user caddie . Bạn có thể để group làm root , không thay đổi so với mặc định:
- sudo chown -R caddy:root /etc/ssl/caddy
Sau đó, đảm bảo không ai khác có thể đọc các file đó bằng cách xóa tất cả các quyền truy cập cho người khác.
- sudo chmod 0770 /etc/ssl/caddy
Thư mục cuối cùng ta cần tạo là folder nơi trang web sẽ được xuất bản. Ta sẽ sử dụng /var/www
, đây là đường dẫn thông thường và cũng là đường dẫn mặc định khi sử dụng các web server khác, như Apache hoặc Nginx.
- sudo mkdir /var/www
Thư mục này hoàn toàn thuộc sở hữu của caddy .
- sudo chown caddy:caddy /var/www
Đến đây bạn đã chuẩn bị xong môi trường cần thiết để Caddie có thể chạy. Trong bước tiếp theo, ta sẽ cấu hình Caddy như một dịch vụ hệ thống đảm bảo nó bắt đầu khi server khởi động hệ thống và có thể được quản lý bằng systemctl
.
Bước 4 - Cài đặt Caddy như một dịch vụ hệ thống
Trong khi Caddy không tự cài đặt như một dịch vụ, dự án cung cấp một tệp đơn vị systemd
chính thức. Tệp này giả sử cấu trúc folder mà ta đã cài đặt ở bước trước, vì vậy hãy đảm bảo cấu hình của bạn khớp.
Download file từ repository Caddy chính thức. Tham số -o
bổ sung vào lệnh curl
sẽ lưu file trong folder /etc/systemd/system/
và hiển thị nó 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 có thể tiếp tục, ta phải sửa đổi file một chút để làm cho file sử dụng user caddy
không có quyền của ta để chạy server .
Hãy mở file bằng vi
hoặc editor yêu thích của bạn (đây là phần giới thiệu ngắn về vi
)
- sudo vi /etc/systemd/system/caddy.service
và tìm phân đoạn chịu trách nhiệm chỉ định account và group user .
; User and group the process will run as. User=www-data Group=www-data
Thay đổi cả hai giá trị thành caddy
như sau:
; User and group the process will run as. User=caddy Group=caddy
Lưu file để thoát. Tệp dịch vụ hiện đã sẵn sàng để sử dụng với cài đặt của ta . Làm cho systemd
biết file dịch vụ mới.
- sudo systemctl daemon-reload
Sau đó, cho phép Caddy chạy khi khởi động.
- sudo systemctl enable caddy.service
Bạn có thể xác minh dịch vụ đã được tải đúng cách và được kích hoạt để bắt đầu khởi động bằng cách kiểm tra trạng thái của nó.
- sudo systemctl status caddy.service
Đầu ra sẽ như sau:
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
Cụ thể, nó nói rằng dịch vụ đã được tải và kích hoạt , nhưng nó vẫn chưa chạy. Ta sẽ không khởi động server vì cấu hình vẫn chưa hoàn chỉnh.
Đến đây bạn đã cấu hình Caddy như một dịch vụ hệ thống sẽ tự động khởi động khi server khởi động mà không cần phải chạy thủ công. Tiếp theo, ta sẽ cho phép lưu lượng truy cập web thông qua firewall .
Bước 5 - Cho phép kết nối HTTP và HTTPS (tùy chọn)
Nếu bạn cũng đã làm theo các Bước được Đề xuất Bổ sung cho Server CentOS 7 Mới và đang sử dụng firewall , ta phải thêm các luật firewall theo cách thủ công để truyền lưu lượng truy cập internet tới Caddy.
Caddy phục vụ các trang web sử dụng giao thức HTTP và HTTPS, vì vậy ta cần cho phép truy cập vào các cổng thích hợp để Caddy có thể sử dụng trên internet.
- sudo firewall-cmd --permanent --zone=public --add-service=http
- sudo firewall-cmd --permanent --zone=public --add-service=https
- sudo firewall-cmd --reload
Cả ba lệnh, khi chạy, sẽ xuất ra thông báo thành công sau:
firewall-cmd outputsuccess
Điều này sẽ cho phép Caddy phục vụ các trang web cho khách truy cập một cách tự do. Trong bước tiếp theo, ta sẽ tạo một trang web mẫu và cập nhật Caddyfile
để phục vụ cho việc kiểm tra cài đặt Caddy bay.
Bước 6 - Tạo trang web thử nghiệm và file Caddyxt
Hãy bắt đầu bằng cách tạo một trang HTML rất đơn giản, trang này sẽ hiển thị Hello World đơn giản ! thông điệp. Lệnh này sẽ tạo một index.html
trong folder trang web mà ta đã tạo trước đó chỉ với một dòng văn bản, <h1>Hello World!</h1>
, bên trong.
- echo '<h1>Hello World!</h1>' | sudo tee /var/www/index.html
Tiếp theo, ta sẽ điền vào Caddyfile
. Caddyfile
, ở dạng đơn giản nhất, bao gồm một hoặc nhiều khối server mà mỗi khối xác cấu hình cho một trang web. Một khối server bắt đầu bằng định nghĩa địa chỉ và theo sau là dấu ngoặc nhọn. Bên trong dấu ngoặc nhọn, bạn có thể bao gồm các lệnh cấu hình để áp dụng cho trang web đó.
Định nghĩa địa chỉ được chỉ định trong protocol :// host : port
biểu mẫu protocol :// host : port
. Caddy sẽ tự mặc định một số giá trị nếu bạn để trống một số trường. Ví dụ: nếu bạn chỉ định giao thức nhưng không chỉ định cổng, thì giao thức sau sẽ được lấy tự động (nghĩa là cổng 80
được giả định cho HTTP và cổng 443
được giả định cho HTTPS). Các luật điều chỉnh định dạng địa chỉ được mô tả chuyên sâu trong tài liệu Caddyfile chính thức .
Mở Caddyfile
bạn đã tạo ở Bước 2 bằng vi
hoặc editor yêu thích của bạn.
- sudo vi /etc/caddy/Caddyfile
Dán nội dung sau:
http:// { root /var/www gzip }
Sau đó lưu file và thoát. Hãy giải thích Caddyfile
cụ thể này làm gì.
Ở đây, ta đang sử dụng http ://
để định nghĩa địa chỉ. Điều này cho Caddy biết rằng nó sẽ liên kết với cổng 80
và phục vụ tất cả các yêu cầu bằng giao thức HTTP thuần túy (không có mã hóa TLS), dù domain được sử dụng để kết nối với server là gì. Điều này sẽ cho phép bạn truy cập các trang web Caddy đang lưu trữ bằng địa chỉ IP server của bạn.
Bên trong dấu ngoặc nhọn của khối server của ta , có hai lệnh:
- Chỉ thị
root
cho Caddy biết vị trí của các file trang web. Trong ví dụ của ta , đó là/var/www
, nơi ta tạo trang thử nghiệm. - Lệnh
gzip
yêu cầu Caddy sử dụng tính năng nén Gzip để làm cho trang web nhanh hơn. Nó không cần cấu hình bổ sung.
Khi file cấu hình đã sẵn sàng, hãy khởi động dịch vụ Caddy.
- sudo systemctl start caddy
Bây giờ ta có thể kiểm tra xem trang web có hoạt động hay không. Đối với điều này, bạn sử dụng địa chỉ IP công cộng của server của bạn. Nếu bạn không biết địa chỉ IP của server của bạn , bạn có thể lấy nó bằng curl -4 icanhazip.com
. Sau khi bạn có nó, hãy truy cập http:// your_server_ip
trong trình duyệt yêu thích của bạn để xem Hello World! trang mạng.
Điều này nghĩa là cài đặt Caddy của bạn đang hoạt động chính xác. Trong bước tiếp theo, bạn sẽ kích hoạt kết nối an toàn đến trang web của bạn với hỗ trợ TLS tự động của Caddy.
Bước 7 - Cấu hình TLS tự động
Một trong những tính năng chính giúp phân biệt Caddy với các web server khác là khả năng tự động yêu cầu và gia hạn certificate TLS từ Let's Encrypt, một cơ quan cấp certificate miễn phí (CA). Ngoài ra, việc cài đặt Caddy để tự động phục vụ các trang web qua kết nối an toàn chỉ yêu cầu thay đổi một dòng trong Caddyfile
.
Caddy đảm nhận việc kích hoạt kết nối HTTPS an toàn cho tất cả các khối server đã cấu hình và tự động lấy các certificate cần thiết, giả sử cấu hình khối server đáp ứng một số yêu cầu.
Để TLS hoạt động, phải đáp ứng các yêu cầu sau:
- Caddy phải có khả năng tự liên kết với cổng
443
cho HTTPS và cổng đó phải có thể truy cập được từ internet. - Giao thức không được đặt thành HTTP, cổng không được đặt thành
80
và TLS không được tắt hoặc overrides rõ ràng với các cài đặt khác (ví dụ: với lệnhtls
trong khối server ). - Tên server phải là domain hợp lệ; nó không được để trống hoặc được đặt thành
localhost
hoặc địa chỉ IP. Điều này là cần thiết vì Let's Encrypt chỉ có thể cấp certificate cho các domain hợp lệ. - Caddie phải biết địa chỉ email được dùng để khôi phục khóa với Let's Encrypt.
Nếu bạn đã làm theo hướng dẫn này, yêu cầu đầu tiên đã được đáp ứng. Tuy nhiên, địa chỉ khối server hiện tại được cấu hình đơn giản là http ://
, xác định một schemas HTTP thuần túy không có mã hóa cũng như không có domain . Ta cũng chưa cung cấp cho Caddy địa chỉ e-mail mà Let's Encrypt yêu cầu khi certificate request . Nếu địa chỉ không được cung cấp trong cấu hình, Caddy sẽ yêu cầu địa chỉ đó trong khi khởi động. Tuy nhiên, vì Caddy được cài đặt như một dịch vụ hệ thống, nó không thể đặt câu hỏi trong quá trình khởi động và kết quả là nó sẽ không khởi động đúng cách.
Để sửa lỗi này, hãy mở Caddyfile
để chỉnh sửa lại.
- sudo vi /etc/caddy/Caddyfile
Trước tiên, hãy thay thế định nghĩa địa chỉ của http://
bằng domain của bạn. Thao tác này sẽ xóa kết nối không an toàn do HTTP buộc và cung cấp domain cho certificate TLS. Thứ hai, cung cấp cho Caddy một địa chỉ email bằng cách sử dụng lệnh tls
bên trong khối server .
Caddyfile
được sửa đổi sẽ trông như sau, với domain và địa chỉ email của bạn được thay thế bằng:
example.com { root /var/www gzip tls sammy@example.com }
Lưu file và thoát khỏi editor . Để áp dụng các thay đổi, hãy khởi động lại Caddy.
- sudo systemctl restart caddy
Bây giờ, hãy hướng trình duyệt của bạn đến https:// example.com
để xác minh xem các thay đổi đã được áp dụng đúng chưa. Nếu vậy, bạn nên xem Hello World! trang. Lần này, bạn có thể kiểm tra xem trang web có được cung cấp HTTPS hay không bằng cách xem URL hoặc biểu tượng ổ khóa trên thanh URL.
Kết luận
Đến đây bạn đã cấu hình Caddy để phục vụ đúng cách trang web qua kết nối TLS an toàn. Nó sẽ tự động lấy và gia hạn certificate từ Let's Encrypt, phân phát trang web qua kết nối an toàn bằng giao thức HTTP / 2 mới hơn và giảm thời gian tải bằng cách sử dụng nén gzip.
Đây là một ví dụ đơn giản để bắt đầu với Caddy. Bạn có thể đọc thêm về các tính năng độc đáo của Caddy và chỉ thị cấu hình cho Caddyfile
trong tài liệu chính thức của Caddy .
Các tin liên quan
Cách cài đặt và cấu hình Ghost trên CentOS 72017-04-10
Cách cấu hình một client FreeIPA trên CentOS 7
2017-03-24
Cách theo dõi các chỉ số hệ thống bằng TICK Stack trên CentOS 7
2017-03-12
Cách thiết lập xác thực đa yếu tố cho SSH trên CentOS 7
2017-03-08
Cách cài đặt và bảo mật message broker MQTT Mosquitto trên CentOS 7
2017-01-23
Cách thay đổi thư mục dữ liệu MariaDB thành vị trí mới trên CentOS 7
2016-12-19
Cách cài đặt và cấu hình Ansible trên CentOS 7
2016-12-19
Cách cài đặt MariaDB trên CentOS 7
2016-12-01
Cách thu thập số liệu cơ sở hạ tầng với Packetbeat và ELK trên CentOS 7
2016-11-28
Cách chia sẻ tệp bằng FileRun trên CentOS 7
2016-11-21