0
0
Lập trình
Admin Team
Admin Teamtechmely

Hướng Dẫn Tự Xây Dựng Máy Chủ Đám Mây Tại Nhà

Đăng vào 6 tháng trước

• 9 phút đọc

Chủ đề:

KungFuTech

Hướng Dẫn Tự Xây Dựng Máy Chủ Đám Mây Tại Nhà

Bài viết này là một phần trong series “Tự Hosting Từ Đầu” của tôi.
Bạn có mệt mỏi khi phải chi trả cho AWS, Render hay Fly.io trong khi quản lý nhiều dự án không? Tôi sẽ hướng dẫn bạn cách xây dựng một thiết lập hosting tự quản lý, từng bước một, với tất cả các lỗi, sửa lỗi và bài học đã học được trong quá trình này.

Lộ Trình Series:

  • Bài 1-3: Phần Cứng, Cài Đặt Ubuntu & Bảo Mật
  • Bài 4: Docker & Docker Compose
  • Bài 5: Reverse Proxy với Traefik
  • Bài 6: Cloudflare Tunnel (HTTPS công khai mà không cần cấu hình router)
  • Bài 7: Kiểm Tra Smoke với Whoami
  • Bài 8: Postgres trong Docker (volume, kiểm tra sức khỏe, sao lưu)
  • ... và nhiều bài khác sẽ sớm ra mắt

Đánh Dấu Series Này

Ghi nhớ series này và theo dõi. Cuối cùng, bạn sẽ tự tin chạy máy chủ của riêng mình.

Mục Tiêu Cuối Cùng Ngày Hôm Nay

Bạn sẽ hoàn thành với một máy chủ Ubuntu sạch sẽ, an toàn mà bạn có thể đăng nhập từ laptop của mình bằng khóa SSH, với tường lửacập nhật bảo mật tự động. Đây sẽ là nền tảng mà chúng ta sẽ sử dụng lại cho Docker, Traefik, Cloudflare Tunnel, cơ sở dữ liệu và lưu trữ tệp trong các bài học sau.

Tôi sẽ dạy theo cách tôi đã xây dựng máy chủ của mình, để bạn hiểu tại sao mỗi lệnh tồn tại, khi nào sử dụng và cách sửa các lỗi phổ biến mà không hoảng sợ.


Lộ Trình (Hôm Nay & Tiếp Theo)

Hôm Nay (Bài 1-3):

  1. Lựa chọn phần cứng (máy chủ tại nhà vs PC nhỏ vs VPS)
  2. Cài đặt Ubuntu Server (LTS) & khởi động lần đầu
  3. Bảo mật truy cập: khóa SSH, tường lửa, cập nhật

Tiếp theo (theo thứ tự):
Docker & Compose → Traefik → Cloudflare Tunnel → kiểm tra smoke “whoami” → Postgres → Prisma → API Node/Express → lưu trữ tương thích với Cloudflare R2/S3 → tải lên đã ký trước → khả năng quan sát → phân tách dev/prod sạch sẽ.

Trong suốt series, tôi cũng sẽ chỉ ra những lỗi thực tế mà chúng tôi gặp phải (ví dụ: Traefik 404 từ một container không khỏe mạnh, sự không tương thích OpenSSL của Prisma, các vấn đề CORS của S3) và cách chúng tôi sửa chúng, để bạn không mất cả ngày như chúng tôi.


BÀI HỌC 1: Phần Cứng (Chọn cái phù hợp với ngân sách của bạn)

Cây Quyết Định (tiếng Việt đơn giản)

  • £0–£50: Tái sử dụng một PC hoặc laptop cũ.

    • Ưu điểm: miễn phí, khởi động nhanh. Nhược điểm: tiêu thụ điện, ổ đĩa cũ.
  • £120–£300: Mini PC đã tân trang (Lenovo Tiny, Dell Micro, Intel NUC).

    • Điểm lý tưởng: 16–32 GB RAM, 256+ GB SSD, yên tĩnh, tiêu thụ điện thấp.
  • £5–£10/tháng: VPS (Hetzner/Contabo/Linode).

    • Ưu điểm: luôn bật, có IP công cộng. Nhược điểm: chi phí hàng tháng.

Thông Số Tối Thiểu cho Khóa Học Này

  • CPU: bất kỳ x86_64 nào từ khoảng ~10 năm qua
  • RAM: 8 GB (16 GB nếu bạn sẽ chạy DB + lưu trữ đối tượng + tìm kiếm)
  • Disk: 128 GB SSD (NVMe là lý tưởng). Bắt đầu đơn giản (một đĩa).
  • Mạng: Ethernet có dây nếu có thể (Wi-Fi cũng được, nhưng khó khăn hơn)

Các Tiện Ích Thêm (tùy chọn)

  • UPS (pin mini) để tránh việc mất điện làm hỏng cơ sở dữ liệu.
  • Ghi nhãn hộp với tên máy chủ và IP tĩnh; bạn sẽ cảm ơn bản thân sau này.

