Toàn bộ chương trình

Giáo trình 12 ngày

Khóa đào tạo thực chiến dành cho bạn đã biết lập trình frontend hoặc backend: viết được code, dùng terminal khá ổn, nhưng chưa từng đưa một dự án đi hết vòng đời từ ý tưởng đến chạy thật cho mọi người dùng. Qua 12 ngày, bạn tự dựng server, gắn tên miền, bật HTTPS, làm một ứng dụng có cả frontend lẫn backend, đóng gói bằng Docker và học cách vận hành nó. Đến Ngày 12, bạn hiểu trọn hành trình từ lúc người dùng gõ địa chỉ vào trình duyệt, qua máy chủ, đến cơ sở dữ liệu phía sau.

Cách khóa học được thiết kế

5 nguyên tắc xuyên suốt 12 ngày

01

Hiểu trọn hành trình từ đầu đến cuối

Trọng tâm của khóa là cả hành trình: ý tưởng → terminal → server → tên miền → nginx → HTTPS → backend → Docker → chạy thật. Bạn phải kể lại được từng chặng, nên chúng tôi dùng đi dùng lại một sơ đồ duy nhất cho đến khi nó thành phản xạ.

02

Làm thủ công trước, dùng công cụ sau

Bạn bắt đầu bằng cách làm trực tiếp: tự cài nginx bằng apt, chạy backend bằng systemd, tự sửa file cấu hình, để thấy điều gì đang thực sự xảy ra. Sau đó mới đến Docker để đóng gói và chạy giống nhau ở mọi nơi. Dùng một công cụ mà không hiểu nó làm gì thì rất khó sửa khi gặp sự cố.

03

AI viết nhanh, bạn chịu trách nhiệm

Bạn sẽ dùng AI để viết rất nhiều code, cả frontend lẫn backend. Nhưng bạn phải đọc hiểu, rà soát, chỉnh sửa và đưa lên chạy được những gì AI viết. Kỹ năng bạn luyện: viết yêu cầu rõ ràng cho AI, kiểm tra kết quả, triển khai và chịu trách nhiệm về sản phẩm.

04

Mỗi ngày một lớp, luôn kiểm tra được

Mỗi ngày bạn thêm một lớp mới và kết thúc bằng kết quả chạy thật, mở được ngay trên điện thoại: truy cập bằng địa chỉ IP → qua tên miền → có HTTPS → có dữ liệu thật → đóng gói bằng Docker.

05

Ngày nào cũng thực hành

Mỗi ngày có một bài lab làm ra một sản phẩm thật. Không có ngày nào chỉ ngồi xem video.

Bức tranh tổng thể

Một sơ đồ xuyên suốt cả khóa học

