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
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
- Giảm thiểu lỗi: Loại bỏ sai sót do thao tác thủ công
- 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
- 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 - Infrastructure Provisioning
Terraform là công cụ Infrastructure as Code (IaC) được sử dụng để:
- Khởi tạo và quản lý tài nguyên cloud (VPS, network, storage)
- Định nghĩa hạ tầng dưới dạng code declarative
- Quản lý lifecycle của infrastructure
- Hỗ trợ nhiều cloud provider (AWS, DigitalOcean, Linode, Vultr...)
Ansible - Configuration Management
Ansible là công cụ tự động hóa cấu hình được sử dụng để:
- Cài đặt và cấu hình phần mềm trên server
- Quản lý cấu hình ứng dụng
- Thực hiện các tác vụ deployment
- Orchestration và automation workflows
Kết hợp cả hai, bạn có một pipeline hoàn chỉnh: Terraform tạo infrastructure, 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ụ sau:
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, Linode)
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
Sử dụng pip:
pip3 install ansible
Bước 1: Thiết lập Terraform để khởi tạo VPS (10 phút)
Cấu trúc thư mục dự án
Tạo cấu trúc thư mục như sau:
project/
├── terraform/
│ ├── main.tf
│ ├── variables.tf
│ ├── outputs.tf
│ └── terraform.tfvars
└── ansible/
├── inventory/
├── playbooks/
└── roles/
Viết Terraform configuration
Trong file main.tf, định nghĩa provider và resource VPS:
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]
}
Khởi tạo và triển khai
Chạy các lệnh sau:
terraform init- Khởi tạo working directoryterraform plan- Xem trước các thay đổiterraform 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 để setup server (15 phút)
Tạo Ansible inventory động
Sử dụng Terraform output để tự động tạo inventory file cho Ansible:
resource "local_file" "ansible_inventory" {
content = templatefile("inventory.tpl", {
ip_address = digitalocean_droplet.web.ipv4_address
})
filename = "../ansible/inventory/hosts"
}
Viết Ansible playbook
Tạo file site.yml trong thư mục ansible/playbooks:
---
- name: Configure web server
hosts: webservers
become: yes
roles:
- common
- nginx
- security
- application
Tạo roles cho các tác vụ cụ thể
Mỗi role đảm nhiệm một phần cấu hình:
- common: Cập nhật hệ thống, cài đặt packages cơ bản
- nginx: Cài đặt và cấu hình web server
- security: Thiết lập firewall, fail2ban, SSH hardening
- application: Deploy ứng dụng của bạn
Chạy Ansible playbook
ansible-playbook -i inventory/hosts playbooks/site.yml
Bước 3: Tích hợp và tự động hóa hoàn toàn (5 phút)
Để tạo quy trình một lệnh duy nhất, tạo script bash:
#!/bin/bash
set -e
echo "Deploying infrastructure..."
cd terraform
terraform apply -auto-approve
echo "Waiting for server to be ready..."
sleep 30
echo "Configuring server..."
cd ../ansible
ansible-playbook -i inventory/hosts playbooks/site.yml
echo "Deployment completed!"
Giờ đây, bạn chỉ cần chạy một lệnh duy nhất để triển khai toàn bộ hệ thống!
Best Practices và lưu ý quan trọng
Bảo mật
- Không commit API tokens và credentials vào Git
- Sử dụng Terraform Cloud hoặc encrypted backends để lưu state file
- Sử dụng Ansible Vault để mã hóa sensitive data
- Thiết lập SSH key-based authentication, tắt password login
Quản lý state
- Sử dụng remote backend cho Terraform state (S3, Terraform Cloud)
- Enable state locking để tránh conflicts
- Backup state file thường xuyên
Testing và validation
- Sử dụng
terraform validatevàterraform fmt - Test Ansible playbooks với
--checkmode - Thiết lập CI/CD pipeline để tự động test và deploy
Mở rộng và nâng cao
Sau khi đã thành thạo quy trình cơ bản, bạn có thể:
- Multi-environment: Tạo workspaces riêng cho dev, staging, production
- Auto-scaling: Tích hợp với load balancer và auto-scaling groups
- Monitoring: Thêm roles cho Prometheus, Grafana, ELK stack
- CI/CD integration: Tích hợp với Jenkins, GitLab CI, GitHub Actions
- Blue-green deployment: Triển khai zero-downtime với Ansible
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. Trong 30 phút, bạn đã có thể thiết lập một quy trình Infrastructure as Code hoàn chỉnh, có thể tái sử dụng và mở rộng.
Hãy bắt đầu với một dự án nhỏ, thực hành thường xuyên và dần dần mở rộng quy trình của bạn. Khi đã thành thạo, bạn sẽ nhận ra rằng việc quản lý hàng chục, thậm chí hàng trăm server cũng trở nên đơn giản như quản lý một server duy nhất.
Chúc bạn thành công trong hành trình DevOps của mình!
