DigitalOcean Komut Satırı Aracı (doctl)

DigitalOcean üzerinden yapılan işlemler ve hatta daha fazlasını DigitalOcean komut satırı arabirimi (CLI) yani doctl aracılığıyla hızlı ve otomatize bir şekilde yürütmek mümkün.

AA

Droplet oluşturma (özellikle WordPress örnekleri) üzerine daha öncesinde kısaca değindiğim doctl ile ilgili olarak bu yazıda daha kapsamlı örneklere yer vermek istiyorum.

doctl (DigitalOcean Komut Satırı Aracı)

Özet bir şekilde ifade etmek gerekirse, doctl DigitalOcean API için bir komut satırı arabirimi1. DigitalOcean’ın web tabanlı kontrol paneli droplet yönetimi için yeterli olsa da grafik arayüzü olmadan ve işlemleri komutlarla yönetmek istediğimiz durumlarda doctl‘in droplet yönetimi ve çoklu hesap gibi süreçlerde daha esnek bir yapı sunduğunu söyleyebiliriz. O halde, doctl‘i nasıl kurabileceğimizle başlayalım.

doctl Kurulumu

macOS üzerinde Homebrew paket yöneticisi ile hızlı bir şekilde kurulum yapabiliriz.

brew install doctl

Alternatif olarak curl ve wget aracılığıyla da release edilen son paketi indirerek kurulum işlemini gerçekleştirebiliriz2. Önce root dizine geçelim. curl ile yüklememizi yapıp (bu yazı sürecinde yayınlanan son 1.10.0 sürümünü kullandım) ardından ilgili dosyayı bin dizinine aktaralım.

cd ~
curl -sL https://github.com/digitalocean/doctl/releases/download/v1.10.0/doctl-1.10.0-linux-amd64.tar.gz | tar -xzv
sudo mv ~/doctl /usr/local/bin

Şayet bu aşamada kurulum ile komut ilişkilendirmesinde sorun yaşanması muhtemel. Bu durumda linklendirme işlemini yineleyebiliriz.

brew link --overwrite doctl

Yükleme işlemlerimiz tamamlandığına göre artık hesaplarımızı ilişkilendirebiliriz.

doctl Hesap İşlemleri

Öncelikle doctl kullanımına bir göz atalım.

Kontrol:
  doctl [komut]

Kullanılabilir komutlar:
  account     hesap işlemleri
  auth        erişim işlemleri
  compute     hesap yönetim işlemleri
  version     güncel versiyon bilgisi

Parametreler:
  -t, --access-token string   API V2 erişim jetonu
  -c, --config string         ayar dosyası (ön tanımlı olarak $HOME/.config/doctl/config.yaml)
      --context string        kimlik doğrulama bağlamı
  -h, --help                  yardım işlemleri
  -o, --output string         çıktı formatı \[text|json\] (ön tanımlı "text")

"doctl \[komut\] --help" ile komutlarla ilgili daha detaylı bilgiler edinebiliriz.

doctl kullanımı için öncelikle DigitalOcean > Manage > API > Applications & API bölümünden erişim bilgilerimizi edinmeliyiz3. Ardından auth init ile erişimimizi sağlayabiliriz.

doctl auth init

Bu komutu uygulayıp bilgilerin tamamlanmasının (ya da kullanılan bilgilerin geçerliliğinin kontrol edilmesinin ardından) diğer işlemlere geçebiliriz. Ek olarak, birden fazla hesap üzerinden de işlemler gerçekleştirmek isteyebiliriz.

doctl

Token tanımlamasını isimlendirmelerle birlikte şu şekilde yapabiliriz:

doctl auth init --context [token-adi] --access-token [olusturdugumuz-token]
doctl auth init --context [token-adi-2] --access-token [olusturdugumuz-token-2]

Hesaplar arasında geçiş yapmak için ise auth switch komutunu kullanabiliriz.

doctl auth switch --context [olusturdugumuz-token]
doctl auth switch --context [olusturdugumuz-token-2]

Token tanımlama aşamasında ilettiğimiz ad ve içeriği ise auth init ile görüntüleyebiliriz.

doctl auth init --context [olusturdugumuz-token]
doctl auth init --context [olusturdugumuz-token-2]
DigitalOcean

doctl Droplet İşlemleri

doctl aracılığıyla droplet oluşturma ve yönetme süreci oldukça pratik bir hale gelmekte ve elbette cronjob ile otomatize ederek -ya da harici bir uygulama ile- belirlediğiniz görevleri gerçekleştirebilmek adına değerlendirilebilmekte. İlk aşamada droplet oluşturma işlemlerine bir bakalım. Bunun için sunulan image seçeneklerine göz atabiliriz. --public ile erişilebilir tüm dropletleri listeleyebiliriz.

doctl compute image list --public

--format ile listeyi düzenleyelim.

doctl compute image list --format ID,Name,Slug --public
DigitalOcean

Peki, içeriğinde sadece wordpress geçenleri listelemek istersek?

doctl compute image list --format ID,Name,Slug --public | grep wordpress

Şimdi de region seçeneklerine bir göz atalım.

doctl compute region list

doctl Droplet Oluşturmak

