Small App on One VPS: Practical Handbook

Deploy có đường lùi, backup đã restore thật, và một buổi diễn tập phục hồi bấm giờ hẳn hoi. Có script chạy được, không chỉ là lời khuyên.

Mua trên Polar: $29 Mua một lần · v0.2.0 · tải ngay qua Polar sau khi thanh toán

Ảnh bìa Small App on One VPS: Practical Handbook
Kết quả của một lần chạy test thật, không phải ảnh dựng.

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ệu100k dòng mỗi database, 200 x 100 KB upload2M dòng mỗi database, 500 x 1 MB upload
Tổng thời gian khôi phục bằng script29.8 s34.3 s
Cài apt24.1 s23.0 s
restic restore1.6 s3.3 s
pg_restore2.6 s4.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ữ đúng MemoryMax
  • 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

Mua sản phẩm này

Mua trên Polar: $29

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.