Triển khai máy chủ Caddy Server

26 Likes Comment

Bạn đã quá quen thuộc với các web server truyền thống như: Nginx, Apache, … Mình nghĩ bạn nên thử qua caddyserver. Bạn sẽ không còn lo lắng, mệt mỏi khi phải đi tìm đọc tài liệu, tìm kiếm thông cài đặt cấu hình để hệ thống hoạt động một cách trơn tru. Mà thay vào đó, bạn chỉ việc dành 1 phút để tạo và config server chỉ với một vài dòng code để hệ thống server bắt đầu chạy

Caddy là một nền tảng web server mạnh mẽ, được viết bằng Go là 1 open-source và đang được cộng đồng phát triển rất mạnh mẽ. Nó hướng tới HTTP/2.0 và mặc định sử dụng HTTPS. Ngoài ra còn là một lựa chọn tuyệt vời cho: load balancing, cổng api, ingress controller, process supervisor, task scheduler.

I: Cài đặt xcaddy

Với kinh nghiệm của mình thì các bạn nên dùng cách xây dựng chúng từ mã nguồn đây là một cách để chúng ta sẽ có thể quản lý tùy chỉnh được.

Theo những gì được khuyến cáo thì chúng ta nên xây dựng mã nguồn thông qua công cụ xcaddy để xây dựng mã nguồn của mình, để bắt đầu chúng ta cần cài đặt go làm môi trường chạy tools

root@caddy:~# rm -rf /usr/local/go && tar -C /usr/local -xzf go1.19.3.linux-amd64.tar.gz
root@caddy:~# export PATH=$PATH:/usr/local/go/bin

Sau khi cài song chúng ta tiến hành cài xcaddy

root@caddy:~# go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest

Sau khi chạy lệnh song chúng ta lấy file xcaddy cho vào hệ thống

root@caddy:~# mv /go/bin/xcaddy /usr/bin/xcaddy

Giờ chúng ta đã cài song chúng ta đã có xcaddy để tiến hành build

II: Cài đặt caddy

Sau khi có xcaddy chúng ta tiến hành build caddy thông qua các lệnh sau

root@caddy:~# cd /usr/bin/
root@caddy:/usr/bin/# xcaddy build \
    --with github.com/RussellLuo/caddy-ext/ratelimit \
    --with github.com/corazawaf/coraza-caddy \
    --with github.com/RussellLuo/caddy-ext/requestbodyvar \
    --with github.com/caddyserver/cache-handler

Ở đây mình mặc định cài thêm 3 thành phần

Trong bài này mình chỉ hướng dẫn build, phần cấu hình sẽ có trong bài 4 cấu hình WAF hướng dẫn chi tiết

Sau đó chúng ta chờ cho công cụ chạy song thì chúng ta sẽ cài song kết quả nó như bên dưới

Bây giờ chúng ta cần cấu hình cho caddy chạy nền như service để có thể để cho máy chủ chạy liên tục

đầu tiên chúng ta cần tạo file /etc/caddy/Caddyfile

root@caddy:~# mkdir -p /etc/caddy/
root@caddy:~# touch /etc/caddy/Caddyfile

Bây giờ chúng ta sẽ tạo user caddy để chạy code cho an toàn

root@caddy:~# groupadd --system caddy
root@caddy:~# sudo useradd --system --gid caddy --create-home --home-dir /home/caddy --shell /usr/sbin/nologin --comment "Caddy web server" caddy

Trong file Caddyfile trên vừa tạo chúng ta điền nội dung như sau:

http:// {
    root * /home/caddy/web/index.html
    encode gzip
    file_server
}

Tiếp tới chúng ta tạo một file thư mục web và thư mục log

root@caddy:~# mkdir -p /home/caddy/web
root@caddy:~# mkdir -p /home/caddy/log

Tạo một file index để test /home/caddy/index.html

