Quay lại danh sách
Tin tức công nghệ

Tự động hóa triển khai VPS với Terraform và Ansible trong 30 phút: Hướng dẫn chi tiết từ A-Z

11 tháng 5, 2026

Giới thiệu

Trong thời đại DevOps hiện đại, việc triển khai và quản lý hạ tầng máy chủ thủ công không chỉ tốn thời gian mà còn dễ gây ra lỗi. Việc kết hợp Terraform và Ansible mang đến giải pháp tự động hóa mạnh mẽ, giúp bạn triển khai VPS một cách nhất quán, có thể lặp lại và dễ dàng mở rộng.

Bài viết này sẽ hướng dẫn bạn từng bước để thiết lập quy trình tự động hóa hoàn chỉnh, từ việc khởi tạo VPS với Terraform đến cấu hình ứng dụng với Ansible - tất cả chỉ trong 30 phút.

Tại sao cần tự động hóa triển khai VPS?

Trước khi đi vào chi tiết kỹ thuật, hãy cùng xem xét những lợi ích thiết thực mà tự động hóa mang lại:

  • Tiết kiệm thời gian: Giảm thời gian triển khai từ hàng giờ xuống còn vài phút
  • Tính nhất quán: Đảm bảo mọi môi trường được cấu hình giống hệt nhau
  • Giảm thiểu lỗi: Loại bỏ sai sót do thao tác thủ công
  • Khả năng mở rộng: Dễ dàng nhân bản và triển khai nhiều server
  • Version control: Quản lý infrastructure như code, theo dõi mọi thay đổi
  • Disaster recovery: Khôi phục hệ thống nhanh chóng khi có sự cố

Terraform vs Ansible: Vai trò và sự khác biệt

Để hiểu rõ quy trình, bạn cần nắm được vai trò riêng biệt của từng công cụ:

Terraform - Provisioning Infrastructure

Terraform là công cụ Infrastructure as Code (IaC) được thiết kế để tạo, thay đổi và quản lý hạ tầng. Nó tập trung vào việc:

  • Khởi tạo VPS trên các cloud provider (DigitalOcean, AWS, Azure, GCP...)
  • Cấu hình network, firewall, load balancer
  • Quản lý DNS records và storage volumes
  • Duy trì trạng thái (state) của infrastructure

Ansible - Configuration Management

Ansible là công cụ tự động hóa cấu hình và triển khai ứng dụng. Nó chuyên về:

  • Cài đặt và cấu hình phần mềm trên server
  • Quản lý users, permissions và security settings
  • Deploy ứng dụng và services
  • Thực hiện các tác vụ bảo trì định kỳ

Kết hợp cả hai, bạn có một pipeline hoàn chỉnh: Terraform tạo server, Ansible cấu hình và triển khai ứng dụng.

Chuẩn bị môi trường làm việc

Trước khi bắt đầu, hãy đảm bảo bạn đã cài đặt các công cụ cần thiết:

Yêu cầu hệ thống

  • Hệ điều hành: Linux, macOS hoặc Windows với WSL2
  • Terraform phiên bản 1.0 trở lên
  • Ansible phiên bản 2.9 trở lên
  • Python 3.8+
  • SSH client
  • Tài khoản cloud provider (ví dụ: DigitalOcean, AWS)

Cài đặt Terraform

Trên Ubuntu/Debian:

wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform

Cài đặt Ansible

sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible

Bước 1: Thiết lập Terraform (10 phút)

Cấu trúc thư mục dự án

Tạo cấu trúc thư mục như sau:

infrastructure/
├── terraform/
│ ├── main.tf
│ ├── variables.tf
│ ├── outputs.tf
│ └── terraform.tfvars
└── ansible/
├── inventory/
├── playbooks/
└── roles/

Viết Terraform configuration

Trong file main.tf, định nghĩa VPS của bạn:

terraform {
required_providers {
digitalocean = {
source = "digitalocean/digitalocean"
version = "~> 2.0"
}
}
}

provider "digitalocean" {
token = var.do_token
}

resource "digitalocean_droplet" "web" {
image = "ubuntu-22-04-x64"
name = "web-server-${var.environment}"
region = var.region
size = var.droplet_size
ssh_keys = [var.ssh_fingerprint]

tags = ["web", var.environment]
}

File variables.tf để quản lý biến:

