Takip et

DigitalOcean Üzerinde Packer ile Ubuntu 16.04 Anlık Görüntüleri Oluşturma

DigitalOcean Üzerinde Packer ile Ubuntu 16.04 Anlık Görüntüleri Oluşturma DigitalOcean gibi bulut sağlayıcılarında sunucu kurulumları ve y

DigitalOcean Üzerinde Packer ile Ubuntu 16.04 Anlık Görüntüleri Oluşturma

DigitalOcean gibi bulut sağlayıcılarında sunucu kurulumları ve yapılandırmaları, zaman alıcı ve hataya açık süreçler olabilir. Özellikle birden fazla sunucu dağıtmanız gerektiğinde, her birini manuel olarak yapılandırmak, tutarsızlıklara ve verimsizliğe yol açar. İşte bu noktada otomasyon araçları devreye girer. HashiCorp’un Packer aracı, bu tür senaryolar için güçlü bir çözüm sunarak, farklı bulut platformlarında ve sanallaştırma ortamlarında tekrarlanabilir makine imajları oluşturmanızı sağlar. Bu makalede, DigitalOcean üzerinde Ubuntu 16.04 tabanlı, önceden yapılandırılmış anlık görüntüler (snapshots) oluşturmak için Packer’ı nasıl kullanacağınızı adım adım ele alacağız.

Giriş: Neden Packer ve Anlık Görüntüler?

Modern DevOps ve bulut altyapılarında, “altyapıyı kod olarak” (Infrastructure as Code – IaC) yönetmek temel bir prensiptir. Bu prensibin önemli bir parçası da, sunucu imajlarını ve yapılandırmalarını otomatik ve tutarlı bir şekilde oluşturabilmektir.

Anlık görüntüler (snapshots), bir sunucunun belirli bir zamandaki tam kopyasıdır. Bu kopyalar, felaket kurtarma senaryolarında, hızlı dağıtımda veya test/geliştirme ortamlarının tutarlı bir şekilde çoğaltılmasında hayati bir rol oynar. DigitalOcean’da manuel olarak anlık görüntü almak mümkün olsa da, bu işlem sunucu kurulumu ve yapılandırması adımlarını otomatikleştirmeyi içermez.

Packer, işte bu boşluğu doldurur. Tek bir yapılandırma dosyası (JSON formatında), farklı platformlar için makine imajları oluşturmanıza olanak tanır. DigitalOcean özelinde, Packer, bir Droplet oluşturur, üzerine istediğiniz yazılımları yükler, gerekli yapılandırmaları yapar ve ardından bu Droplet’in bir anlık görüntüsünü alarak Droplet’i otomatik olarak siler. Bu süreç, size her zaman aynı başlangıç durumuna sahip, güncel ve yapılandırılmış bir temel imaj sağlar.

Bu makalenin sonunda, Packer kullanarak DigitalOcean üzerinde Ubuntu 16.04 tabanlı, özel anlık görüntüler oluşturma becerisine sahip olacaksınız. Ubuntu 16.04’ün artık uzun süreli destek (LTS) kapsamında olmadığını ve güvenlik güncellemeleri almadığını belirtmek önemlidir; ancak bu makale, talep edilen spesifik senaryoyu ele almak için yazılmıştır. Üretim ortamlarında her zaman güncel ve desteklenen işletim sistemi sürümlerini kullanmanız şiddetle tavsiye edilir.

Ön Koşullar

Packer ile DigitalOcean üzerinde anlık görüntüler oluşturmaya başlamadan önce, bazı temel gereksinimleri karşılamanız gerekmektedir:

* Bir DigitalOcean Hesabı: Anlık görüntüleri oluşturmak ve yönetmek için aktif bir DigitalOcean hesabınız olmalıdır.
* DigitalOcean API Token’ı: Packer’ın DigitalOcean hesabınızla etkileşim kurabilmesi için bir API token’ına ihtiyacınız olacak. Bu token’ın “Oku ve Yaz” (Read and Write) yetkisine sahip olması gerekmektedir.
* Packer Kurulumu: Packer’ı, anlık görüntü oluşturma işlemini başlatacağınız yerel makinenize veya bir sunucuya kurmuş olmanız gerekmektedir. Bu makale, Ubuntu 16.04 üzerinde Packer kurulumunu gösterecektir, ancak Packer çoğu işletim sisteminde çalışır.
* unzip ve jq (İsteğe Bağlı ama Faydalı): Packer kurulumu için unzip, JSON çıktılarını daha kolay okumak ve işlemek için jq (JSON query processor) faydalı araçlardır. Bu araçların yüklü olması önerilir.

