Terraform ile VPS/VDS Altyapısını Kodla: Başlangıç Rehberi
Terraform ile VPS/VDS Altyapısını Kodla: Başlangıç Rehberi
Son Güncelleme: Mayıs 2026
Giriş: Bu makalede, Terraform kullanarak VPS ve VDS gibi sanal sunucu kaynaklarının nasıl altyapı kodu (IaC - Infrastructure as Code) ile yönetileceğini öğreneceksiniz. Adım adım örneklerle, provisioning (kaynak oluşturma), state yönetimi, güvenlik ve pratik entegrasyon senaryoları ele alınacaktır.
İçindekiler
- Terraform Nedir?
- Neden Terraform Kullanılmalı?
- Mimari ve Temel Terimler
- Başlangıç Kılavuzu: Kurulum ve İlk Konfigürasyon
- Örnek: Basit VPS Provisioning
- State ve Backend Seçenekleri
- Güvenlik: En İyi Uygulamalar
- Entegrasyonlar ve CI/CD
- Karşılaştırma Tablosu
- Sıkça Sorulan Sorular
- Sonuç
Terraform Nedir?
Terraform, HashiCorp tarafından geliştirilen açık kaynaklı bir Infrastructure as Code (IaC) aracıdır. Terraform ile bulut ve fiziksel altyapı kaynaklarını declarative (bildirimsel) formatta tanımlayıp yönetebilirsiniz. Bu yöntemle tekrarlanabilir, sürümlenebilir ve otomatikleştirilebilir altyapı kurulumları mümkündür.
Neden Terraform Kullanılmalı?
- Tekrarlanabilirlik: Aynı konfigürasyonu tekrar tekrar çalıştırarak tutarlı ortamlar oluşturabilirsiniz.
- Sürüm Yönetimi: Kodu versiyon kontrolüne (ör. Git) alarak değişiklik geçmişi tutabilirsiniz.
- Kaynak Bağımlılıkları: Terraform kaynaklar arası bağımlılıkları otomatik çözer ve plan (plan) komutu ile değişiklikleri öngörür.
- Multi-provider: Birden fazla sağlayıcı (provider) ile aynı proje içinde çalışabilirsiniz; örneğin aynı Terraform projesinde hem bir VPS hem de DNS kaydı oluşturmak mümkündür.
Mimari ve Temel Terimler
- Provider: Sağlayıcı; örneğin DigitalOcean, Hetzner, AWS, vs. Sunucu kaynakları provider aracılığıyla yönetilir.
- Resource: Yönetilen bir varlık; örn. bir "vps" ya da "server" kaynağı.
- State (durum): Terraform'un altyapıdaki mevcut durumu sakladığı dosya (varsayılan:
terraform.tfstate). - Module: Tekrar kullanılabilir kaynak grupları; projeyi modüler hale getirir.
- Plan ve Apply:
terraform plan(değişiklik önerisi) veterraform apply(değişiklik uygulama) komutları.
Başlangıç Kılavuzu: Kurulum ve İlk Konfigürasyon
Gereksinimler
- Terraform Binary: Resmi HashiCorp dağıtımı ile kurulmalıdır.
- Provider API Erişimi: VPS sağlayıcınız için API anahtarı (token) veya SSH erişimi.
- Git: Altyapı kodunuzu sürümlemek için.
Örnek Kurulum Adımları (Linux)
sudo apt update
sudo apt install -y unzip curl git
curl -fsSL https://releases.hashicorp.com/terraform/1.5.0/terraform_1.5.0_linux_amd64.zip -o terraform.zip
unzip terraform.zip
sudo mv terraform /usr/local/bin/
terraform version
Not: Yukarıdaki sürüm numarası örnektir; güncel sürümü HashiCorp sitesinden kontrol edin.
Örnek: Basit VPS Provisioning
Bu bölümde genel bir VPS sağlayıcısı için örnek bir Terraform konfigürasyonu göreceksiniz. Aşağıdaki örnek DigitalOcean/Hetzner gibi provider'lar yerine konsepti göstermek içindir. Gerçek sağlayıcıya uygun provider ve resource isimlerini kullanmalısınız.
Dosya yapısı:
- main.tf: Provider ve temel kaynaklar.
- variables.tf: Değişken tanımları.
- outputs.tf: Çıktılar (IP, kullanıcı vb.).
# main.tf
terraform {
required_providers {
example = {
source = "example/provider"
version = "~> 1.0"
}
}
required_version = ">= 1.0.0"
}
provider "example" {
api_token = var.api_token
}
resource "example_vps" "web" {
name = "corelux-web-01"
region = var.region
image = var.image
plan = var.plan
ssh_keys = [var.ssh_key_id]
user_data = file("cloud-init.yml")
}
variables.tf
variable "api_token" {
type = string
}
variable "region" {
type = string
default = "eu-central"
}
variable "image" {
type = string
default = "ubuntu-22-04"
}
variable "plan" {
type = string
default = "s-1vcpu-1gb"
}
Çalıştırma adımları:
- İnit:
terraform init— providerları indirir ve backend bağlar. - Plan:
terraform plan -var 'api_token=XXX'— yapılacak değişiklikleri gösterir. - Apply:
terraform apply -var 'api_token=XXX'— kaynakları oluşturur.
State ve Backend Seçenekleri
State, Terraform'un mevcut altyapı durumunu takip ettiği kritiktir. Yerel state dosyaları küçük projeler için uygundur ancak ekip çalışması ve güvenlik için uzak backend kullanılması önerilir.
- S3/Backends: AWS S3 + DynamoDB ile locking (kilitleme).
- Remote State: HashiCorp Consul, Terraform Cloud, Azure Storage, Google Cloud Storage vb.
- State Locking: Aynı anda birden fazla kişinin apply yapmasını engelleyen mekanizma.
Örnek S3 backend konfigürasyonu (main.tf içinde):
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "corelux/vps/terraform.tfstate"
region = "eu-central-1"
dynamodb_table = "terraform-locks"
}
}
Güvenlik: En İyi Uygulamalar
- API Token Yönetimi: API anahtarlarını asla doğrudan kodda (commit) tutmayın;
terraform.tfvarsya da CI secret manager kullanın. - State Şifreleme: Uzak state dosyalarını şifreleyin (ör. S3 server-side encryption veya KMS).
- SSH Anahtarları: Sunuculara parola yerine SSH anahtarı (public key) ile erişim verin.
- Least Privilege: API token'lara sadece gerekli izinleri verin.
- Immutable Infrastructure: Mümkün olduğunca yeniden yaratma (recreate) stratejisi uygulayarak drift (farklılık) riskini azaltın.
Entegrasyonlar ve CI/CD
Terraform kodunu bir CI/CD pipeline içine almak, otomasyonu ve kontrolü artırır. Örnek kullanım senaryoları:
- Git + Terraform Plan: Pull request açıldığında
terraform plançalıştırıp değişiklikleri inceleyin. - Otomatik Apply: Güvenilir branch'lerde (ör. main) otomatik
terraform applyyapılabilir; çoğu ekip bunu manuel onay ile kombine eder. - Policy as Code: Sentinel, Open Policy Agent (OPA) gibi araçlarla kurumsal politikaları enforce edin.
Örnek GitHub Actions iş akışı (kısa):
name: terraform
on:
pull_request:
paths:
- '**/*.tf'
jobs:
plan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Terraform
uses: hashicorp/setup-terraform@v2
- name: Terraform Init
run: terraform init
- name: Terraform Plan
run: terraform plan -out=tfplan
Karşılaştırma Tablosu
| Konsept | Manuel Sunucu Kurulumu | Terraform ile Otomasyon |
|---|---|---|
| Tekrarlanabilirlik | Dusuk — elle adımlar gerektirir | Yüksek — tanımlı kod tekrar üretir |
| İzlenebilirlik | Loglara bağlı, zayıf | Sürüm kontrolü ve state ile tam izlenebilir |
| Ortam Farklılıkları | Riskli — insan hatası olası | Azaltılmış — aynı kod her ortamda çalışır |
| Ekip İşbirliği | Düşük — koordinasyon gerekir | Yüksek — kod review, branch stratejileri uygulanır |
Sıkça Sorulan Sorular
Terraform hangi sağlayıcılarla çalışır?
Terraform çok sayıda provider ile çalışır; popüler sağlayıcılar arasında AWS, Azure, Google Cloud, DigitalOcean, Hetzner gibi hizmetler vardır. Ayrıca özel API'leri olan birçok sağlayıcı için üçüncü parti providerlar mevcuttur.
State dosyası nasıl güvenli hale getirilir?
State dosyasını uzak bir backend (ör. S3, GCS) üzerinde tutun ve server-side encryption ile şifreleyin. Erişim izinlerini (IAM) en dar yetkiyle sınırlandırın ve mümkünse KMS anahtarları kullanın.
Terraform ile var olan sunucuyu yönetebilir miyim?
Evet; terraform import komutu ile mevcut bir kaynağı Terraform state'ine alabilirsiniz. Ancak import sonrası konfigürasyonun state ile uyuşması için .tf dosyalarınızı düzenlemeniz gerekir.
Terraform modülleri ne zaman kullanılmalı?
Tekrarlanan yapılandırmalar (ör. her proje için aynı VPS + firewall + monitoring) için modül oluşturmak kod tekrarını azaltır ve standartlaştırma sağlar.
Terraform kullanırken nelere dikkat etmeliyim?
State yönetimi, secret yönetimi ve provider izinleri öncelikli dikkat alanlarıdır. Ayrıca plan çıktılarını mutlaka review edin ve kritik değişikliklerde manuel onay mekanizması kullanın.
Sonuç
Özetle, Terraform VPS/VDS altyapılarınızı kodlayarak yönetmenize imkan verir; bu sayede tekrarlanabilirlik, izlenebilirlik ve otomasyon kazanırsınız. Küçük projelerden kurumsal ölçekli altyapılara kadar Terraform, doğru state ve güvenlik uygulamalarıyla güçlü bir çözümdür.
Corelux altyapı ihtiyaçlarınız için Sanal Sunucu ve Bulut Sunucu hizmetlerimizi inceleyebilir, Terraform ile oluşturacağınız altyapıları bu hizmetler üzerinde kolayca hayata geçirebilirsiniz. İhtiyacınıza özel kiralık sunucu seçenekleri için Kiralık Sunucu sayfamızı ziyaret edin.
Pratik bir başlangıç için örnek repository'nizi bir Git deposunda tutun, terraform init ve uzak backend ile state locking yapılandırmasını tamamlayın. Sorularınız veya profesyonel destek talepleriniz için Corelux ile iletişime geçebilirsiniz.
Yazar
Boran BAR