Alpine Linux là ảnh nhỏ nhất chúng tôi cung cấp. Trên máy chủ của chúng tôi, Alpine 3.21 mới cài dùng 55 MB RAM và 153 MB ổ đĩa khi rảnh, so với 313 MB và 2,7 GB của Ubuntu 24.04. Đổi lại, bạn phải bỏ các công cụ quen thuộc. Alpine dùng apk thay cho apt, doas thay cho sudo, OpenRC thay cho systemd và musl thay cho glibc.
Các bước dưới đây là cùng mười phút đầu tiên như trên Debian hay Ubuntu, chuyển sang cách làm của Alpine. Trước khi đăng, chúng tôi đã chạy mọi lệnh trên ảnh Alpine 3.21 của mình, và hai lệnh trong số đó làm chúng tôi vấp ngay lần đầu. Đăng nhập bằng root với mật khẩu trong bảng điều khiển.
1. Cập nhật, rồi khởi động lại một lần
apk update && apk upgrade
uname -r
ls /lib/modules
Máy chủ đã cài các bản cập nhật có sẵn ngay lần khởi động đầu tiên, nên apk upgrade thường chẳng còn mấy việc. Hãy nhìn vào hai dòng cuối. Nếu lần cập nhật đầu đó mang về kernel mới, kernel đang chạy (uname -r) không còn module của nó trên đĩa. Mọi thứ cần nạp module sẽ lỗi cho đến khi khởi động lại. Trên máy chủ thử nghiệm của chúng tôi, việc cài tường lửa in ra ERROR: Couldn't determine iptables version. Nếu hai phiên bản khác nhau, hãy khởi động lại ngay:
reboot
Máy chủ thử nghiệm của chúng tôi quay lại trong chưa đầy một phút.
2. Tạo người dùng đăng nhập được
adduser -D deploy
passwd deploy
adduser deploy wheel
Đừng bỏ qua passwd. adduser -D tạo tài khoản không có mật khẩu, Alpine đánh dấu nó là bị khóa, và sshd từ chối tài khoản bị khóa ngay cả khi khóa SSH đúng. Trong lần thử của chúng tôi, manh mối duy nhất là dòng này trong /var/log/messages:
User deploy not allowed because account is locked
Mật khẩu còn cần về sau: doas sẽ hỏi chính mật khẩu này.
Nếu bạn đã thêm khóa SSH khi đặt máy chủ, nó nằm trong authorized_keys của root. Sao chép sang người dùng mới:
install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy /root/.ssh/authorized_keys /home/deploy/.ssh/authorized_keys
Chưa có khóa? Tạo một khóa trên máy tính của bạn rồi dán phần công khai vào /home/deploy/.ssh/authorized_keys.
3. Để doas hỏi mật khẩu
Alpine dùng doas thay cho sudo, và ảnh của chúng tôi đã cho phép nhóm wheel dùng nó. Quy tắc trong /etc/doas.d/wheel.conf là permit nopass :wheel, tức là bất kỳ thành viên nào của wheel cũng thành root mà không cần gõ gì. Hãy để nó hỏi mật khẩu rồi nhớ trong vài phút:
echo 'permit persist :wheel' > /etc/doas.d/wheel.conf
Từ giờ doas apk add nano hoạt động giống sudo apt install nano trên Ubuntu.
4. SSH: chỉ dùng khóa, không cho root
sshd đọc các file trong /etc/ssh/sshd_config.d/ theo thứ tự tên và giữ giá trị đầu tiên tìm thấy cho mỗi thiết lập. Trên ảnh của chúng tôi, file đầu tiên là 00-eqvps.conf, cho phép root và mật khẩu để bạn vào được ngày đầu. Thay nội dung của nó:
cat > /etc/ssh/sshd_config.d/00-eqvps.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
EOF
sshd -t && rc-service sshd restart
sshd -T | grep -E '^(permitrootlogin|passwordauthentication|kbdinteractiveauthentication) '
Dòng thứ ba quan trọng trên Alpine. Ảnh dùng bản OpenSSH có PAM, và chỉ với hai dòng đầu, máy chủ thử nghiệm của chúng tôi vẫn cho đăng nhập keyboard-interactive. Với đủ ba dòng, một lần thử đăng nhập không có khóa nhận được:
Permission denied (publickey).
Giữ phiên root mở. Trong một terminal thứ hai, kiểm tra rằng ssh deploy@YOUR.SERVER.IP hoạt động (với gói NAT, thêm -p và cổng riêng trong bảng điều khiển) và doas id chấp nhận mật khẩu.
5. Tường lửa: ufw
ufw nằm trong kho community, kho này đã bật sẵn trên ảnh của chúng tôi:
apk add ufw
ufw limit 22/tcp
ufw --force enable
rc-update add ufw default
ufw status
limit cho SSH đi qua nhưng làm chậm ai mở nhiều kết nối liên tiếp. rc-update quan trọng ở đây, vì OpenRC không chạy tường lửa sau khi khởi động lại nếu bạn không thêm nó vào runlevel. Sau khi khởi động lại, máy chủ của chúng tôi quay lại với Status: active. Trên gói NAT, hãy để SSH ở cổng 22: cổng ngoài riêng của bạn được chuyển tiếp tới cổng 22 bên trong máy chủ. Trên gói có IPv4 riêng, mở các cổng web khi cần (ufw allow 80/tcp, ufw allow 443/tcp). Phần còn lại có trong hướng dẫn ufw.
6. Bật cron và cập nhật hằng ngày
Máy chủ Alpine mới hoàn toàn không chạy cron. Bật nó lên:
rc-update add crond default
rc-service crond start
crontab của root trên Alpine đã chạy mọi thứ trong /etc/periodic/daily lúc 02:00. Đặt một script cập nhật vào đó:
cat > /etc/periodic/daily/apk-upgrade <<'EOF'
#!/bin/sh
apk upgrade --update-cache --no-progress >> /var/log/apk-auto.log 2>&1
EOF
chmod +x /etc/periodic/daily/apk-upgrade
run-parts --test /etc/periodic/daily
Lệnh cuối liệt kê các script mà cron sẽ chạy, và script của bạn phải có trong danh sách. Như vậy bạn nhận được các bản sửa cho 3.21. Chuyển sang bản phát hành Alpine tiếp theo là một bước riêng, làm thủ công. Cập nhật kernel vẫn cần khởi động lại: thỉnh thoảng lặp lại phép kiểm tra uname -r / ls /lib/modules ở bước 1.
7. OpenRC trong một bảng
Nếu bạn biết systemd, đây là gần như mọi thứ thay đổi:
| Việc | systemd | Alpine (OpenRC) |
|---|---|---|
| Chạy dịch vụ | systemctl start nginx | rc-service nginx start |
| Chạy khi khởi động | systemctl enable nginx | rc-update add nginx default |
| Trạng thái | systemctl status nginx | rc-service nginx status |
| Những gì đang chạy | systemctl list-units | rc-status |
| Nhật ký hệ thống | journalctl | /var/log/messages |
8. Docker, và cổng mà ufw không chặn
Alpine là máy chủ Docker tốt vì bản thân hệ thống hầu như không cản trở:
apk add docker docker-cli-compose
rc-update add docker default
rc-service docker start
docker run --rm hello-world
Trên máy chủ của chúng tôi, việc này mất 12 giây kể cả tải về. Khi daemon Docker chạy, bộ nhớ đã dùng tăng từ 57 MB lên 124 MB.
Một cái bẫy không chỉ riêng Alpine: Docker tự ghi quy tắc tường lửa của nó. Khi ufw chỉ cho phép SSH, chúng tôi chạy nginx với -p 8080:80 và truy cập được nó từ bên ngoài máy chủ ở cổng 8080. ufw không chặn. Nếu một container chỉ nên được truy cập qua reverse proxy trên cùng máy chủ, hãy công bố nó trên localhost:
docker run -d -p 127.0.0.1:8080:80 nginx:alpine
Chọn gói nào
Alpine để lại gần như toàn bộ RAM cho phần mềm của bạn. Gói Nano (2 vCPU, 1 GB, 15 GB, $3/tháng) đủ cho một dịch vụ nhỏ hoặc vài container. Đây là gói NAT, nên SSH đi vào qua một cổng riêng. Nếu cần mở cổng 80 và 443 ra internet, Nano-IP có IPv4 riêng với giá $8/tháng. Với các bộ Docker nặng hơn, Micro cho bạn 2 GB với giá $5/tháng.
Alpine 3.21 có trên trang Alpine VPS và có sẵn trên mọi gói Linux tại VPS. Thanh toán bằng USDT, USDC hoặc ETH trên Base, Ethereum hoặc Polygon, không cần giấy tờ hay thẻ.
Bình luận
Chưa có bình luận nào. Hãy là người đầu tiên.