Bu ön koşulları sağladıktan sonra, Packer ile DigitalOcean entegrasyonuna geçebiliriz.

Packer’ı Anlamak: Temel Bileşenler

Packer, makine imajları oluşturmak için üç ana bileşeni kullanır: Builders, Provisioners ve Post-Processors.

Builders (İnşa Ediciler)

Builders, Packer’ın bir imaj oluşturmak için kullandığı temel platforma özgü bileşenlerdir. Her builder, belirli bir bulut sağlayıcısı (AWS, Google Cloud, DigitalOcean), sanallaştırma platformu (VirtualBox, VMware) veya container teknolojisi (Docker) ile etkileşim kurar. DigitalOcean için digitalocean builder’ını kullanacağız. Bu builder, DigitalOcean API’sini kullanarak geçici bir Droplet oluşturur, üzerinde işlemleri gerçekleştirir ve ardından bir anlık görüntü alarak Droplet’i siler.

Provisioners (Sağlayıcılar)

Provisioners, bir builder tarafından oluşturulan geçici makine üzerinde yazılım yükleme, yapılandırma, dosya kopyalama veya komut çalıştırma gibi işlemleri gerçekleştiren araçlardır. Örneğin, bir shell provisioner’ı kullanarak apt update, apt install nginx gibi komutları çalıştırabilir veya file provisioner’ı ile yerel bir dosyayı uzak makineye kopyalayabilirsiniz. Birden fazla provisioner sırayla çalıştırılabilir.

Post-Processors (İşlem Sonrası İşleyiciler)

Post-processors, bir imaj oluşturulduktan sonra ek işlemler yapmak için kullanılır. Örneğin, bir imajı farklı bir formata dönüştürebilir (örneğin, Vagrant kutusu oluşturmak), başka bir bulut platformuna yükleyebilir veya testler çalıştırabilir. DigitalOcean anlık görüntüleri oluşturma senaryosunda genellikle doğrudan post-processor’a ihtiyaç duyulmaz, çünkü ana hedef zaten bir anlık görüntüdür. Ancak, daha karmaşık iş akışlarında faydalı olabilirler.

Packer’ın gücü, bu bileşenleri tek bir JSON yapılandırma dosyasında birleştirerek, farklı ortamlar için tutarlı ve tekrarlanabilir imajlar oluşturma yeteneğinden gelir.

DigitalOcean API Token Oluşturma

Packer’ın DigitalOcean hesabınızla güvenli bir şekilde iletişim kurabilmesi için bir API token’ına ihtiyacınız var. Bu token’ı oluşturmak için aşağıdaki adımları izleyin:

1. DigitalOcean Hesabınıza Giriş Yapın: Tarayıcınızdan DigitalOcean kontrol paneline gidin ve kullanıcı adınız ve şifrenizle giriş yapın.
2. API Bölümüne Gidin: Sol menüde “API” seçeneğini bulun ve tıklayın.
3. Yeni Token Oluşturun: “Tokens/Keys” sekmesinde “Generate New Token” düğmesine tıklayın.
4. Token Bilgilerini Girin:
* Token Name: Token’a açıklayıcı bir isim verin (örn. packer-snapshot-token).
* Select Scopes: “Read” ve “Write” seçeneklerinin her ikisini de işaretleyin. Packer’ın Droplet oluşturması ve silmesi, ayrıca anlık görüntü alması için yazma yetkisine ihtiyacı vardır.
5. Token’ı Oluşturun: “Generate Token” düğmesine tıklayın.
6. Token’ı Kopyalayın ve Güvenle Saklayın: Oluşturulan token’ı ekranda göreceksiniz. Bu token’ı kopyalayın ve güvenli bir yere kaydedin. Bu token’ı bir daha göremeyeceksiniz, bu yüzden hemen kopyaladığınızdan emin olun. Bu token, hesabınıza tam erişim sağlar, bu yüzden kesinlikle gizli tutulmalıdır.

