Hướng dẫn sử dụng cloud-init để tự động hóa cấu hình Server Ubuntu 26.04 từ A đến Z

Tìm hiểu cách triển khai cloud-init trên Ubuntu 26.04 để tự động hóa quá trình thiết lập server, tạo người dùng và cài đặt gói phần mềm chỉ trong tích tắc. Giải pháp này giúp loại bỏ các thao tác thủ công lặp đi lặp lại, tối ưu hóa quy trình quản trị hệ thống cho DevOps và SysAdmin.
Cloud-init là gì và tại sao bạn cần nó trên Ubuntu 26.04?
Việc cài đặt và cấu hình cloud-init trên phiên bản Ubuntu 26.04 giúp đơn giản hóa đáng kể quy trình tự động hóa máy chủ, đặc biệt là khi làm việc với hệ thống Cloud VPS, máy ảo (VM) hoặc các phòng Lab tại nhà. Nếu bạn đã từng phải ngồi hàng giờ để tạo tài khoản người dùng, thiết lập mã khóa SSH, cấu hình mạng và cài đặt hàng loạt gói phần mềm cho một server mới, cloud-init chính là giải pháp giải phóng sức lao động cho bạn. Đây là một dịch vụ khởi tạo hệ thống được hầu hết các nền tảng đám mây lớn tin dùng, cho phép đọc dữ liệu cấu hình ngay trong lần khởi động đầu tiên để áp dụng các thiết lập như tên máy chủ (hostname), tạo user, cài đặt ứng dụng và thực thi các lệnh tùy chỉnh.
Tại thị trường Việt Nam, khi các doanh nghiệp đang đẩy mạnh chuyển đổi số và sử dụng nhiều hạ tầng đám mây như AWS, Google Cloud hay các nhà cung cấp nội địa, việc làm chủ cloud-init giúp các kỹ sư DevOps triển khai hàng trăm server đồng nhất chỉ với một mẫu cấu hình duy nhất. Mặc dù các bản Ubuntu Cloud Image thường tích hợp sẵn công cụ này, việc hiểu rõ cơ chế vận hành của nó sẽ giúp bạn kiểm soát hoàn toàn quy trình triển khai mà không phụ thuộc vào giao diện thủ công.

Cơ chế hoạt động và các giai đoạn boot của cloud-init
Cloud-init hoạt động bằng cách đọc tệp định cấu hình có tên là 'user-data' viết dưới định dạng YAML. Tùy thuộc vào môi trường triển khai, tệp này có thể được cung cấp thông qua dịch vụ metadata của các nhà cung cấp như DigitalOcean, AWS, Azure, hoặc thông qua nguồn dữ liệu NoCloud cho máy ảo cục bộ. Quá trình khởi động của cloud-init được chia làm 5 giai đoạn chính: Detect (Phát hiện nền tảng), Local (Thiết lập sớm trước khi có mạng), Network (Thiết lập kết nối mạng), Config (Áp dụng hầu hết các module cấu hình) và Final (Thực hiện các tác vụ cuối như cài gói phần mềm và lệnh tùy chỉnh).
Hướng dẫn cài đặt và kiểm tra trạng thái trên Ubuntu 26.04

Mặc dù đã có sẵn trên các bản cloud image, nhưng nếu bạn dùng bản Desktop hoặc cài đặt thủ công trên thiết bị vật lý (Bare-metal), bạn cần tự cài đặt. Đầu tiên, hãy kiểm tra xem hệ thống đã có cloud-init chưa bằng lệnh sau:
cloud-init --versionNếu chương trình chưa xuất hiện, hãy thực hiện cập nhật kho lưu trữ và cài đặt nó thông qua trình quản lý gói apt của Ubuntu:

sudo apt update
sudo apt install cloud-init -ySau khi cài đặt, bạn nên kiểm tra xem dịch vụ có đang hoạt động ổn định hay không. Trạng thái 'status: done' nghĩa là mọi thứ đã hoàn tất. Nếu xuất hiện trạng thái 'error', bạn cần kiểm tra ngay các tệp nhật ký tại /var/log/cloud-init.log để tìm lỗi định dạng YAML hoặc lệnh sai.
cloud-init status
Để xem chi tiết hơn về nguồn dữ liệu (Datasource) đang được sử dụng, chẳng hạn như DataSourceEc2 trên AWS hay DataSourceNoCloud cho máy cục bộ, hãy sử dụng tùy chọn mở rộng:
cloud-init status --longCấu trúc thư mục quan trọng cần lưu ý

