Xây dựng Hệ thống Kiểm soát Quy trình Triển khai Hạ tầng Code (GitOps) với Atlantis và OpenTofu trên VPS
Giới thiệu về Xu hướng GitOps trong Quản lý Hạ tầng
Trong kỷ nguyên chuyển đổi số, việc quản lý hạ tầng công nghệ thông tin không còn đơn thuần là những thao tác thủ công trên giao diện đồ họa hay cấu hình trực tiếp qua SSH. Khái niệm Infrastructure as Code (IaC) ra đời đã thay đổi hoàn toàn tư duy này, cho phép lập trình viên định nghĩa toàn bộ tài nguyên phần cứng bằng mã nguồn. Tuy nhiên, khi quy mô hệ thống lớn dần, việc thực thi IaC từ máy tính cá nhân của kỹ sư bắt đầu bộc lộ nhiều rủi ro về bảo mật, xung đột phiên bản và thiếu tính minh bạch.
Để giải quyết triệt để bài toán này, mô hình GitOps đã xuất hiện như một tiêu chuẩn vàng mới. GitOps dịch chuyển trung tâm điều khiển về hệ thống quản lý phiên bản (như GitHub, GitLab). Mọi thay đổi của hạ tầng đều phải thông qua quy trình Review Code (Pull Request/Merge Request). Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách xây dựng một hệ thống GitOps hoàn chỉnh, kết hợp giữa Atlantis và OpenTofu trên một máy chủ riêng ảo (VPS), giúp doanh nghiệp kiểm soát tuyệt đối quy trình triển khai hạ tầng một cách chuyên nghiệp và an toàn.
Tại sao lại chọn Atlantis và OpenTofu?
1. OpenTofu: Sự thay thế hoàn hảo và mở cho Terraform
Sau khi HashiCorp thay đổi giấy phép của Terraform sang BUSL, cộng đồng công nghệ đã nhanh chóng phản ứng bằng cách fork dự án và tạo nên OpenTofu dưới sự bảo trợ của Linux Foundation. OpenTofu giữ nguyên tính tương thích ngược hoàn toàn với Terraform nhưng cam kết duy trì mã nguồn mở vĩnh viễn. Công cụ này giúp bạn định nghĩa hạ tầng một cách khai báo (declarative syntax), quản lý trạng thái hệ thống (state file) hiệu quả mà không lo ngại về rủi ro pháp lý hay chi phí bản quyền tăng cao.
2. Atlantis: Cầu nối GitOps cho Terraform/OpenTofu
Nếu không có Atlantis, quy trình chạy OpenTofu thông thường sẽ là: Kỹ sư viết code -> Chạy lệnh trên máy local -> Apply lên cloud. Quy trình này khiến việc cộng tác nhóm trở nên cực kỳ khó khăn. Atlantis giải quyết vấn đề này bằng cách lắng nghe các sự kiện từ Git Webhooks. Khi có một Pull Request (PR) được tạo, Atlantis sẽ tự động chạy lệnh tofu plan và comment kết quả trực tiếp vào PR đó. Thành viên trong đội ngũ chỉ cần gõ comment atlantis apply để triển khai hạ tầng sau khi được phê duyệt. Toàn bộ lịch sử thay đổi được lưu trữ trực quan ngay trên Git.
Lợi ích cốt lõi: Kỹ sư không cần quyền truy cập trực tiếp vào Cloud Provider hoặc VPS chứa State file. Mọi quyền hạn được ủy quyền và thực thi an toàn thông qua Atlantis.
Kiến trúc Hệ thống GitOps trên VPS
Mô hình triển khai cơ bản trên một máy chủ VPS bao gồm các thành phần sau phối hợp chặt chẽ với nhau:
- VCS Provider (GitHub/GitLab): Nơi lưu trữ mã nguồn hạ tầng OpenTofu và quản lý quy trình phê duyệt (Pull Request).
- VPS Server: Nơi cài đặt Atlantis dưới dạng một dịch vụ chạy ngầm hoặc Docker Container. VPS này cần mở cổng (ví dụ: 4141) và có IP công khai hoặc qua một Reverse Proxy (Nginx) kèm chứng chỉ SSL để nhận Webhook bảo mật.
- OpenTofu Binary: Được cài đặt ngay bên trong môi trường của Atlantis để thực thi các tệp tin cấu hình
.tf.
Các bước Triển khai Chi tiết
Bước 1: Chuẩn bị Môi trường trên VPS
Đầu tiên, bạn cần kết nối SSH vào VPS và tiến hành cài đặt OpenTofu cùng Atlantis. Việc sử dụng Docker-Compose thường là phương án tối ưu để quản lý hai công cụ này một cách sạch sẽ.
Dưới đây là tệp tin mẫu docker-compose.yml để thiết lập nhanh:
(Lưu ý cấu hình đầy đủ các biến môi trường như URL của kho lưu trữ, Token truy cập cá nhân của Git và Webhook Secret để đảm bảo Atlantis có thể xác thực thành công với GitHub/GitLab).
Bước 2: Cấu hình Webhook và Quyền truy cập
Để Atlantis có thể giao tiếp với Git, bạn cần tạo một Personal Access Token (PAT) trên tài khoản Git của tổ chức với quyền ghi (write access) vào các Repository hạ tầng. Tiếp theo, trong phần cài đặt của Repository, hãy thêm một Webhook trỏ thẳng về địa chỉ IP hoặc Domain của VPS kèm theo endpoint /events. Điền chính xác Secret Token để ngăn chặn các yêu cầu giả mạo từ bên ngoài vào hệ thống Atlantis của bạn.
Bước 3: Định nghĩa Cấu hình Atlantis (atlantis.yaml)
Tại thư mục gốc của kho lưu trữ mã nguồn hạ tầng, bạn cần tạo một tệp tin cấu hình mang tên atlantis.yaml. Tệp này định nghĩa cách Atlantis sẽ tương tác với mã nguồn của bạn:
- Xác định phiên bản OpenTofu yêu cầu cho dự án.
- Cấu hình quy trình làm việc (workflows), cho phép tùy biến các lệnh chạy trước hoặc sau khi thực hiện plan/apply.
- Phân chia thư mục dự án (projects) nếu hạ tầng của bạn được quản lý theo mô hình đa môi trường (Staging, Production).
Kịch bản Vận hành Thực tế
Hãy cùng hình dung quy trình làm việc hằng ngày của một kỹ sư Cloud sau khi hệ thống này đi vào hoạt động:
1. Tạo nhánh và chỉnh sửa: Kỹ sư tạo một nhánh mới (branch) từ nhánh main, tiến hành thêm mới một cụm máy chủ hoặc thay đổi cấu hình mạng bằng code OpenTofu, sau đó push code lên GitHub và tạo một Pull Request.
2. Tự động kiểm tra (Plan): Ngay lập tức, GitHub gửi tín hiệu Webhook tới VPS. Atlantis tiếp nhận, tải code về và chạy lệnh tofu plan. Kết quả chi tiết về những tài nguyên sẽ bị xóa, thêm mới hoặc sửa đổi sẽ được Atlantis tự động phản hồi (comment) ngay dưới bài thảo luận của Pull Request.
3. Đánh giá và Phê duyệt: Trưởng nhóm kỹ thuật (Reviewer) vào kiểm tra kết quả plan trực quan trên giao diện Git. Nếu mọi thứ chính xác, họ sẽ nhấn nút Approve cho Pull Request đó.
4. Thực thi triển khai (Apply): Kỹ sư hoặc Reviewer gõ một dòng bình luận ngắn: atlantis apply. Atlantis nhận lệnh, thực thi thay đổi trực tiếp lên hạ tầng thực tế, ghi nhận trạng thái mới vào State file và tự động Merge Pull Request đó vào nhánh chính. Quy trình hoàn tất mà không cần bất kỳ ai phải mở Terminal local.
Các Lưu ý Quan trọng về Bảo mật và Vận hành
Triển khai GitOps trên VPS mang lại sự linh hoạt nhưng cũng đặt ra những thách thức lớn về an toàn thông tin mà doanh nghiệp cần đặc biệt lưu ý:
- Bảo mật State File: Luôn sử dụng Remote Backend (như AWS S3, Google Cloud Storage, hoặc Vault) có mã hóa và bật tính năng State Locking để lưu trữ file trạng thái của OpenTofu. Tuyệt đối không lưu State file cục bộ trên VPS để tránh mất mát dữ liệu khi VPS gặp sự cố.
- Giới hạn quyền hạn (Con người và Hệ thống): Áp dụng nguyên tắc đặc quyền tối thiểu (Least Privilege). Chỉ cho phép Atlantis sở hữu quyền tạo/sửa tài nguyên hạ tầng. Đồng thời, cấu hình branch protection trên Git để bắt buộc phải có ít nhất 1-2 người phê duyệt trước khi lệnh
atlantis applyđược phép kích hoạt. - Giám sát hệ thống: Thiết lập Log tập trung cho dịch vụ Atlantis trên VPS để dễ dàng điều tra (audit) khi có sự cố xảy ra ngoài ý muốn.
Lời kết
Xây dựng hệ thống kiểm soát quy trình triển khai hạ tầng với Atlantis và OpenTofu trên VPS là một bước đi chiến lược giúp chuẩn hóa quy trình DevOps của doanh nghiệp. Sự kết hợp này không chỉ giảm thiểu tối đa sai sót từ con người, tăng tốc độ triển khai mà còn biến Git trở thành nguồn chân lý duy nhất (Single Source of Truth) cho toàn bộ hệ thống phần cứng. Đầu tư bài bản vào quy trình GitOps ngay từ hôm nay chính là nền tảng vững chắc để doanh nghiệp sẵn sàng mở rộng quy mô một cách bền vững và an toàn trong tương lai.