Güvenlik Notu: API token’ınızı asla doğrudan Packer şablon dosyanıza yazmayın. Bunun yerine, token’ı bir çevre değişkeni olarak ayarlamak en iyi pratiktir. Bu, hassas bilgilerin versiyon kontrol sistemlerine girmesini engeller ve güvenliği artırır.

Örneğin, Linux tabanlı sistemlerde token’ı şu şekilde ayarlayabilirsiniz:

export DO_API_TOKEN="sizin_digitalocean_api_token'ınız"

Bu komutu, Packer’ı çalıştıracağınız terminal oturumunda çalıştırmanız gerekmektedir. Kalıcı yapmak isterseniz, .bashrc veya .zshrc dosyanıza ekleyebilirsiniz.

Packer Kurulumu (Ubuntu 16.04 Üzerinde)

Packer’ı Ubuntu 16.04 sisteminize kurmak oldukça basittir. Packer, önceden derlenmiş ikili dosyalar olarak dağıtılır.

1. Gerekli Paketleri Yükleyin:
Öncelikle, Packer ikili dosyasını indirmek ve açmak için curl ve unzip gibi temel araçlara ihtiyacınız olabilir. Terminali açın ve aşağıdaki komutları çalıştırın:

sudo apt update
    sudo apt install -y curl unzip