Việc quản trị cloud-init chuyên nghiệp đòi hỏi bạn phải nắm rõ nơi lưu trữ các tệp tin hệ thống. Tệp tin /etc/cloud/cloud.cfg đóng vai trò cấu hình chính, trong khi thư mục /etc/cloud/cloud.cfg.d/ chứa các tệp ghi đè (overrides). Đối với dữ liệu runtime, bạn hãy truy cập /var/lib/cloud/. Ngoài ra, nhật ký xuất (stdout/stderr) của các lệnh thực thi được lưu tại /var/log/cloud-init-output.log - đây là nơi cực kỳ hữu ích để debug khi script của bạn không chạy như ý muốn.
Tạo tệp cấu hình User-Data hoàn chỉnh
Tệp user-data là trái tim của toàn bộ quy trình. Lưu ý quan trọng nhất là dòng đầu tiên phải luôn khởi đầu bằng thẻ #cloud-config, nếu không cloud-init sẽ hiểu nhầm đây chỉ là tệp văn bản thường và bỏ qua toàn bộ logic bên trong. Dưới đây là ví dụ cấu hình chuẩn để tạo user 'tecmint', cấp quyền sudo không cần mật khẩu, cài đặt các công cụ như Vim, Git, Htop và thiết lập tường lửa UFW:

#cloud-config
# Create a new user with sudo access
users:
- name: tecmint
groups: sudo
shell: /bin/bash
sudo: ['ALL=(ALL) NOPASSWD:ALL']
ssh_authorized_keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA <your-public-key>
# Install packages on first boot
packages:
- vim
- htop
- git
- ufw
package_update: true
package_upgrade: true
# Set the hostname
hostname: tecmint-server
# Write a custom motd
write_files:
- path: /etc/motd
content: |
Welcome to TecMint Server
Managed by cloud-init on Ubuntu 26.04
# Run commands after packages are installed
runcmd:
- ufw allow OpenSSH
- ufw --force enableĐừng quên thay thế phần mã khóa công khai <your-public-key> bằng mã thực tế của bạn. Bạn có thể lấy mã này bằng lệnh cat ~/.ssh/id_ed25519.pub trên máy cá nhân.
Kiểm tra và chạy thử nghiệm cấu hình cục bộ
Để tránh lỗi cú pháp YAML gây treo hệ thống khi deploy thực tế, hãy luôn chạy trình kiểm tra schema tích hợp. Một lỗi lùi đầu dòng sai cũng có thể khiến máy chủ khởi động mà không có cấu hình bạn mong muốn.
sudo cloud-init schema --config-file ~/user-data.yamlNếu bạn muốn giả lập quy trình chạy lần đầu trên một máy ảo đang có sẵn mà không cần thuê Cloud VPS mới, bạn có thể sử dụng phương pháp NoCloud bằng cách chép file vào thư mục seed và dọn dẹp trạng thái cũ:
sudo mkdir -p /var/lib/cloud/seed/nocloud-net
sudo cp ~/user-data.yaml /var/lib/cloud/seed/nocloud-net/user-data
sudo touch /var/lib/cloud/seed/nocloud-net/meta-data
sudo cloud-init clean --logs
sudo rebootTriển khai trên các nền tảng Đám mây (DigitalOcean, AWS)
Khi tạo máy chủ thực tế, các nhà cung cấp đều có mục 'Advanced Options' hoặc 'User Data'. Với DigitalOcean, bạn chỉ cần dán nội dung file YAML vào ô văn bản khi tạo Droplet. Với AWS EC2, bạn có thể dùng dòng lệnh CLI để truyền file cực kỳ nhanh chóng:
aws ec2 run-instances \
--image-id ami-0abcdef1234567890 \
--instance-type t3.micro \
--user-data file://~/user-data.yaml \
--key-name my-keypairViệc sử dụng tham số --user-data file:// giúp AWS CLI đọc trực tiếp dữ liệu từ ổ đĩa máy tính của bạn, giúp quy trình CI/CD trở nên mượt mà và chuyên nghiệp hơn, giảm thiểu sai sót do copy-paste thủ công.
Lời kết và lời khuyên cho quản trị viên
Cloud-init không chỉ là một công cụ, nó là một tư duy về 'Infrastructure as Code' (Hạ tầng như mã nguồn). Thay vì quản lý server bằng cách ghi nhớ các bước cài đặt, bạn quản lý chúng bằng các tệp YAML có thể lưu trữ trên Git để theo dõi lịch sử thay đổi. Hãy luôn nhớ bước kiểm tra schema trước khi chạy thực tế để tiết kiệm thời gian gỡ lỗi. Đối với những hệ thống phức tạp hơn, bạn có thể kết hợp cloud-init với Terraform hoặc Ansible để đạt được mức độ tự động hóa tối đa cho hạ tầng Ubuntu 26.04 của mình.