Điểm Kiểm Tra: chọn thiết bị của bạn. Nếu nó ở nhà, hãy cắm Ethernet. Nếu đó là VPS, hãy ghi chú IP đã cung cấp và đăng nhập.


BÀI HỌC 2 — Ubuntu Server (Cài đặt & Khởi động lần đầu)

Chúng ta sẽ cài đặt Ubuntu Server 24.04 LTS vì nó ổn định và được hỗ trợ tốt bởi Docker.

2.1 Tạo phương tiện cài đặt

  1. Tải xuống file ISO Ubuntu Server 24.04 LTS.
  2. Flash nó vào USB stick bằng balenaEtcher (hoặc Rufus trên Windows).
Copy
* Tại sao: nó ghi ISO ở định dạng có thể khởi động một cách an toàn.

2.2 Khởi động BIOS/UEFI

  • Cắm USB vào máy chủ của bạn, bật nguồn, nhấn F12 / F2 / DEL / ESC để mở menu khởi động, chọn thiết bị USB.

2.3 Trình cài đặt (chọn cái gì & tại sao)

  • Bàn phím/Ngôn ngữ: mặc định thường ổn.
  • Mạng: DHCP là ổn cho bây giờ (chúng ta sẽ sử dụng Cloudflare Tunnel sau, vì vậy không cần chuyển tiếp cổng).
  • Lưu trữ: “Sử dụng toàn bộ đĩa”. LVM là tùy chọn. Bắt đầu đơn giản.
  • Người dùng: tạo một người dùng quản trị (tài khoản này có sudo).
  • OpenSSH: Bật nó (cho phép bạn đăng nhập từ xa).
  • Khởi động lại, gỡ USB ra.

Nếu bạn thấy một nhắc nhở tên máy chủ, hãy chọn một cái gì đó dễ nhớ, ví dụ: blackscript-server hoặc orion.

2.4 Đăng nhập lần đầu (tại chỗ hoặc qua SSH)

Trên màn hình máy chủ, bạn sẽ thấy một địa chỉ IP (ví dụ: 192.168.1.50).
Từ terminal laptop/desktop của bạn:

Copy
ssh youruser@192.168.1.50
  • ssh mở một shell bảo mật tới máy chủ.
  • Lần đầu tiên, bạn sẽ được yêu cầu tin tưởng một dấu vân tay → gõ yes, sau đó nhập mật khẩu của bạn.

2.5 Cập nhật hệ thống (cơ sở bảo mật)

Copy
sudo apt update
sudo apt upgrade -y
  • apt update làm mới danh sách gói.
  • apt upgrade -y áp dụng các bản nâng cấp ngay lập tức.

Điểm Kiểm Tra: chạy hostnamectl (xem tên máy chủ của bạn) và ip a | grep inet (xác nhận IP). Nếu SSH hoạt động và cập nhật hoàn tất, bạn đã sẵn sàng cho việc bảo mật.


BÀI HỌC 3 — Bảo Mật Truy Cập (Khóa SSH, Tường Lửa, Cập Nhật)

Chúng tôi sẽ giúp bạn đến một nơi mà bạn đăng nhập bằng khóa (không phải mật khẩu), một tường lửa bảo vệ hộp, và cập nhật bảo mật tự động áp dụng.

⚠️ Mẹo an toàn: giữ một phiên SSH mở trong khi bạn thay đổi cài đặt. Nếu bạn cấu hình sai, bạn vẫn có một đường cứu.

3.1 Tạo khóa SSH (trên laptop của bạn)

Nếu bạn chưa có:

Copy
ssh-keygen -t ed25519 -C "you@example.com"

Điều nó làm:

  • Tạo một cặp khóa trong ~/.ssh/ (id_ed25519 + id_ed25519.pub).
  • -t ed25519 là loại khóa hiện đại, an toàn.
  • -C thêm một nhãn để bạn nhận ra sau này.
  • Đặt một cụm mật khẩu khi được yêu cầu (để bảo vệ khỏi đánh cắp cục bộ).

3.2 Sao chép khóa của bạn vào máy chủ

Vẫn trên laptop của bạn:

Copy
ssh-copy-id youruser@192.168.1.50

Điều nó làm:

  • Thêm khóa công khai của bạn vào ~/.ssh/authorized_keys của máy chủ.
  • Sau khi này, khóa của bạn có thể đăng nhập mà không cần nhập mật khẩu máy chủ mỗi lần.

Nếu ssh-copy-id không có sẵn, bạn có thể sao chép bằng tay:

Copy
cat ~/.ssh/id_ed25519.pub | ssh youruser@192.168.1.50 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

3.3 Kiểm tra đăng nhập bằng khóa

Đóng phiên SSH của bạn và kết nối lại:

Copy
ssh youruser@192.168.1.50

Nếu nó đăng nhập mà không yêu cầu mật khẩu máy chủ (nó có thể hỏi cụm mật khẩu của bạn), bạn đã thành công.

