Terraform ile VPS/VDS Altyapısını Kodla: Başlangıç Rehberi

Terraform ile VPS/VDS Altyapısını Kodla: Başlangıç Rehberi - Corelux
Paylaş:

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?

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) ve terraform 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ı:

  1. İnit: terraform init — providerları indirir ve backend bağlar.
  2. Plan: terraform plan -var 'api_token=XXX' — yapılacak değişiklikleri gösterir.
  3. 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.tfvars ya 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 apply yapı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

Chat on WhatsApp