Tôi suýt nâng cấp server. Làm ngược lại cắt 40% hoá đơn
Tôi nuôi 9 con droplet với hoá đơn khoảng $198/tháng. Khi tải tăng, bản năng bảo "mua máy to hơn". Tôi làm ngược lại: gom 9 con về 1 host chung. Kết quả: khoảng $132/tháng — cắt ~33–40%, không giết app nào, con kiếm tiền zero downtime.
Đây là playbook chính xác.
Toán thật: tiết kiệm đến từ đâu
Nhà cung cấp (DigitalOcean, Hetzner, Linode) tính tiền gần như tuyến tính trên $/GB RAM — gần như không giảm giá theo lượng. 8 con 2GB tốn xấp xỉ 1 con 16GB trên giấy. Vậy tiền tiết kiệm đến từ đâu?
Mẹo cốt lõi: đừng size box chung theo tổng các đỉnh — đỉnh hiếm khi trùng. Size theo đỉnh đồng thời, thấp hơn nhiều.
Làm an toàn: nhiều app, một host, không đạp nhau
Cơ chế gọn là một reverse proxy route theo hostname (tôi dùng Kamal + kamal-proxy; Traefik/Caddy tương tự). Mỗi app khai domain, proxy route đúng container, tự lo cert.
Công thức migrate mỗi app:
Cạm bẫy thật: custom Docker network không tự tạo (phải `docker network create` trước); build remote dùng git committed (code chưa commit âm thầm không deploy).
Chuyển data zero-loss
Postgres thì dễ: `pg_dump -Fc` → restore → đối chiếu số dòng trước khi cutover. ClickHouse (event lỗi) thì dùng export native theo bảng, và phải DROP materialized view trước khi load (không thì đếm đôi), cùng override cap RAM mỗi query. Verify bằng anti-join theo id.
Bảo vệ con kiếm tiền
Trên box chung, một container không cap là khẩu súng lên đạn — một rò RAM có thể OOM cả máy. Cap cứng RAM/CPU mỗi container biến "mọi thứ chết" thành "con phá phách chết một mình". Giữ sản phẩm trả-tiền cap rộng nhất, hoặc cho nó làm chính cái host.
Vận hành sau đó
Học toàn bộ playbook
Tôi dạy chi tiết từng bước — kèm những lần suýt mất data — trong khóa Tôi tưởng phải NÂNG CẤP server. Hoá ra làm ngược lại — và tiết kiệm 40% (bản tiếng Anh: I thought I had to upgrade my servers).
Nếu bạn đang nuôi nhiều side project và đốt tiền hosting mỗi tháng, đây là cách cắt nó xuống mà không hy sinh app nào.