variable "do_token" {
description = "DigitalOcean API Token"
type = string
sensitive = true
}

variable "region" {
description = "Datacenter region"
default = "sgp1"
}

variable "droplet_size" {
description = "Droplet size"
default = "s-1vcpu-1gb"
}

Khởi tạo và triển khai

Chạy các lệnh sau:

  1. terraform init - Khởi tạo working directory
  2. terraform plan - Xem trước các thay đổi
  3. terraform apply - Triển khai infrastructure

Sau khoảng 2-3 phút, VPS của bạn sẽ được tạo và sẵn sàng.

Bước 2: Cấu hình Ansible (10 phút)

Tạo Ansible inventory động

Sử dụng Terraform output để tạo inventory tự động:

Trong outputs.tf:

output "droplet_ip" {
value = digitalocean_droplet.web.ipv4_address
}

output "droplet_id" {
value = digitalocean_droplet.web.id
}

Tạo script để generate inventory:

#!/bin/bash
DROPLET_IP=$(terraform output -raw droplet_ip)
echo "[webservers]" > ../ansible/inventory/hosts
echo "$DROPLET_IP ansible_user=root" >> ../ansible/inventory/hosts

Viết Ansible playbook

Tạo file playbooks/setup.yml:

---
- name: Configure web server
hosts: webservers
become: yes

tasks:
- name: Update apt cache
apt:
update_cache: yes
cache_valid_time: 3600

- name: Install required packages
apt:
name:
- nginx
- ufw
- certbot
state: present

- name: Configure firewall
ufw:
rule: allow
port: "{{ item }}"
loop:
- '22'
- '80'
- '443'

- name: Enable firewall
ufw:
state: enabled

- name: Start nginx
service:
name: nginx
state: started
enabled: yes

Bước 3: Tích hợp và tự động hóa (10 phút)

Tạo script tự động hóa toàn bộ quy trình

Tạo file deploy.sh để chạy toàn bộ pipeline:

#!/bin/bash
set -e

echo "=== Deploying infrastructure with Terraform ==="
cd terraform
terraform init
terraform apply -auto-approve

echo "=== Generating Ansible inventory ==="
./generate_inventory.sh

echo "=== Waiting for SSH to be ready ==="
sleep 30

echo "=== Configuring server with Ansible ==="
cd ../ansible
ansible-playbook -i inventory/hosts playbooks/setup.yml

echo "=== Deployment completed successfully ==="
terraform output

Best practices và tối ưu hóa

  • Sử dụng Terraform modules: Tổ chức code thành modules tái sử dụng
  • Remote state: Lưu Terraform state trên S3 hoặc Terraform Cloud
  • Ansible roles: Chia nhỏ playbooks thành roles có cấu trúc
  • Secrets management: Sử dụng Ansible Vault hoặc HashiCorp Vault
  • CI/CD integration: Tích hợp vào GitLab CI hoặc GitHub Actions

Xử lý lỗi thường gặp

Lỗi SSH connection timeout

Nếu Ansible không thể kết nối, hãy kiểm tra:

  • SSH key đã được thêm vào cloud provider
  • Security group/firewall cho phép port 22
  • Đợi đủ thời gian để server khởi động hoàn toàn

Lỗi Terraform state lock

Nếu gặp lỗi state lock, chạy:

terraform force-unlock [LOCK_ID]

Mở rộng và nâng cao

Sau khi đã thành thạo quy trình cơ bản, bạn có thể:

  • Thêm monitoring với Prometheus và Grafana
  • Triển khai multiple environments (dev, staging, production)
  • Implement blue-green deployment
  • Tự động scaling với auto-scaling groups
  • Tích hợp container orchestration (Kubernetes, Docker Swarm)

Kết luận

Việc tự động hóa triển khai VPS với Terraform và Ansible không chỉ giúp bạn tiết kiệm thời gian mà còn nâng cao chất lượng và độ tin cậy của hệ thống. Với 30 phút đầu tư, bạn đã có một pipeline tự động hoàn chỉnh có thể tái sử dụng cho mọi dự án.

Hãy bắt đầu với một dự án nhỏ, làm quen với các công cụ, và dần dần mở rộng quy trình tự động hóa của bạn. Infrastructure as Code không chỉ là xu hướng mà đã trở thành tiêu chuẩn công nghiệp trong phát triển phần mềm hiện đại.

Chúc bạn triển khai thành công!