TRÌNH DUYỆT CỦA NGƯỜI DÙNG  (gõ  https://app.example.com)
      |
      | (1) DNS: IP của app.example.com là gì?  -> 203.0.113.10
      v
(2) Kết nối TCP tới 203.0.113.10:443
(3) Bắt tay TLS -> kênh mã hóa (HTTPS)
      |
      v
+-------------------- MÁY CHỦ (VPS) ---------------------+
|   firewall (ufw) mở 22, 80, 443                        |
|   (4) Request HTTP đến cổng 443                        |
|               |                                        |
|               v                                        |
|   NGINX   (reverse proxy + máy chủ file tĩnh)          |
|         |                          |                   |
|         | / (frontend)             | /api/*            |
|         v                          v                   |
|   [ FILE TĨNH ]            [ APP: Flask / FastAPI ]    |
|    HTML / CSS / JS           (trong Docker, cổng 8000) |
|                                    |                   |
|                                    v                   |
|                             [ SQLITE DB (một file) ]   |
+--------------------------------------------------------+
      |
      v
Response (JSON / HTML) chảy ngược qua TLS -> trình duyệt render.
Trình duyệt hỏi DNS để tìm địa chỉ IP, kết nối, mã hóa bằng HTTPS rồi gửi yêu cầu. Trên máy chủ, nginx trả file giao diện hoặc chuyển yêu cầu /api cho ứng dụng; ứng dụng đọc và ghi SQLite, rồi kết quả được gửi ngược về trình duyệt.

Bạn cần chuẩn bị gì?

  • Biết viết JavaScript cơ bản và ít nhất một ngôn ngữ backend (Python là lý tưởng).
  • Dùng được terminal ở mức các lệnh cd, ls, grep.
  • Có máy tính với terminal và trình duyệt, cùng khoảng 30–50 USD cho một tháng thuê server (VPS) và tên miền.
  • Sẵn sàng làm hỏng rồi sửa lại. Bạn chắc chắn sẽ gặp lỗi, và đó chính là cách học.

Công cụ dùng trong khóa

Cả lớp dùng chung một bộ.

Server (VPS)Hetzner, DigitalOcean hoặc Linode: gói nào khoảng 5 USD/tháng cũng được
Hệ điều hànhUbuntu 24.04 LTS
Kết nối SSHssh và khóa ed25519
Web servernginx
HTTPScertbot (Let's Encrypt)
BackendPython 3 và Flask (FastAPI là lựa chọn hiện đại hơn)
Cơ sở dữ liệuSQLite
ContainerDocker Engine và Docker Compose
Tên miền (DNS)Trang quản lý của nơi bạn mua tên miền, hoặc Cloudflare (miễn phí)

Chi tiết từng ngày

Lộ trình 12 ngày

Mỗi ngày bạn hoàn thành một sản phẩm chạy được. Bấm vào ngày bất kỳ để xem nội dung chi tiết.

Ngày 01

Làm quen terminal

Gõ lệnh, quản lý file và quyền truy cập, kết nối SSH vào máy chủ.

Mở Ngày 1 →
Ngày 02

Dựng giao diện web

Viết HTML, CSS, JS và dùng AI dựng một trang web responsive, chạy trên mạng.

Mở Ngày 2 →
Ngày 03

Lập trình Python

Viết script, gỡ lỗi khi chạy sai và làm một công cụ dòng lệnh nhỏ.

Mở Ngày 3 →
Ngày 04

Backend và cơ sở dữ liệu

Làm quen HTTP, xây API bằng Flask và lưu dữ liệu với SQLite.

Mở Ngày 4 →
Ngày 05

Quản lý code với Git

Lưu lịch sử, làm việc với nhánh, hoàn tác khi sai, và tách môi trường cho từng dự án.

Mở Ngày 5 →
Ngày 06

Docker và nginx

Đóng gói cả hệ thống bằng Docker, đặt sau nginx để chạy giống nhau ở mọi máy.

Mở Ngày 6 →
Ngày 07

Tên miền và HTTPS

Trỏ tên miền riêng, bật khóa HTTPS và cho dịch vụ tự chạy lại khi máy khởi động.

Mở Ngày 7 →
Ngày 08

Bảo mật, email và thanh toán

Bật tường lửa, lưu mật khẩu an toàn, chặn SQL injection, gửi email và thử thanh toán.

Mở Ngày 8 →
Ngày 09

AI và giám sát hệ thống

Thêm tính năng AI vào site và dựng cảnh báo khi site gặp sự cố.

Mở Ngày 9 →
Ngày 10

Hướng mở rộng tiếp theo

Làm quen CDN, Kubernetes, CI/CD, lưu trữ file và hàng đợi để biết nên học gì tiếp.

Mở Ngày 10 →
Ngày 11

Lên kế hoạch dự án cuối khóa

Chọn hướng làm (web, game hay ứng dụng) và chốt phạm vi vừa sức.

Mở Ngày 11 →
Ngày 12

Demo dự án cuối khoá

Tự làm một sản phẩm hoàn chỉnh và trình bày trước mentor và các kỹ sư phần mềm nhiều năm kinh nghiệm.

Mở Ngày 12 →

Cách đánh giá

Bạn được đánh giá ra sao?

Mỗi ngày

Mỗi bài lab phải ra một sản phẩm chạy thật: một đường link mở được, một dịch vụ vẫn chạy sau khi khởi động lại máy, một chứng chỉ HTTPS tự gia hạn. Chưa chạy hoặc chưa kiểm tra được thì ngày đó chưa xong.

Giải thích bằng lời (Ngày 4, 6, 12)

Bạn kể lại sơ đồ bức tranh tổng thể và đi qua một yêu cầu thật, nói thành tiếng. Bạn cần giải thích được vì sao nginx nằm ở đó, dữ liệu lưu ở đâu, và điều gì sẽ hỏng nếu bỏ đi một lớp.

Dự án cuối khoá (Ngày 12)

Bạn tự làm một sản phẩm mới từ đầu đến cuối. Đạt khi một người lạ trên internet mở được, có HTTPS và dữ liệu được giữ lại.

Sau 12 ngày

Học gì tiếp theo sau khóa học?

1

Mở rộng quy mô

Chạy nhiều bản của ứng dụng sau một bộ cân bằng tải (load balancer), dùng cơ sở dữ liệu Postgres dùng chung thay cho SQLite.

2

CI/CD

Dùng GitHub Actions để tự động build, đóng gói và triển khai mỗi khi gộp code.

3

CDN và lớp bảo vệ phía trước

Đặt Cloudflare phía trước để lưu cache, chống tấn công (WAF, DDoS) và dùng CDN miễn phí.

4

Vận hành chuyên nghiệp

Giám sát bằng Prometheus và Grafana, log có cấu trúc, cảnh báo, và cuối cùng là chạy container trên cụm Kubernetes.

5

Hạ tầng bằng code

Dùng Terraform hoặc Packer để dựng cả server từ code, thay vì cấu hình bằng tay.

Phụ lục

Tham khảo nhanh

Lượt request, theo thứ tự: DNS (tên→IP) → kết nối TCP → bắt tay TLS (HTTPS) → request HTTP → nginx (file tĩnh hoặc reverse-proxy) → app (Flask) → SQLite → response quay về qua TLS.

Bảng cheat vận hành hằng ngày

Nhiệm vụLệnh
Máy có đạt không?ping <ip> · curl -I https://<domain>
Cái gì đang lắng nghe?ss -tlnp
Check DNSdig +short <domain> A · nslookup <domain>
Trạng thái / log dịch vụsystemctl status <svc> · journalctl -u <svc> -f
Test / reload nginxsudo nginx -t · sudo systemctl reload nginx
Gia hạn certbot (test)sudo certbot renew --dry-run
Docker lên / xuốngdocker compose up -d · docker compose down
Log Dockerdocker compose logs -f
IP côngcurl ifconfig.me
Firewallsudo ufw status · sudo ufw allow 443

Quy tắc “không bao giờ bị khóa ngoài”

  1. Cho phép SSH (22) trong firewall trước khi bật nó.
  2. Giữ một session SSH thứ hai mở khi sửa sshd_config.
  3. Test cấu hình SSH mới từ session thứ hai trước khi đóng session đầu.
  4. Gắn app vào 127.0.0.1, không 0.0.0.0 — nginx là cánh cửa duy nhất.
  5. Đặt SQLite lên volume trước khi docker compose down lần nào.