3.4 Bật & cấu hình tường lửa (UFW)

Copy
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status
  • allow OpenSSH mở cổng 22 để bạn không bị khóa.
  • enable bật tường lửa lên.
  • status hiển thị các quy tắc đã cho phép.

Sau này, khi chúng ta chạy Traefik, chúng ta sẽ mở HTTP (80). Với Cloudflare Tunnel, bạn thường không cần mở cổng công khai, nhưng chúng ta sẽ đề cập cả hai mô hình.

3.5 Củng cố SSH (vô hiệu hóa đăng nhập bằng mật khẩu & root)

Copy
sudo nano /etc/ssh/sshd_config

Tìm/cài đặt:

Copy
PasswordAuthentication no
PermitRootLogin no

Lưu và khởi động lại SSH:

Copy
sudo systemctl restart ssh

Tại sao:

  • Đăng nhập bằng mật khẩu có thể bị brute-forced trên internet công cộng. Khóa an toàn hơn.
  • Đăng nhập root bị vô hiệu hóa giảm thiểu rủi ro.

Phục hồi nếu bạn bị khóa:

  • Sử dụng console/KVM/monitor + bàn phím để tạm thời đặt lại PasswordAuthentication yes.
  • Hoặc kích hoạt lại qua bảng điều khiển nhà cung cấp đám mây.
    Luôn giữ một cửa sổ SSH mở trong khi kiểm tra thay đổi.

3.6 Cập nhật bảo mật tự động

Copy
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
  • Cài đặt một dịch vụ áp dụng tự động các bản cập nhật bảo mật.
  • Bước cấu hình lại này kích hoạt nó một cách liên tục.

Bạn có thể kiểm tra nhật ký trong /var/log/unattended-upgrades/.


Mạng An Toàn Bổ Sung (tùy chọn nhưng tốt)

A. Tạo bí danh SSH thân thiện trên laptop của bạn

Thêm vào ~/.ssh/config:

Copy
Host home-server
  HostName 192.168.1.50
  User youruser
  IdentityFile ~/.ssh/id_ed25519

Bây giờ bạn có thể thực hiện ssh home-server.

B. Múi Giờ & NTP (hữu ích cho nhật ký)

Copy
sudo timedatectl set-timezone Europe/London
timedatectl

C. Cài đặt fail2ban cơ bản (chặn các lần xác thực thất bại lặp lại. Hữu ích nếu bạn mở SSH)

Copy
sudo apt install -y fail2ban

Mặc định là hợp lý; chúng ta có thể điều chỉnh sau nếu bạn mở SSH ra thế giới.


“Những gì có thể sai?” (những lỗi thực tế mà chúng tôi đã mắc phải)

  • Bị khóa khỏi SSH.
    Tôi đã vô hiệu hóa đăng nhập bằng mật khẩu trước khi xác nhận xác thực bằng khóa hoạt động.
    Cách xử lý: Console vào, đặt lại PasswordAuthentication yes, khởi động lại ssh, sao chép khóa chính xác, sau đó vô hiệu hóa lại.

  • UFW đã khóa SSH của tôi.
    Tôi đã bật UFW mà không cho phép OpenSSH trước.
    Cách xử lý: Console vào, sudo ufw allow OpenSSH, sudo ufw enable.

  • Không có mạng sau khi khởi động lại.
    Router thay đổi IP qua DHCP.
    Cách xử lý: Kiểm tra màn hình/ip a để biết IP mới. Sau này, chúng ta sẽ đặt một dự trữ DHCP hoặc một IP tĩnh.

Những lỗi lớn hơn chúng ta sẽ gặp sau (và sửa):

  • Traefik 404s vì container backend không khỏe mạnh (kiểm tra sức khỏe của chúng tôi đã hit một /healthz không tồn tại).
  • Sự không tương thích OpenSSL của Prisma (khách hàng được xây dựng cho openssl-1.1.x nhưng runtime có 3.0.x). Chúng tôi đã sửa bằng cách đặt binaryTargets = ["native","debian-openssl-3.0.x"] và tạo trong hình ảnh xây dựng.
  • Cơn đau đầu CORS của S3 trên MinIO; chúng tôi đã làm việc xung quanh bằng cách tiêm CORS tại Traefik.

Bạn sẽ thấy những sửa chữa đó trong bối cảnh khi chúng ta đạt đến những bài học đó.


Tóm Tắt (những gì bạn đã đạt được hôm nay)

  • Chọn phần cứng hợp lý mà không làm hỏng ví tiền của bạn.
  • Cài đặt Ubuntu Server 24.04 LTS đúng cách (với SSH).
  • Đăng nhập từ laptop của bạn, bật tường lửa, chuyển sang xác thực dựa trên khóa và bật cập nhật bảo mật tự động.

Đây là nền tảng. Với điều này hoàn tất, mọi thứ khác (Docker, Traefik, tunnel, DBs) trở nên đơn giản và có thể lặp lại.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào