Nguyễn Minh Hoàng · Khóa học

DevOps Thực Chiến: đưa sản phẩm từ localhost lên production

Học xong, ứng dụng của chính bạn chạy trên VPS bạn tự quản: có tên miền và HTTPS, tự deploy sau mỗi lần push, quay lui được trong một phút, và có bản sao lưu bạn đã tự tay khôi phục thử.

Cơ bản 12 chương · 73 bài học

Bạn sẽ học được

  • Chọn và thuê một VPS theo tiêu chí kỹ thuật, không phụ thuộc nhà cung cấp, rồi khóa cửa nó: chỉ vào bằng khóa SSH, tường lửa chỉ mở đúng ba cổng, tự cài bản vá bảo mật.
  • Đóng gói một ứng dụng web nhiều thành phần thành Docker image gọn, không chạy bằng root, không chứa bí mật.
  • Vận hành một database trong container: user riêng cho từng ứng dụng, không mở cổng ra Internet, sao lưu và khôi phục có kiểm bằng con số. Áp được cho PostgreSQL, MongoDB và MySQL.
  • Đưa nhiều ứng dụng ra Internet qua một reverse proxy có HTTPS tự động.
  • Dựng CI/CD: test xanh thì tự build, tự deploy, tự smoke test; test đỏ thì không gì xảy ra; quay lui về bản trước trong một phút.
  • Làm lại toàn bộ việc trên bằng Dokploy, và chọn đúng cách cho từng dự án dựa trên đánh đổi đã tự trải nghiệm.
  • Gỡ lỗi một sự cố theo sáu chặng của một request, chuyển một sản phẩm đang có người dùng sang VPS mà không mất dữ liệu, và viết postmortem.

Thông tin chung

Mục Nội dung
Đối tượng Lập trình viên đã viết được ứng dụng web chạy ở máy (fresher, junior, freelancer, người làm sản phẩm riêng, tech lead nhóm nhỏ). Biết JavaScript và Node.js cơ bản, dùng được Git. Không cần biết Linux, Docker hay mạng
Thời lượng 12 buổi × 3 giờ, cộng 2–3 giờ tự học mỗi tuần
Hình thức Lớp học live (đợt đầu là lớp chạy thử) và 1-1. Mỗi bài dùng được làm một clip cho bản tự học
Công cụ bắt buộc Một VPS Linux 2–4 GB RAM (nhà cung cấp tùy chọn), thêm một VPS thuê theo giờ cho Buổi 9, một tên miền, tài khoản GitHub, Docker Desktop trên máy cá nhân, một trình quản lý mật khẩu

Sản phẩm xuyên suốt

CodeFarm Tasks (repo codefarm-tasks), một ứng dụng quản lý công việc nhỏ gồm ba thành phần: API, web, database. Đủ thật để gặp những vấn đề thật (biến lúc build và lúc chạy, migration, CORS, ứng dụng từ chối khởi động khi cấu hình sai, log có cấu trúc), đủ nhỏ để không làm loãng bài học.

Học viên có ứng dụng riêng được khuyến khích mang vào từ Chương 5, song song với CodeFarm Tasks. Các bài "chuyển đổi" (5.6, 6.6, 6.7) chỉ ra chỗ cần đổi cho Python, PHP, SPA tĩnh, MongoDB, MySQL.

Kiến trúc và quy ước ví dụ

Lưu ý: phiên bản dưới đây đã chốt khi xây repo mẫu (2026-10-05) và đã chạy thử.

Thành phần Phiên bản và lựa chọn
Hệ điều hành VPS Ubuntu 24.04 LTS
Container Docker Engine 28 trở lên, Docker Compose v2
API Node.js 22.19 LTS, Express 5.2, Prisma 7.10 (driver adapter pg), Zod 4, JavaScript (không TypeScript)
Web Next.js 16.3, React 19.3, JavaScript. Chế độ standalone bật ở Chương 5
Database lõi PostgreSQL 17. Bài chuyển đổi: MongoDB 8, MySQL 8
Reverse proxy Traefik v3 với Let's Encrypt
CI/CD và registry GitHub Actions, GitHub Container Registry (GHCR)
Bảng điều khiển Dokploy (đối chiếu bản v0.30.8)

Quy ước trong mọi bài:

  • Tên miền minh họa: tasks.codefarm.edu.vn (web), tasks-api.codefarm.edu.vn (API), dokploy.codefarm.edu.vn (bảng điều khiển). Khi làm, bạn thay bằng tên miền của chính mình.
  • IP minh họa: 203.0.113.10 (dải dành cho tài liệu, không phải IP thật).
  • User làm việc trên VPS: deploy.
  • Thư mục trên VPS: /opt/infra cho hạ tầng dùng chung, /opt/apps/<tên-dự-án> cho từng ứng dụng.
  • Ký hiệu nơi gõ lệnh: 💻 máy của bạn, 🖥️ VPS, 🐙 GitHub, 🌐 trang quản trị khác.
  • Nguyên tắc sư phạm của khóa: làm tay trước, dùng công cụ sau. Chương 7–8 tự dựng reverse proxy và CI/CD; Chương 9 làm lại bằng Dokploy để thấy rõ công cụ làm thay mình những gì.

Lộ trình

Mỗi chương tương ứng một buổi học 3 giờ. Mỗi bài là một đơn vị học trọn vẹn, đọc trong 15–30 phút, và dùng được làm một clip.

Chương Số bài Buổi CodeFarm Tasks ở trạng thái
1. Bức tranh lớn và chuẩn bị 6 Buổi 1 Chạy ở máy bạn, database trong Docker Desktop
2. Linux đủ dùng và vào VPS lần đầu 6 Buổi 2 Chưa đổi; VPS được dựng và khóa cửa, Docker sẵn sàng
3. Khóa cửa VPS 6 Buổi 3 Chưa đổi; VPS được dựng và khóa cửa, Docker sẵn sàng
4. Docker nền tảng 7 Buổi 4 Chưa đổi; VPS được dựng và khóa cửa, Docker sẵn sàng
5. Đóng gói ứng dụng 6 Buổi 5 Được đóng thành ba image: api, web, tools (migration)
6. Database trên VPS 7 Buổi 6 Có database Postgres trên VPS, sao lưu và khôi phục được
7. Reverse proxy, HTTPS và deploy bằng tay 6 Buổi 7 Chạy trên VPS sau reverse proxy, có HTTPS, deploy bằng tay
8. CI/CD với GitHub Actions 6 Buổi 8 Push là tự deploy, quay lui được
9. Dokploy: bảng điều khiển làm thay việc tay 6 Buổi 9 Chạy lại toàn bộ trên Dokploy
10. Vận hành: nhìn, dọn, cất, vá 6 Buổi 10 Có sao lưu tự động ra ngoài VPS, giám sát, cảnh báo
11. Chuyển nhà và xử lý sự cố 5 Buổi 11 Đón dữ liệu thật chuyển từ một dịch vụ được quản lý hộ
12. Nhiều dự án trên một VPS và đi tiếp 6 Buổi 12 Chia VPS với một dự án thứ hai

Về đơn vị biên soạn

Khóa học được biên soạn bởi Nguyễn Minh Hoàng, CodeFarm — Học lập trình từ doanh nghiệp (codefarm.edu.vn).

CodeFarm đào tạo lập trình theo mô hình mô phỏng doanh nghiệp, với phương pháp: hiểu cơ bản, làm được việc nhỏ, rồi quay lại đào sâu và mở rộng. Triết lý: "Học để làm được. Làm để tạo giá trị."

© 2026 Công ty Cổ phần Công nghệ và Giáo dục CodeFarm (CodeFarm Technology & Education JSC). Mọi nội dung, sơ đồ và hình minh họa trong giáo trình thuộc quyền sở hữu của CodeFarm. Mọi hình thức sao chép, chỉnh sửa, phân phối cần có sự đồng ý bằng văn bản của CodeFarm.

Dành cho ai

  • Fresher, junior đã viết được ứng dụng web chạy ở máy
  • Freelancer và người làm sản phẩm riêng
  • Tech lead nhóm nhỏ

Yêu cầu đầu vào

  • Đã viết được ứng dụng web chạy ở máy
  • Biết JavaScript và Node.js cơ bản, dùng được Git
  • Không cần biết Linux, Docker hay mạng
  • Một VPS Linux 2–4 GB RAM (nhà cung cấp tùy chọn), thêm một VPS thuê theo giờ cho Buổi 9
  • Một tên miền, tài khoản GitHub, Docker Desktop trên máy cá nhân, một trình quản lý mật khẩu

Nội dung khóa học

  1. Chương 1. Bức tranh lớn và chuẩn bị

    1. 1.1 Từ localhost tới production
    2. 1.2 Mười khái niệm nền của DevOps
    3. 1.3 Chọn và mua VPS: tiêu chí không phụ thuộc nhà cung cấp
    4. 1.4 Tên miền và DNS
    5. 1.5 Khóa SSH và nơi cất bí mật
    6. 1.6 Sản phẩm xuyên suốt: CodeFarm Tasks
  2. Chương 2. Linux đủ dùng và vào VPS lần đầu

    1. 2.1 Terminal và cách đọc một dòng lệnh
    2. 2.2 Cài hệ điều hành và đăng nhập VPS lần đầu
    3. 2.3 Cây thư mục, file và quyền
    4. 2.4 User thường và sudo
    5. 2.5 Tiến trình, dịch vụ và log hệ thống
    6. 2.6 Cài phần mềm và cập nhật bằng apt
  3. Chương 3. Khóa cửa VPS

    1. 3.1 Máy chủ trên Internet bị tấn công thế nào
    2. 3.2 Khóa cửa SSH với luật hai cửa sổ
    3. 3.3 Cổng mạng và tường lửa
    4. 3.4 fail2ban và tự cài bản vá bảo mật
    5. 3.5 Swap và ngân sách bộ nhớ
    6. 3.6 Cứu hộ khi tự khóa mình ở ngoài
  4. Chương 4. Docker nền tảng

    1. 4.1 Vì sao container: image, container và lớp
    2. 4.2 Cài Docker và giới hạn log
    3. 4.3 Chạy, vào bên trong và đọc log container
    4. 4.4 Volume: dữ liệu sống lâu hơn container
    5. 4.5 Mạng Docker: container gọi nhau bằng tên
    6. 4.6 Docker đi vòng qua tường lửa
    7. 4.7 Docker Compose: mô tả nhiều container bằng một file
  5. Chương 5. Đóng gói ứng dụng

    1. 5.1 Dockerfile: công thức đóng gói
    2. 5.2 Build context và .dockerignore: chuyện bảo mật
    3. 5.3 Multi-stage: đóng gói API Node gọn và an toàn
    4. 5.4 Đóng gói web Next.js: biến lúc build và lúc chạy
    5. 5.5 Kiến trúc CPU và đẩy image lên registry
    6. 5.6 Bài chuyển đổi: đóng gói Python, PHP và SPA tĩnh
  6. Chương 6. Database trên VPS

    1. 6.1 Database trong container: volume, mật khẩu, không mở cổng
    2. 6.2 User, quyền và chuỗi kết nối
    3. 6.3 Xem database từ máy bạn qua đường hầm SSH
    4. 6.4 Migration trên production và luật tương thích ngược
    5. 6.5 Sao lưu và khôi phục: pg_dump, pg_restore, đếm dòng
    6. 6.6 Bài chuyển đổi: MongoDB
    7. 6.7 Bài chuyển đổi: MySQL và MariaDB
  7. Chương 7. Reverse proxy, HTTPS và deploy bằng tay

    1. 7.1 Reverse proxy: lễ tân của tòa nhà
    2. 7.2 Khung hạ tầng dùng chung: thư mục và mạng
    3. 7.3 Traefik và HTTPS tự động với Let's Encrypt
    4. 7.4 Compose của ứng dụng và file bí mật
    5. 7.5 Deploy bằng tay: năm động tác
    6. 7.6 Nghiệm thu từ trong ra ngoài và tự hồi phục
  8. Chương 8. CI/CD với GitHub Actions

    1. 8.1 GitHub Actions: workflow, job, step, secret
    2. 8.2 CI: kiểm tra tự chạy mỗi lần push
    3. 8.3 Build image trên máy GitHub, đẩy lên GHCR
    4. 8.4 Chìa khóa riêng cho CI và dấu vân tay máy chủ
    5. 8.5 Tự động deploy sau khi CI xanh
    6. 8.6 Smoke test và quay lui trong một phút
  9. Chương 9. Dokploy: bảng điều khiển làm thay việc tay

    1. 9.1 Control plane tự host: Dokploy làm thay gì, cái giá là gì
    2. 9.2 Cài Dokploy và khóa bảng điều khiển
    3. 9.3 Database, registry và Compose trên Dokploy
    4. 9.4 Tên miền và deploy lần đầu trên Dokploy
    5. 9.5 Tự động deploy qua API của Dokploy
    6. 9.6 Làm tay hay dùng Dokploy: chọn theo dự án
  10. Chương 10. Vận hành: nhìn, dọn, cất, vá

    1. 10.1 Đọc log có cấu trúc và số liệu vận hành
    2. 10.2 Giữ ổ đĩa không đầy
    3. 10.3 Sao lưu tự động ra ngoài VPS
    4. 10.4 Diễn tập khôi phục
    5. 10.5 Giám sát từ bên ngoài và cảnh báo
    6. 10.6 Cập nhật: cái gì, bao lâu, cách nào
  11. Chương 11. Chuyển nhà và xử lý sự cố

    1. 11.1 Chuyển nhà có đóng băng: kế hoạch T-1, T, T+7
    2. 11.2 Chuyển dữ liệu từ dịch vụ được quản lý sang VPS
    3. 11.3 Trỏ dịch vụ bên ngoài về nhà mới
    4. 11.4 Trình tự gỡ lỗi: sáu chặng của một request
    5. 11.5 Xử lý sự cố và viết postmortem
  12. Chương 12. Nhiều dự án trên một VPS và đi tiếp

    1. 12.1 Thêm dự án thứ hai: cái gì dùng chung, cái gì riêng
    2. 12.2 Ngân sách tài nguyên và khi nào nâng cấp
    3. 12.3 Bảo mật nâng cao: socket proxy, header bảo mật, quét lỗ hổng
    4. 12.4 Hạ tầng dưới dạng code: dựng lại VPS trong mười phút
    5. 12.5 Khi nào mới cần Kubernetes và cloud lớn
    6. 12.6 Tổng kết và bài kiểm tra cuối

Nội dung chi tiết từng bài dành cho học viên đã đăng ký học.