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.
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.
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]
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
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 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.