Droplet listemizi aldık ve bizim için uygun olan dropletlerin slug değerlerini (örneğin wordpress-18-04, region olarak da ams3) not ettik. Artık droplet oluşturabiliriz. create [droplet-ismi] --region [bolge] --image [imaj] --size [barindirma-alani] ile ilgili alanları ihtiyaçlarımıza göre tanımlayıp komutumuzu uygulayabiliriz. Droplet oluşturma sürecinde region, image ve size gerekli alanlarımız. Bunun yanı sıra kullanılabilecek diğer parametreler --help ile görüntülenebilir.

doctl
doctl compute droplet create test --region ams3 --image wordpress-18-04 --size 1gb

Yukarıdaki komutu uyguladığımızda herhangi bir SSH keys ilişkilendirmesi yapılmamış olacaktır. Ayrıca, Projects altında birden fazla alanınız varsa ön tanımlı olan üzerinden işlemleriniz gerçekleştirilecektir.

Peki, SSH tanımlamasını nasıl yapabiliriz? --ssh-keys kullanabileceğimiz parametremiz. Ayrıca ssh-key list ile tanımlı SSH keylerimizi listeleyebilir ve fingerprint değer(ler)ini droplet oluşturma süreçlerimizde kullanabiliriz.

doctl compute ssh-key list

Evet, SSH key tanımlı bir droplet oluşturalım.

doctl compute droplet create test --size 1gb --image debian-8-x64 --region nyc1 --ssh-keys 4d:23:e6:e4:8c:17:d2:cf:89:47:36:b5:c7:33:40:4e --enable-backups

Yeni bir key tanımlamak istediğimizde ise (kullanacağımız public key ~/.ssh/id_rsa.pub olduğunu varsayarak) şu komutu kullanabiliriz:

doctl compute ssh-key import [key-adi] --public-key-file ~/.ssh/id_rsa.pub

doctl Dropletleri Listelemek

Hesap tanımlama ve erişim aşamasını da tamamladığımıza göre droplet işlemlerine bakabiliriz. Öncelikle aktif olan hesap dahilinde oluşturulmuş dropletlerimizi listeleyelim. Listeleme için list veya ls komutları kullanılabilir.

doctl compute droplet list
doctl compute droplet ls --no-header
doctl compute droplet ls --region lon1
doctl compute droplet list --format ID,Name

Örnekte yer alan --no-header flag ile sütun başlıklarını değil doğrudan droplet detaylarını ediniriz. --region ile de droplet oluştururken tercih ettiğimiz bölgelere göre filtreleme gerçekleştirebiliriz. --format ise belirlediğimiz formatta droplet listesini almamızı sağlar.

doctl Droplet Erişimi

Dropletleri oluşuturduk, listeledik. Artık ilgili droplet erişimlerine (SSH bağlantısı) geçebiliriz. Bu işlemler için compute ssh komutunu kullanacağız. Bu bağlantı sürecinde SSH key tanımlı değilse admin şifresi gerekecektir. Ek olarak, farklı kullanıcılar mevcutsa --ssh-user ile kullanıcı tanımlaması da gerçekleştirilebilir.

doctl compute ssh [droplet-adi]

Peki, oluşturduğumuz bir droplet’e sonradan ssh tanımlaması yapamaz mıyız? Bu işlem için Sunucuya SSH Public Key Kaydetmek başlıklı yazımı inceleyebilirsiniz.

doctl Droplet Silme

Kullanmak istemediğiniz ya da belirlenen görevi gerçekleştirdikten sonra kaldırılmasını istediğiniz dropletler olabilir. Bu durumda delete ile hızlı bir şekilde droplet silme işlemi gerçekleştirebiliriz.

doctl compute droplet delete [droplet-id-veya-adi]

Dropletleri Name ve ID değerlerini belirtmek şartıyla tek komut ile silmek mümkün.

doctl compute droplet delete [droplet1-adi-veya-ID] [droplet2-adi-veya-ID] [droplet3-adi-veya-ID]

Elbette bunun için ID ve/veya Name değerlerini biliyor olmanız ve komut içerisinde tanımlamanız gerekli. Bir diğer yöntem ise tüm dropletlerimizi listeleyerek ID ve/veya Name değerini sonraki komuta aktarmak. Tabi bu durumda tüm dropletlerinizin silineceğini unutmamalısınız. Bu nedenle list içerisinde buna yönelik olarak tag ve benzeri ek parametreleri kullanabilirsiniz.

doctl compute droplet delete $(doctl compute droplet list --format ID --no-header)

En temel ve benimde yazılarda sıklıkla kullandığım droplet komutlarını mümkün olduğu karar işlem sırasına göre aktarmaya çalıştım. Elbette daha pek çok komut ve bu komutlarla ilgili detay mevcut. Daha detaylı bilgi için How To Use Doctl, the Official DigitalOcean Command-Line Client başlıklı yazıyı inceleyebilirsiniz4. Ayrıca doctl GitHub sayfasını da inceleyebilirsiniz2. Bu işlemleri mobil telefonla gerçekleştirebilmek için çeşitli yöntemler ve uygulamalar deniyorum. Ancak, şimdilik en makul yöntem SSH Tunnel ile sunucu üzerinden Dropletleri yönetmek gibi görünüyor. Termux üzerinde kullanabileceğimiz bir paket olursa ayrıca not düşeceğim.