2. Packer’ı İndirin:
HashiCorp’un resmi web sitesinden en son Packer sürümünü indirin. Sürüm numarasını kontrol etmek için [https://www.packer.io/downloads](https://www.packer.io/downloads) adresini ziyaret edebilirsiniz. Bu makale yazıldığı sırada mevcut olan bir sürümü örnek alarak devam edelim (örneğin, 1.7.10):

PACKER_VERSION="1.7.10" # Mevcut en son sürümü kontrol edin
    curl -LO https://releases.hashicorp.com/packer/${PACKER_VERSION}/packer_${PACKER_VERSION}_linux_amd64.zip

3. Packer’ı Kurun:
İndirdiğiniz ZIP dosyasını açın ve packer ikili dosyasını sisteminizin PATH‘inde bulunan bir dizine taşıyın (örneğin, /usr/local/bin).

unzip packer_${PACKER_VERSION}_linux_amd64.zip
    sudo mv packer /usr/local/bin/

4. Kurulumu Doğrulayın:
Kurulumun başarılı olup olmadığını kontrol etmek için packer --version komutunu çalıştırın:

packer --version

Eğer terminalde Packer sürüm numarasını görüyorsanız, kurulum başarılı demektir.

1.7.10

Artık Packer sisteminize yüklü ve DigitalOcean API token’ınız hazır. Bir sonraki adım, anlık görüntü oluşturmak için Packer şablon dosyasını hazırlamaktır.

Packer Şablonu Oluşturma (DigitalOcean için)

Packer şablonları, JSON formatında yazılır ve Packer’a ne yapması gerektiğini anlatır. digitalocean.json adında bir dosya oluşturalım ve içeriğini adım adım dolduralım.

{
  "variables": {
    "do_api_token": "{{env DO_API_TOKEN}}",
    "snapshot_name_prefix": "ubuntu-1604-base",
    "region": "fra1",
    "size": "s-1vcpu-1gb",
    "ssh_username": "root",
    "image": "ubuntu-16-04-x64"
  },
  "builders": [
    {
      "type": "digitalocean",
      "api_token": "{{user do_api_token}}",
      "image": "{{user image}}",
      "region": "{{user region}}",
      "size": "{{user size}}",
      "ssh_username": "{{user ssh_username}}",
      "snapshot_name": "{{user snapshot_name_prefix}}-{{timestamp}}",
      "tags": ["packer", "ubuntu-1604", "base-image"]
    }
  ],
  "provisioners": [
    {
      "type": "shell",
      "inline": [
        "echo 'Updating system...' && sudo apt update -y",
        "echo 'Upgrading system...' && sudo apt upgrade -y",
        "echo 'Installing essential packages...' && sudo apt install -y build-essential git curl wget vim htop net-tools",
        "echo 'Cleaning up apt cache...' && sudo apt autoremove -y && sudo apt clean",
        "echo 'Removing SSH host keys...' && sudo rm -f /etc/ssh/ssh_host_*",
        "echo 'Removing logs...' && sudo find /var/log -type f -delete",
        "echo 'Zeroing out free space for better compression...' && sudo dd if=/dev/zero of=/EMPTY bs=1M || true",
        "echo 'Removing zero fill file...' && sudo rm -f /EMPTY",
        "echo 'Packer build complete!'"
      ]
    },
    {
      "type": "shell",
      "execute_command": "chmod +x {{.Path}}; {{.Vars}} sudo -E {{.Path}}",
      "script": "scripts/cleanup_cloud_init.sh"
    }
  ]
}

Şimdi bu şablonun her bir bölümünü ayrıntılı olarak inceleyelim:

variables Bloğu

Bu blok, şablonunuzu daha esnek ve yeniden kullanılabilir hale getirmek için değişkenler tanımlamanıza olanak tanır.

* "do_api_token": "{{env DO_API_TOKEN}}": DigitalOcean API token’ını bir çevre değişkeninden (DO_API_TOKEN) alır. Bu, hassas bilgileri doğrudan şablonda tutmamak için kritik bir güvenlik uygulamasıdır.
* "snapshot_name_prefix": "ubuntu-1604-base": Oluşturulacak anlık görüntünün adının ön ekini belirler.
* "region": "fra1": Droplet’in oluşturulacağı DigitalOcean bölgesini belirtir (örneğin, Frankfurt).
* "size": "s-1vcpu-1gb": Droplet için kullanılacak boyutu belirtir. Bu, en küçük ve en uygun maliyetli Droplet boyutlarından biridir.
* "ssh_username": "root": Packer’ın Droplet’e SSH ile bağlanmak için kullanacağı kullanıcı adıdır. Ubuntu’da varsayılan olarak root kullanıcı ile bağlanılır.
* "image": "ubuntu-16-04-x64": Temel olarak kullanılacak DigitalOcean imajını belirtir. Bu, Ubuntu 16.04’ün 64-bit sürümüdür.

builders Bloğu

Bu blok, DigitalOcean üzerinde anlık görüntü oluşturmak için digitalocean builder’ını yapılandırır.

* "type": "digitalocean": Kullanılacak builder tipini belirtir.
* "api_token": "{{user do_api_token}}": variables bloğunda tanımlanan do_api_token değişkenini kullanır.
* "image": "{{user image}}": variables bloğunda tanımlanan temel imajı kullanır.
* "region": "{{user region}}": variables bloğunda tanımlanan bölgeyi kullanır.
* "size": "{{user size}}": variables bloğunda tanımlanan Droplet boyutunu kullanır.
* "ssh_username": "{{user ssh_username}}": variables bloğunda tanımlanan SSH kullanıcı adını kullanır.
* "snapshot_name": "{{user snapshot_name_prefix}}-{{timestamp}}": Oluşturulacak anlık görüntünün adını dinamik olarak belirler. {{timestamp}} ifadesi, anlık görüntünün adının sonuna o anki Unix zaman damgasını ekleyerek benzersiz olmasını sağlar.
* "tags": ["packer", "ubuntu-1604", "base-image"]: Oluşturulan Droplet’e ve dolayısıyla anlık görüntüye etiketler ekler. Bu, DigitalOcean panelinde kaynakları organize etmek için faydalıdır.

provisioners Bloğu

Bu blok, geçici Droplet üzerinde çalıştırılacak komutları ve betikleri tanımlar. Amacımız, temel bir Ubuntu 16.04 sistemini güncelleyip temizlemek ve bazı temel araçları yüklemektir.

* İlk shell provisioner’ı (inline komutlar):
* sudo apt update -y: Paket listelerini günceller.
* sudo apt upgrade -y: Yüklü paketleri en son sürümlerine yükseltir.
* sudo apt install -y build-essential git curl wget vim htop net-tools: Geliştirme ve sistem yönetimi için bazı temel paketleri yükler.
* sudo apt autoremove -y && sudo apt clean: Gereksiz paketleri kaldırır ve apt önbelleğini temizler. Bu, anlık görüntünün boyutunu küçültmeye yardımcı olur.
sudo rm -f /etc/ssh/ssh_host_: Droplet’e özgü SSH anahtarlarını siler. Bu, bu anlık görüntüden oluşturulan her yeni Droplet’in kendi benzersiz anahtarlarını oluşturmasını sağlar ve güvenlik için önemlidir.
* sudo find /var/log -type f -delete: Tüm log dosyalarını siler.
* sudo dd if=/dev/zero of=/EMPTY bs=1M || true ve sudo rm -f /EMPTY: Bu adımlar, diskteki boş alanı sıfırlarla doldurur ve ardından bu dosyayı siler. Bu işlem, bazı sanallaştırma platformlarında (DigitalOcean için doğrudan bir etkisi olmasa da genel bir iyi uygulama olarak kabul edilir) disk imajının daha iyi sıkıştırılmasına yardımcı olabilir.
* echo 'Packer build complete!': İşlemin tamamlandığını belirten bir mesaj.

* İkinci shell provisioner’ı (script kullanımı):
Bu örnekte, scripts/cleanup_cloud_init.sh adında harici bir betik çalıştırmak için script provisioner’ı kullanılmıştır. execute_command ise betiğin nasıl çalıştırılacağını belirtir.

scripts/cleanup_cloud_init.sh içeriği (örnek):

#!/bin/bash

    # Cloud-init'in sonraki boot'larda yeniden çalışmasını sağlamak için temizlik
    # Bu, yeni Droplet'lerin ilk açılışta kendi yapılandırmalarını almasını sağlar.
    sudo rm -rf /var/lib/cloud/instances/*
    sudo rm -f /var/lib/cloud/instance-id
    sudo rm -f /etc/cloud/cloud.cfg.d/50-curtin-networking.cfg
    sudo rm -f /etc/cloud/cloud.cfg.d/50-installer-cfg.cfg
    sudo rm -f /etc/netplan/*.yaml # Ubuntu 18.04+ için, 16.04'te farklı olabilir
    sudo truncate -s 0 /etc/machine-id
    sudo rm -f /var/log/cloud-init-output.log
    sudo rm -f /var/log/cloud-init.log

    # Geçici dosyaları temizle
    sudo rm -rf /tmp/*
    sudo rm -rf /var/tmp/*

    # Komut geçmişini sil
    history -c
    unset HISTFILE

    echo "Cloud-init cleanup complete."

Bu betiği, Packer şablonunuzla aynı dizinde scripts adında bir klasör oluşturup içine kaydetmeniz gerekmektedir. cloud-init temizliği, bu anlık görüntüden oluşturulacak yeni Droplet’lerin ilk açılışta düzgün bir şekilde başlatılmasını ve kendi benzersiz kimliklerini almasını sağlar.

Bu şablon, temel bir Ubuntu 16.04 anlık görüntüsü oluşturmak için iyi bir başlangıç noktasıdır. İhtiyaçlarınıza göre provisioners bloğuna daha fazla yazılım yükleme veya yapılandırma adımı ekleyebilirsiniz.

Packer Şablonunu Çalıştırma

Şablon dosyanızı (digitalocean.json) ve varsa betik dosyanızı (scripts/cleanup_cloud_init.sh) hazırladıktan sonra, Packer’ı çalıştırmaya hazırsınız.

1. API Token’ı Ayarlayın:
Terminalinizde, daha önce oluşturduğunuz DigitalOcean API token’ını çevre değişkeni olarak ayarlayın:

export DO_API_TOKEN="sizin_digitalocean_api_token'ınız"

2. Şablonu Doğrulayın:
Packer şablonunuzda herhangi bir sözdizimi hatası olup olmadığını kontrol etmek için packer validate komutunu kullanın:

packer validate digitalocean.json

Eğer “Template validated successfully.” mesajını alırsanız, şablonunuz doğru yapılandırılmış demektir. Herhangi bir hata durumunda, Packer size hatanın nerede olduğunu belirten mesajlar gösterecektir.

3. Packer Derlemesini Başlatın:
Şimdi asıl işlemi başlatmak için packer build komutunu kullanın:

packer build digitalocean.json

Bu komutu çalıştırdığınızda, Packer aşağıdaki adımları sırasıyla gerçekleştirecektir:

* Droplet Oluşturma: DigitalOcean API’sini kullanarak geçici bir Droplet oluşturur. Bu Droplet, şablonunuzda belirttiğiniz image, region ve size parametreleriyle oluşturulur.
* SSH Bağlantısı: Packer, Droplet başlatıldıktan sonra SSH üzerinden bağlantı kurar.
* Provisioners Çalıştırma: Şablonunuzdaki provisioners bloğunda tanımlanan tüm komutları ve betikleri sırayla çalıştırır. Bu aşamada, sistem güncellemeleri, yazılım yüklemeleri ve temizlik işlemleri yapılır.
* Droplet’i Kapatma: Provisioners tamamlandıktan sonra, Packer Droplet’i güvenli bir şekilde kapatır. Anlık görüntü almak için Droplet’in kapalı olması gerekir.
* Anlık Görüntü Alma: Kapatılan Droplet’in bir anlık görüntüsünü alır. Anlık görüntünün adı, şablonunuzdaki snapshot_name değerine göre belirlenir.
* Droplet’i Silme: Anlık görüntü başarıyla alındıktan sonra, Packer geçici Droplet’i otomatik olarak siler. Bu, gereksiz kaynak kullanımını ve maliyetleri önler.

Terminal çıktısında Packer’ın her adımı gerçekleştirdiğini ve ilerlemesini göreceksiniz. İşlem, Droplet’in boyutuna, internet bağlantı hızınıza ve provisioners bloğundaki komutların karmaşıklığına bağlı olarak birkaç dakika sürebilir.

Başarılı bir derlemenin sonunda, aşağıdaki gibi bir çıktı görmelisiniz (snapshot adı farklı olacaktır):

digitalocean: A snapshot was created: ubuntu-1604-base-1678886400
    Build 'digitalocean' finished after 5m30s.

    ==> Builds finished. The artifacts are below:

    --> digitalocean: A snapshot was created: ubuntu-1604-base-1678886400

Bu çıktı, anlık görüntünün başarıyla oluşturulduğunu ve adını gösterir.

Oluşturulan Anlık Görüntüyü Kullanma

Packer işlemi başarıyla tamamlandıktan sonra, DigitalOcean hesabınızda yeni bir anlık görüntü bulunacaktır.

1. DigitalOcean Kontrol Panelinde Doğrulayın:
DigitalOcean kontrol panelinize giriş yapın. Sol menüden “Images” (İmajlar) seçeneğine tıklayın, ardından “Snapshots” (Anlık Görüntüler) sekmesine geçin. Burada, Packer tarafından oluşturulan anlık görüntüyü (örneğin, ubuntu-1604-base-1678886400) listede görmelisiniz.

2. Yeni Bir Droplet Oluştururken Kullanın:
Bu anlık görüntüyü kullanarak yeni bir Droplet oluşturmak için:
* “Create” (Oluştur) düğmesine tıklayın ve “Droplets” (Droplet’ler) seçeneğini seçin.
* İşletim sistemi seçimi bölümünde “Snapshots” sekmesine gidin.
* Oluşturduğunuz anlık görüntüyü seçin.
* İstediğiniz bölgeyi, planı ve diğer ayarları seçerek Droplet’i oluşturun.

Bu yeni Droplet, Packer şablonunuzda tanımladığınız tüm yazılımlar ve yapılandırmalarla birlikte başlayacaktır. Bu, sunucu dağıtım sürecinizi büyük ölçüde hızlandırır ve tutarlılığı garanti eder.

Gelişmiş Packer Kullanımı ve En İyi Uygulamalar

Packer, temel anlık görüntü oluşturmanın ötesinde birçok gelişmiş özelliğe ve en iyi uygulamaya sahiptir.

Değişkenlerin Kullanımı

Şablonunuzu daha dinamik hale getirmek için variables bloğunu daha etkin kullanabilirsiniz. Packer’ı çalıştırırken komut satırından da değişken değerleri geçirebilirsiniz:

packer build -var 'region=nyc1' -var 'snapshot_name_prefix=my-custom-image' digitalocean.json

Bu, aynı şablonu farklı bölgelerde veya farklı adlandırma kurallarıyla kullanmanıza olanak tanır.

Parçalı Şablonlar ve Organizasyon

Daha karmaşık senaryolarda, tek bir büyük JSON dosyası yerine şablonunuzu birden fazla dosyaya bölebilirsiniz. Örneğin, variables.json, builders.json ve provisioners.json gibi dosyalar oluşturup bunları ana şablonda birleştirebilirsiniz. Bu, şablonların daha okunabilir ve yönetilebilir olmasını sağlar.

Gizli Bilgileri Yönetme

DO_API_TOKEN gibi hassas bilgileri çevre değişkenleri aracılığıyla yönetmek iyi bir başlangıçtır. Ancak, daha büyük ekipler veya daha karmaşık altyapılar için HashiCorp Vault gibi özel gizli yönetim çözümleri kullanmak daha güvenli ve ölçeklenebilir bir yaklaşımdır.

Güvenlik ve Güncelleme

* Düzenli Güncellemeler: Oluşturduğunuz anlık görüntüler zamanla eskiyebilir. Güvenlik açıkları ve yeni yazılım sürümleri nedeniyle, anlık görüntülerinizi düzenli olarak (örneğin, aylık) yeniden oluşturmanız ve güncellemeniz önemlidir.
* Minimal İmajlar: Anlık görüntülerinizin mümkün olduğunca küçük ve sadece gerekli yazılımları içermesini sağlayın. Bu, güvenlik yüzeyini azaltır ve dağıtım sürelerini kısaltır.
* Temizlik: Anlık görüntüyü oluşturmadan önce SSH anahtarlarını, log dosyalarını ve diğer geçici verileri temizlemek çok önemlidir. Bu, güvenlik açıklarını önler ve her yeni Droplet’in benzersiz olmasını sağlar.

Sürüm Kontrolü ve CI/CD Entegrasyonu

Packer şablonlarınızı ve ilişkili betiklerinizi (örneğin, cleanup_cloud_init.sh) Git gibi bir sürüm kontrol sisteminde saklamak, değişiklikleri izlemenize, işbirliği yapmanıza ve geri dönüş yapmanıza olanak tanır.

Ayrıca, Packer derleme sürecini Jenkins, GitLab CI, GitHub Actions gibi sürekli entegrasyon/sürekli dağıtım (CI/CD) boru hatlarına entegre edebilirsiniz. Bu, her kod değişikliğinde veya belirli bir zaman çizelgesine göre otomatik olarak yeni anlık görüntüler oluşturulmasını sağlayarak altyapınızın her zaman güncel kalmasını garanti eder.

DigitalOcean Maliyetleri

Packer, geçici bir Droplet oluşturup silse de, oluşturulan anlık görüntüler DigitalOcean hesabınızda depolanır ve bu da maliyet yaratır. Kullanmadığınız eski veya gereksiz anlık görüntüleri düzenli olarak kontrol panelinizden silerek maliyetleri optimize edebilirsiniz.

Ubuntu 16.04’ten Güncel Sürümlere Geçiş

Makalenin başında da belirtildiği gibi, Ubuntu 16.04 artık resmi güvenlik güncellemeleri almamaktadır. Üretim ortamlarında veya yeni projelerde her zaman güncel ve desteklenen bir işletim sistemi sürümünü (örneğin, Ubuntu 20.04 LTS veya 22.04 LTS) kullanmanız şiddetle tavsiye edilir. Packer şablonunuzda image değişkenini güncel bir sürüme (ubuntu-22-04-x64 gibi) değiştirerek bu geçişi kolayca yapabilirsiniz.

Sonuç

Bu makalede, HashiCorp Packer’ı kullanarak DigitalOcean üzerinde Ubuntu 16.04 tabanlı özel anlık görüntüler oluşturmanın tüm sürecini ayrıntılı bir şekilde ele aldık. Packer’ın nasıl kurulacağından, DigitalOcean API token’ının nasıl oluşturulacağına, kapsamlı bir Packer şablonunun nasıl yazılacağına ve bu şablonun nasıl çalıştırılacağına kadar her adımı adım adım inceledik.

Packer, bulut altyapınızda tekrarlanabilirlik, tutarlılık ve otomasyon sağlamak için vazgeçilmez bir araçtır. Önceden yapılandırılmış anlık görüntüler oluşturarak, sunucu dağıtım sürelerini önemli ölçüde azaltabilir, manuel hataları ortadan kaldırabilir ve geliştirme, test ve üretim ortamlarınız arasında tutarlılık sağlayabilirsiniz.

Unutmayın ki bu makale spesifik olarak Ubuntu 16.04’ü ele alsa da, gösterilen prensipler ve Packer şablon yapısı, DigitalOcean üzerindeki diğer işletim sistemi sürümleri veya farklı bulut sağlayıcıları için de kolayca uyarlanabilir. Altyapınızı kod olarak yönetme yolculuğunuzda Packer, size sağlam bir temel sunacaktır. Bu bilgileri kullanarak, kendi özel ihtiyaçlarınıza göre daha karmaşık ve optimize edilmiş imajlar oluşturmaya başlayabilirsiniz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.