Trong bộ này có gì
Một cuốn sổ tay kèm script chạy được, cho dev đưa app Node hoặc Go (dùng SQLite hay Postgres) lên một server Debian hoặc Ubuntu và muốn nó qua được deploy, reboot và những lần lỡ tay.
- 15 chương ngắn và một runbook một trang để in ("site sập" và "restore từ backup").
- 17 script sạch shellcheck: tạo user, siết sshd, firewall, tự động cập nhật bản vá bảo mật, deploy bằng thư mục release với rollback tự động, rollback, backup restic với dump SQLite và Postgres nhất quán, buổi diễn tập restore, kiểm tra ổ đĩa và health check, swap, rà soát secret, một demo migration và buổi diễn tập khôi phục thảm họa chạy trong Docker.
- Template config: systemd unit, Caddyfile, sshd drop-in, giới hạn journald, logrotate, cron và file env.
- Checklist để in: ngày đầu tiên, hằng tuần, trước khi deploy, trước khi rời khỏi một VPS.
Những chương mà phần lớn tài liệu bỏ qua: ghi chú chạy Postgres thật (pg_dump cho bạn gì và không cho bạn gì), giới hạn log và journald để đầy ổ đĩa không kéo cả server sập, bộ nhớ, swap và OOM killer, migration kiểu expand/contract an toàn khi deploy, secret trên một máy, và tiêu chí rõ ràng để biết khi nào nên rời một VPS.
Diễn tập khôi phục, có bấm giờ
Một script dựng lên một server "production" (app, SQLite, Postgres, file upload), backup nó bằng restic sang một volume nằm ngoài server, phá hủy server, dựng lại trên một container Debian sạch rồi kiểm tra dữ liệu còn nguyên (số dòng và checksum của từng file upload).
| Dữ liệu nhỏ | Dữ liệu lớn hơn | |
|---|---|---|
| Dữ liệu | 100k dòng mỗi database, 200 x 100 KB upload | 2M dòng mỗi database, 500 x 1 MB upload |
| Tổng thời gian khôi phục bằng script | 29.8 s | 34.3 s |
Cài apt | 24.1 s | 23.0 s |
restic restore | 1.6 s | 3.3 s |
pg_restore | 2.6 s | 4.9 s |
Mỗi cột là một lần chạy trên laptop arm64 dưới Docker Desktop. Bước cài package dao động từ 21 s đến 57 s giữa các lần chạy, nên tổng thời gian nằm trong khoảng 27 s đến 62 s. Thời gian dựng server thật ở nhà cung cấp và đổi DNS không nằm trong con số này.
Đã kiểm chứng những gì, và bằng cách nào
Mọi script và mọi chương đều đã chạy trong container Debian 12 sạch:
- sshd và ssh client thật (đăng nhập bằng key chạy được, đăng nhập root và bằng mật khẩu đều bị từ chối)
- ufw, test bằng traffic thật giữa hai container
- systemd làm PID 1: unit qua bước verify, tự khởi động lại sau
kill -9, nhận release mới sau khi đổi symlink, và giữ đúngMemoryMax - gói Caddy của Debian proxy tới app, và trả 502 khi app bị dừng
- backup và restore bằng restic và PostgreSQL 15, kể cả các trường hợp lỗi (database hỏng, sai mật khẩu, bản dump cũ)
- giới hạn của journald và logrotate, ổ đĩa đầy, bị OOM kill, migration trên SQLite và Postgres
Một lệnh (verify/run.sh, cần Docker) chạy lại toàn bộ phần kiểm tra trên máy của bạn.
Phạm vi
Một server và một app. Không autoscaling, không Kubernetes, không multi-region. Nếu bạn cần những thứ đó, chương cuối chỉ cách nhận ra điều này.
Câu hỏi hay gặp
Định dạng là gì?
Markdown, shell script và file config. Đọc ở đâu cũng được, copy lệnh ra dùng. Không khóa DRM kiểu PDF, không cần tài khoản.
Chỉ dành cho Debian thôi à?
Lệnh viết cho Debian và Ubuntu, đã kiểm chứng trên Debian 12.
Nó khác gì VPS Deploy & Backup Kit?
Kit là một bộ script đã test (deploy blue/green, backup, cảnh báo). Sổ tay này là phần kiến thức và script xung quanh: dựng server, systemd, HTTPS, log, bộ nhớ, migration, secret và buổi diễn tập khôi phục. Hai bên có chồng nhau ở phần cơ bản của deploy và backup.
Có cần Docker không?
Chỉ khi bạn muốn chạy lại bộ kiểm chứng. Bản thân các script chạy trên server bình thường.
Giấy phép thế nào?
Dùng trên server của bạn và trong nhóm của bạn. Không bán lại hay phân phối lại các file.
Lịch sử thay đổi
- 0.2.0: chương 1 đến 3 và 7 đã kiểm chứng trong container, buổi diễn tập khôi phục thảm họa có bấm giờ, thêm các chương về Postgres, log, bộ nhớ, migration, secret và việc rời một VPS, 17 script đã test, runbook.
- 0.1.0: bản đầu tiên.
Bài liên quan
- How to write a restore runbook you can follow at 3 a.m. (tiếng Anh)
- systemd or pm2 for a small Node app on one VPS? (tiếng Anh)
- SSH, ufw and fail2ban basics for a single VPS (tiếng Anh)
- When a restore succeeds and hands you the wrong data (tiếng Anh)
- Monitor one VPS without Prometheus, Grafana or a stack (tiếng Anh)
- Find what filled your VPS disk and keep it from happening (tiếng Anh)
- Harden a fresh Debian VPS in the first hour, step by step (tiếng Anh)
- I destroyed my server on purpose and timed the recovery (tiếng Anh)
- Caddy or nginx for a one-person VPS stack, compared (tiếng Anh)
Mua sản phẩm này
Polar lo thanh toán, thuế và hóa đơn (họ là merchant of record). Thanh toán xong bạn nhận link tải ngay.