<!DOCTYPE html>
<html>
<head>
<title>Hello from Caddy!</title>
</head>
<body>
<h1 style="font-family: sans-serif">This page is being served via Caddy</h1>
</body>
</html>

Khởi tạo file service /etc/systemd/system/caddy.service

# caddy.service
#
# For using Caddy with a config file.
#
# Make sure the ExecStart and ExecReload commands are correct
# for your installation.
#
# See https://caddyserver.com/docs/install for instructions.
#
# WARNING: This service does not use the --resume flag, so if you
# use the API to make changes, they will be overwritten by the
# Caddyfile next time the service is restarted. If you intend to
# use Caddy's API to configure it, add the --resume flag to the
# `caddy run` command or use the caddy-api.service file instead.
[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target
[Service]
Type=notify
User=caddy
Group=caddy
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile --force
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE
StandardOutput=append:/home/caddy/log/caddy.log.error
StandardError=append:/home/caddy/log/caddy.error
[Install]
WantedBy=multi-user.target

Các bạn lưu ý cấu hình hai cái này

StandardOutput=append:/home/caddy/log/caddy.log.error
StandardError=append:/home/caddy/log/caddy.error

Đây chính là cấu hình error của caddy các bạn cần lưu ý cài đặt để lưu lại sau này có vấn đề thì mò lại cũng nhanh đặc biệt khi dùng kèm theo waf

Khởi tạo file service /etc/systemd/system/caddy-api.service

# caddy-api.service
#
# For using Caddy with its API.
#
# This unit is "durable" in that it will automatically resume
# the last active configuration if the service is restarted.
#
# See https://caddyserver.com/docs/install for instructions.
[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target
[Service]
Type=notify
User=caddy
Group=caddy
ExecStart=/usr/bin/caddy run --environ --resume
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target

Bây giờ chúng at cần reload lại hệ thống để cấu hình được nghi nhận

root@caddy:~# sudo systemctl daemon-reload
root@caddy:~# sudo systemctl enable --now caddy

sau đó chúng ta kiểm tra trạng thái như sau

root@caddy:~# systemctl status caddy

Kết quả chúng ta được một web html như sau

Để test xem cấu hình API đã hoàn thành chưa chúng ta tạo 1 file caddy.json nội dung như sau

{
	"apps": {
		"http": {
			"servers": {
				"example": {
					"listen": [":2015"],
					"routes": [
						{
							"handle": [{
								"handler": "static_response",
								"body": "Hello, world!"
							}]
						}
					]
				}
			}
		}
	}
}

Tiến hành upload cấu hình test thông qua api

root@caddy:~# curl localhost:2019/load -H "Content-Type: application/json" -d @caddy.json

kiểm tra cấu hình

root@caddy:~# curl localhost:2019/config

Kiểm tra xem đã thành công chưa thì các bạn vào IP:2015 để kiểm tra nếu như bên dưới thì có nghĩa chúng ta đã thành công

vậy là chúng ta đã triển khai song caddy trên máy chủ ở phần sau chúng ta sẽ tiến hành cấu hình

0 0 votes
Article Rating

You might like

Avatar

About the Author: Vô Ưu

Xin chào! Tôi là Vouu, người sáng lập blog này. Tôi là một người yêu thích. Tôi có một công việc ban ngày với tư cách là một chuyên viên bơm vá săm xe các loại, và trang web này là một trong những hoạt động yêu thích của tôi, đặc biệt là trong những lúc rảnh rỗi. Hy vọng bạn thích sử dụng trang web này, và nó sẽ mang lại cho bạn nhiều điều bổ ích. Phản hồi từ người đọc sẽ truyền cảm hứng cho tôi để tôi có thể viết được nhiều hơn nữa !. Bạn chỉ cần để lại nhận xét bên dưới nếu bạn thấy bài viết này hữu ích. Chúc bạn ngày mới tốt lành!
Subscribe
Notify of
guest
0 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x