Vagrant Nedir, Nasıl Kurulur?

Vagrant, HashiCorp tarafından geliştirilen ve yazılım geliştiricilere sanal makineler üzerinde çalışma imkanı sağlayan açık kaynaklı bir araçtır. Geliştiricilere proje bağlamında izole edilmiş ortamlar sunarak, taşınabilirlik ve uyumluluk sorunlarını minimize etmeyi hedefler. Temelde, bir proje için kullanılan işletim sistemini ve bağımlılıkları sanal bir ortamda standardize etmeyi amaçlar.

Vagrant: Geliştiriciler İçin Sanal Makine Yönetimi

Yazılım geliştirme süreçleri, gelişen teknoloji ve artan karmaşıklıkla birlikte daha da sofistike hale gelmiştir. Farklı işletim sistemleri, bağımlılıklar ve konfigürasyonlar, bir projenin farklı ortamlarda sorunsuz çalışmasını zorlaştırabilir. Bu sorunları çözmek ve geliştirme süreçlerini daha verimli hale getirmek amacıyla birçok araç ve teknoloji geliştirilmiştir. Bu araçlardan biri de Vagrant’dır.

Neden Vagrant?

  1. Taşınabilirlik ve Uyumluluk: Vagrant, her geliştiricinin proje için aynı ortamı kullanabilmesini sağlar. Bu, farklı geliştiriciler arasında ve farklı ortamlarda çalışan projelerin uyumlu bir şekilde yönetilebilmesine olanak tanır.
  2. İzolasyon ve Güvenlik: Her proje kendi izole edilmiş sanal makinesine sahiptir. Bu, bir projenin diğerine müdahale etmesini engeller ve güvenlik açısından bir katman daha ekler.
  3. Hızlı Ortam Kurulumu: Vagrant, bir projenin gereksinim duyduğu ortamı hızlıca oluşturabilir. Bu, geliştiricilerin zaman kaybetmeden işe başlamasına olanak tanır.
  4. Geri Al ve Snapshot Özellikleri: Vagrant’ın snapshot özellikleri, bir projenin belirli bir durumunu kaydetmek ve ihtiyaç duyulduğunda bu duruma geri dönmek için kullanılır. Bu, hata ayıklama süreçlerini kolaylaştırır.

Vagrant Nasıl Kurulur?

Vagrant’ı kullanmaya başlamak oldukça basittir. İlk olarak, Vagrant’ın resmi web sitesinden işletim sisteminize uygun sürümü indirip kurmanız gerekmektedir. Daha sonra, Vagrant projeniz için bir sanal makine sağlayıcısı seçmeniz gerekebilir. VirtualBox, VMware gibi popüler sağlayıcılardan birini seçip yükleyebilirsiniz.

Vagrant’ı başlatmak için, proje dizininizde bir terminal veya komut istemcisine gidip vagrant init komutunu çalıştırmanız yeterlidir. Bu komut, proje dizinine Vagrantfile adında bir yapılandırma dosyası oluşturur. Oluşturulan bu dosyayı düzenleyerek, sanal makinenizin özelliklerini belirleyebilirsiniz.

Sanal makinenizi başlatmak için ise vagrant up komutunu kullanabilirsiniz. Vagrant, belirlediğiniz özelliklere sahip sanal makineleri oluşturacak ve başlatacaktır.

Temel Vagrant Komutları

Vagrant’ın güçlü özelliklerini kullanabilmek için birkaç temel komut bilmek önemlidir:

  • vagrant ssh: Sanal makinenize SSH ile bağlanmanızı sağlar.
  • vagrant halt: Sanal makinenizi kapatır.
  • vagrant destroy: Sanal makinenizi siler.
  • vagrant suspend: Sanal makinenizi askıya alır.
  • vagrant resume: Askıya alınan sanal makinenizi devam ettirir.
  • vagrant reload: Sanal makinenizi yeniden başlatır.

Vagrant’ın ileri seviye kullanımı, Vagrantfile’ın özelleştirilmesini ve özel provizyonlama senaryolarının eklenmesini içerir. Bu, bir projenin özel gereksinimlerine uygun bir Vagrant ortamı oluşturmayı sağlar.

Vagrantfile Nedir?

Vagrantfile, bir Vagrant projesinin temel yapı taşıdır. Bu dosya, sanal makine özellikleri, ağ konfigürasyonları, provizyonlama ayarları ve daha birçok parametreyi içerir. Bu sayede bir proje ekibi, aynı Vagrantfile’ı kullanarak ortamlarını aynı şekilde yapılandırabilir ve yönetebilir.

Vagrantfile Nasıl Çalışır?

Vagrantfile, Ruby tabanlı bir konfigürasyon dilinde yazılmıştır ve projenin ana dizininde bulunur. Bu dosya, vagrant up komutu çalıştırıldığında yürütülerek sanal makinenin belirtilen şekilde oluşturulmasını sağlar. Ayrıca, Vagrantfile üzerinde yapılan değişiklikler, vagrant reload komutu ile hemen uygulanabilir.

Temel Vagrantfile Öğeleri:

1.Box Belirleme:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
end

Burada, config.vm.box parametresi ile kullanılacak sanal makine görüntüsü belirlenir. Örnekte, Ubuntu 18.04 LTS sürümü kullanılıyor.

2.Sanal Makine Özellikleri:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "1024"
    vb.cpus = 2
  end
end

Bu örnekte, config.vm.network ile port yönlendirmesi, config.vm.provider ile sanal makine özellikleri belirlenmiştir.

3.Provizyonlama Ekleme:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.provision "shell", path: "script.sh"
end

config.vm.provision ile Vagrant’ın provizyonlama yeteneklerinden faydalanarak, sanal makineye gerekli yazılım veya konfigürasyonu ekleyebilirsiniz.

4.Vagrantfile Özelleştirme:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "1024"
    vb.cpus = 2
  end
  config.vm.hostname = "my-web-server"
  config.vm.synced_folder "src/", "/var/www/html"
end

config.vm.hostname ile sanal makineye bir isim atanabilir ve config.vm.synced_folder ile yerel dosyalar ile sanal makine arasında dosya paylaşımı sağlanabilir.

Vagrantfile’ı Kullanırken Dikkat Edilecek Noktalar:

Sürüm Belirtme:

Vagrantfile’da kullanılan Vagrant versiyonunu belirtmek önemlidir. Örneğin, "2" versiyonunu kullanmak için:

Vagrant.configure("2") do |config|
  # ...
end

Sanal Makine Sağlayıcıları:

Vagrant, farklı sanal makine sağlayıcılarıyla uyumlu çalışabilir. Bu nedenle, config.vm.provider içinde kullanılan sağlayıcı belirtilmelidir. Örneğin, VirtualBox için:

Vagrant.configure("2") do |config|
  config.vm.provider "virtualbox" do |vb|
    # ...
  end
end

Dosya Paylaşımı:

Vagrantfile üzerinde config.vm.synced_folder ile yerel ve sanal makineler arasında dosya paylaşımı yapılabileceği gibi, vagrant up komutunu çalıştırdığınız dizindeki dosyalar da otomatik olarak paylaşılır.

Provizyonlama:

Proje ihtiyaçlarına bağlı olarak, provizyonlama ile sanal makineye yazılım yüklemek veya konfigürasyonlar eklemek mümkündür.

Vagrant ile Docker arasındaki farklar nelerdir?

Vagrant ve Docker, yazılım geliştirme süreçlerini kolaylaştırmak ve uygulama dağıtımını iyileştirmek amacıyla kullanılan araçlardır. Ancak, bu iki arasında bazı temel farklar bulunmaktadır. İşte Vagrant ile Docker arasındaki ana farklar:

1. İzolasyon ve Performans:

Vagrant:

  • Vagrant, genellikle tam sanal makineler kullanır. Bu, işletim sistemi seviyesinde bir izolasyon sağlar.
  • Sanal makineler, daha ağır olabilir ve başlatma süreleri daha uzun olabilir.
  • Her sanal makine, kendi işletim sistemini ve kaynaklarını içerir.

Docker:

  • Docker, konteyner tabanlı bir yaklaşım kullanır. Konteynerler, işletim sistemini paylaşan ve hafif süreçlerden oluşan izole ortamlardır.
  • Docker konteynerleri, daha hafif ve hızlıdır. Başlatma süreleri çok kısadır.
  • Ortak bir çekirdek (kernel) paylaşıldığı için daha az sistem kaynağı tüketir.

2. Taşınabilirlik:

Vagrant:

  • Vagrant, farklı sanal makine sağlayıcıları ile uyumlu olsa da, taşınabilirlik Docker kadar yüksek değildir.
  • Sanal makine sağlayıcıları arasında geçiş, uyumluluk sorunlarına yol açabilir.

Docker:

  • Docker konteynerleri, bağımsız ve taşınabilirdir. Bir kez oluşturulan bir Docker konteyneri, herhangi bir ortamda çalışabilir.
  • Docker Hub gibi merkezi depolama alanları, konteyner imajlarını paylaşmak ve dağıtmak için kullanılır.

3. Yapılandırma ve Dağıtım:

Vagrant:

  • Vagrantfile, sanal makine yapılandırmasını ve projeye özel ayarları tanımlar.
  • Sanal makineler, genellikle uzun bir başlatma sürecine sahip olduğundan, hızlı yapılandırma ve dağıtım zor olabilir.

Docker:

  • Dockerfile, uygulamanın ve bağımlılıklarının nasıl paketleneceğini tanımlar.
  • Docker konteynerleri, hızlı bir şekilde oluşturulabilir ve dağıtılabilir. Uygulama ve bağımlılıklar bir konteyner imajında paketlenir.

4. Kullanım Alanları:

Vagrant:

  • Vagrant, genellikle geliştirme ve test ortamlarını yönetmek için kullanılır.
  • Sanal makineler genellikle daha büyük ve ağır olduğu için genellikle geliştirme makineleri üzerinde kullanılır.

Docker:

  • Docker, mikro hizmet mimarileri, konteyner orkestrasyonu ve hızlı dağıtım gibi alanlarda yaygın olarak kullanılır.
  • Konteynerler, hafif olmaları ve hızlı başlamaları nedeniyle genellikle üretim ortamlarında tercih edilir.

5. Topluluk ve Ekosistem:

Vagrant:

  • Vagrant, güçlü bir topluluğa sahiptir ve birçok eklenti ve sanal makine sağlayıcısı ile uyumludur.
  • Ancak, Docker kadar geniş bir ekosistem sunmamaktadır.

Docker:

  • Docker, geniş bir topluluğa ve çok sayıda resmi ve topluluk destekli imaja sahip geniş bir ekosistemle öne çıkar.
  • Docker Hub gibi merkezi depolama alanları, imajların paylaşımını ve kullanımını kolaylaştırır.

Redis Cluster Nasıl Kurulur?

Redis Cluster, dağıtık bir şekilde çalışan ve yüksek performanslı veri depolama ve işleme sağlayan bir veritabanı sistemidir. Redis Cluster, veriyi otomatik olarak parçalar, dağıtır ve yüksek kullanılabilirlik sunar. İşte Redis Cluster’ın kurulum adımları:

Test Ortamı Kurulumu

Kurulum yapılacak IP bilgileri aşağıdadır.

Redis Master : 192.168.56.150
Redis Slave1 : 192.168.56.151
Redis Slave2 : 192.168.56.152

3 Adet sunucu kurulumumuz tamamlandıktan sonra hosts dosyalarına bu bilgileri girmemiz gerekmektedir.

vim /etc/hosts

192.168.56.150   redis-master
192.168.56.151   redis-slave1
192.168.56.152   redis-slave2

Bu bilgileri girdikten sonra birbirlerine ping atıyor mu test etmemiz gerekir.

ping redis-master

Ping attığını görüyorsak eğer herhangi problem gözükmemektedir. Redis kuruluma geçebiliriz. Redis paketini 3 adet sunucuda kuruyoruz.

curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg /// GPG anahtarını indirerek /usr/share/keyrings/ dizinine şifreleme işlemini gerçekleştireceğiz.

echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list /// GPG anahtarını deb e tanımlamak için çalıştırıyoruz.

apt-get update // Paketlerimizi güncelliyoruz.

apt-get install -y redis-server // Redis paketimizi kuruyoruz.

Redis ayağa kalkıp kalkmadığını kontrol sağlıyoruz.

systemctl status redis-server

Redis in portunu kontrol ediyoruz.

ss -lntp | grep redis

Kurulum da herhangi bi sıkıntı yaşamadıysak eğer başta servislerimizi enable ardından durduruyoruz.

systemctl enable redis-server
systemctl stop redis-server

Bu işlemlerden sonra redis default konfigürasyonunu yedekleme ihtiyacımız bulunmaktadır.

cd /etc/redis
cp -rp redis.conf redis.conf.backup

Yedekleme işlemi bittikten sonra artık redis konfigürasyonunu gerçekleştirebiliriz. Aşağıdaki konfig Master Slave makinelerinde uygulayabiliriz. Tek dikkat etmemiz gereken kısım bind ta olan ipleri hangi sunucuda çalışacak ise onun kendi ipsini belirtiyoruz.

bind 127.0.0.1 192.168.56.150
protected-mode no
port 6379
loglevel  notice
logfile  /var/log/redis/redis.log
supervised systemd

3 adet sunucumuzun redis servisini aktif ediyoruz.

systemctl start redis-server

Slave1 ve Slave2 sunucumuza giderek aşağıdaki komutu çalıştırırsak master sunucumuza bağlanmış olacaktır.

REPLICAOF 192.168.56.150 6379 veya aşağıdaki komut ikisi aynı mantıkta çalışır.
redis-cli replicaof 192.168.56.150 6379

Komutun sonucunu aşağıda görebilirsiniz. Bu komutu Master sunucumuzdan gerçekleştirdik.

RabbitMQ Topolojileri Nelerdir?

RabbitMQ, bir mesaj sırası (message queue) sistemidir ve farklı sistemler arasında iletişim kurmayı sağlar. RabbitMQ’nun farklı kullanım senaryolarına göre farklı topolojileri bulunmaktadır. İşte bazı temel RabbitMQ topolojileri:

  1. Direct Exchange (Doğrudan Değişim): Bu topolojide, mesajlar doğrudan belirli bir kuyruğa yönlendirilir. Mesajın gönderileceği kuyruk, mesajın taşıdığı yönlendirme anahtarına (routing key) bağlıdır. Bu topoloji genellikle tek bir tüketiciye yönlendirilmiş mesajları işlemek için kullanılır.
  2. Fanout Exchange (Yayın Değişimi): Bu topolojide, bir mesajı alan tüm kuyruklara mesajları yayınlamak için kullanılır. Yani, bir yayın değişimi aldığı mesajı direkt olarak bağlı olan tüm kuyruklara iletecektir. Bu, bir olayı birden çok tüketiciye iletmek veya bir tüketici grubuna mesaj göndermek için kullanışlıdır.
  3. Topic Exchange (Konu Değişimi): Bu topolojide, kuyrukları bir veya daha fazla anahtar kelimeye dayalı olarak yönlendirebilirsiniz. Mesajların yönlendirilmesi bir konu (topic) ile belirlenir ve kuyruklar belirli bir konu deseni (pattern) ile ilişkilendirilir. Örneğin, “haber.spor” konusuyla ilişkilendirilen bir kuyruk, “haber.spor.football” veya “haber.spor.basketball” gibi mesajları alır.
  4. Headers Exchange (Başlık Değişimi): Bu topolojide, mesajların içeriğine ve özelliklerine dayalı olarak kuyruklara yönlendirme yapılır. Mesajın başlıklarına eklenen anahtar/değer çiftleriyle kuyruklar ilişkilendirilir. Başlıkların eşleşmesine dayalı olarak mesajlar ilgili kuyruklara yönlendirilir.
  5. Dead Letter Exchange (Ölü Mektup Değişimi): Bu, işlenemeyen veya geçersiz mesajları yönlendirmek için kullanılan bir topolojidir. Bir mesaj işlenemediğinde veya belirli bir süre içinde bir kuyrukta beklediyse, bu mesaj ölü mektup değişimi aracılığıyla belirli bir ölü mektup kuyruğuna yönlendirilebilir.

Bu listede belirttiğim temel topolojiler dışında daha karmaşık ve özelleştirilmiş topolojiler de oluşturulabilir. Hangi topolojinin kullanılacağı, uygulamanızın gereksinimlerine, iş akışına ve iletişim senaryolarına bağlı olarak değişebilir.

Redis Topolojileri Nelerdir?

Redis, bir açık kaynaklı anahtar-değer deposu olarak kullanılan hızlı ve verimli bir veritabanı sistemidir. Redis’in farklı topolojileri ve kullanım senaryoları mevcuttur. İşte bazı popüler Redis topolojileri:

  1. Standalone (Tekil): Bu en basit Redis topolojisidir. Tek bir Redis sunucusunun kullanıldığı bir yapıdır. Genellikle küçük ölçekli uygulamalarda veya geliştirme ve test aşamalarında kullanılır. Veri bütünlüğü ve yedeklilik açısından sınırlıdır çünkü tek bir sunucu arızalandığında veri kaybı riski vardır.
  2. Replication (Replikasyon): Bu topolojide, ana (master) Redis sunucusu verilere yazma yapar ve bir veya daha fazla ikincil (slave) sunucu, ana sunucudan verileri kopyalar. Replication, yük dengelemesi ve yedeklilik sağlar. Ana sunucudaki veriler korunurken ikincil sunucular verileri okuma amaçlı kullanılabilir. Ancak, ana sunucu arızalandığında otomatik bir yük dengelemesi veya yedek alma mekanizması yoktur.
  3. Sentinel: Redis Sentinel, yüksek erişilebilirlik (high availability) sağlamak için kullanılan bir topolojidir. Bu yapıda, bir ana (master) sunucu ve onu izleyen bir veya daha fazla ikincil (slave) sunucu bulunur. Ayrıca, Sentinel adı verilen özel sunucular da bulunur. Sentinel sunucuları, Redis sunucularının durumunu izler ve gerektiğinde otomatik olarak ana sunucuyu değiştirebilir. Bu sayede yüksek erişilebilirlik ve otomatik failover (arıza sonrası geçiş) sağlanır.
  4. Cluster: Redis Cluster, büyük ölçekli uygulamalar için tasarlanmış bir topolojidir. Bu yapıda, birden fazla Redis düğümü (node) birbirine bağlanır. Veri yatay olarak bölünür ve farklı düğümlerde depolanır. Bu sayede yüksek performans ve yük dengelemesi elde edilir. Redis Cluster, otomatik bölünme ve veri dağıtımı sağlayarak genişlemeyi kolaylaştırır.

Bu listede yer alan Redis topolojileri, farklı kullanım durumlarına ve gereksinimlere yönelik çeşitli çözümler sunar. Seçim yaparken ölçek, yüksek erişilebilirlik gereksinimleri, veri güvenliği ve performans gibi faktörleri göz önünde bulundurmak önemlidir.

Redis Nedir?

Redis, in-memory veritabanı olarak bilinir, yani verileri RAM bellekte saklar. Ancak istenirse, veriler belirli zaman aralıklarında diske kaydedilerek tutarlılık sağlanabilir. Bu özelliği sayesinde Redis, hızlı okuma ve yazma işlemleri sunar, hatta mili saniye seviyesinde işlemleri gerçekleştirebilir. Doğru senaryoda ve veri yapısı kullanıldığında veriye erişim maliyeti O(1) seviyesine düşebilir.

Redis’in kullanım alanları şunlar:

Önbellekleme (Caching): Verileri önbelleğe alma genellikle geleneksel veritabanlarıyla karşılanamayacak yüksek okuma ve yazma talepleri olduğunda tercih edilir. Bu durumda amaç, veritabanı veya uygulama yükünü azaltarak verilere daha hızlı ve düşük maliyetle erişmektir. Redis, sıkça erişilen verileri milisaniyeler içinde sunabilir. Örneğin, veritabanı sorgu sonuçlarını önbelleğe almak, oturum bilgilerini tutmak, web sayfalarını önbelleğe almak gibi işlemler bu senaryoya örnektir.

Oturum Depolama (Session Store): Uygulamalarda oturum bilgilerini ve özgün verileri saklamak yaygındır. Redis, oturum verilerini milisaniyeler içinde okuyabilme yeteneği sunar. Bu, kullanıcı profilleri, kimlik bilgileri, kişisel veriler gibi oturum verilerini hızlı bir şekilde işlemek için uygundur. Ayrıca uygulama sunucularını yük dengeleyici arkasında kullanarak oturum sorununu çözebiliriz. Örneğin, birden fazla uygulama sunucusunda oturum verilerini Redis üzerinde saklamak bu soruna çözüm olabilir.

Yayın/Abonelik (Pub/Sub): Redis, 2.0 sürümünden itibaren yayın ve abonelik mesajlaşma modelini destekler. Bu, farklı bileşenlerin birbirleriyle iletişim kurmasını ve olayları işlemesini sağlar. Bu senaryoda Redis, performansı ve sadeliği nedeniyle tercih edilebilir.

Kuyruklar (Queues): Uzun süren veya kaynak yoğunluğu gerektiren işlemler genellikle kuyrukta işlenir. Bu işlemleri arka planda çalıştırmak için Redis kullanılabilir. İş kuyruğu senaryolarında Redis’in hızlı veri erişimi avantajı kullanışlıdır.

Redis, sunduğu çeşitli kullanım senaryoları ile performansı artırabilir, veri erişimini hızlandırabilir ve sistem tasarımını daha etkili hale getirebilir.

DNS Nedir?

DNS (Domain Name System), internet dünyasında alan adlarını (örneğin, example.com gibi) IP adreslerine (örneğin, 192.0.2.1 gibi) çeviren temel bir mekanizmadır. Bu sistemi, çevrimiçi bir rehber gibi düşünebiliriz. Kullanıcılar, web sitelerine erişmek için alan adlarını kullanırken, bilgisayarlar bu istekleri IP adreslerine çevirerek internet protokolü (IP) üzerinden iletişim sağlar.

DNS Çözümleyici Nedir?

DNS çözümleyiciler, IP adreslerini etki alanı adlarıyla eşleştirip istemci cihazlara geri gönderen sunucu türleridir. Bu sunucular, isim-adres çevirisini yönetirler ve bilgisayarlar, belirli bir DNS çözümleyiciyle yapılandırılır. Bu yapılandırma genellikle, kullanıcının internet servis sağlayıcısı (ISS) tarafından veya kurumsal ağlarda ağ yöneticisi tarafından gerçekleştirilir.

ISS çözümleyicisi yerine neden 1.1.1.1 kullanılmalı?

İnternet servis sağlayıcılarının (ISS) DNS çözümleyicilerine tercihen 1.1.1.1 gibi üçüncü taraf DNS çözümleyicilerini kullanma sebepleri, daha iyi güvenlik ve performans sağlamaktır. ISS’ler genellikle güçlü şifreleme veya DNSSEC güvenlik protokolünü desteklemezler. Ayrıca, ISS’lerin DNS çözümleyicileri yavaş olabilir ve aşırı yük altında kalabilir.

1.1.1.1’i öbür DNS servislerinden güvenli ve hızlı yapan nedir?

1.1.1.1, diğer DNS hizmetlerinden daha güvenli ve hızlı olmasını sağlayan bazı özelliklere sahiptir. Kullanıcı verilerini toplamaz, reklamcılara satmaz ve kullanıcı günlüklerini kısa bir süre içinde siler. Ayrıca, sorgu adı minimizasyonu gibi gizliliği artıran özellikleri destekler. Cloudflare ağının gücü, 1.1.1.1’in hızlı DNS sorguları sunmasına katkıda bulunur.

Cloudflare ağının gücü 1.1.1.1’e hızlı DNS sorguları sunma açısından doğal bir avantaj
sağlıyor. 270 Küresel şehri kapsayan Cloudflare ağına entegre olduğu için dünyanın her
yerindeki kullanıcılar 1.1.1.1’den hızlı yanıt alıyor.

CloudFlare WARP Nedir?

Cloudflare WARP, 1.1.1.1 tabanlı bir seçenek olarak kişisel cihazlarınızla internet hizmetleri arasında güvenli bir bağlantı sağlar. WARP, sadece DNS sorgularını değil, aynı zamanda tüm trafiği korur ve trafiği Cloudflare ağı üzerinden yönlendirerek güvenliği artırır.

SSL Nedir?

Güvenli soket katmanı, şifreleme tabanlı bir internet güvenlik protokolüdür. İnternet
iletişiminde gizlilik, kimlik doğrulama ve veri bütünlüğünü sağlama amacıyla geliştirilmiştir.
SSL/TLS sertifikasına sahip web siteleri HTTP yerine HTTPS URL’ine sahiptir.

SSL Nasıl Çalışır?

SSL web üzerinden gelen verileri şifrelediğinden ötürü, bu verilere erişmeye çalışan kişilerin
kırılması neredeyse imkansız olan karışık bir karakter dizisi göreceği anlamına gelir.
SSL iki cihazın da gerçek kişiler olduklarını doğrulama amacıyla “handshake” denen kimlik
doğrulama işlemini başlatır.

not: TLS, birçok kişi hala “SSL şifrelemesi” olarak adlandırsa da, çevrimiçi olarak
uygulanmaya devam eden güncel şifreleme protokolüdür.

SSL/TLS Neden Önemli?

Örneğin, bir tüketici bir alışveriş sitesini ziyaret ettiyse ve kredi kartı numarasını web sitesine
girdiyse, bu kredi kartı numarası internet üzerinden açıkça seyahat eder.
SSL, bu sorunu gidermek ve kullanıcı gizliliğini korumak için oluşturuldu. SSL, bir kullanıcı ile
bir web sunucusu arasında giden tüm verileri şifreleyerek, verileri yakalayan herkesin
yalnızca şifreli bir karakter karmaşasını görebilmesini sağlar. Tüketicinin kredi kartı numarası
artık güvenlidir, yalnızca girdiği alışveriş sitesi tarafından görülebilir.

SSL Sertifikası Nedir?

SSL yalnızca SSL sertifikası olan web siteleri tarafından uygulanabilir (teknik olarak “TLS
sertifikası”). SSL sertifikası, birinin söylediği kişi olduğunu kanıtlayan bir kimlik kartı veya
rozet gibidir. SSL sertifikaları Web üzerinde bir web sitesinin veya uygulamanın sunucusu
tarafından depolanır ve görüntülenir.
Bir SSL sertifikasındaki en önemli bilgilerden biri web sitesinin public key’idir. Public key
şifrelemeyi mümkün kılar. Bir kullanıcının cihazı public keyi görüntüler ve bunu web
sunucusuyla güvenli şifreleme anahtarı oluşturmak için kullanır. Web sunucusunun da gizli
tutulan bir private keyi vardır ve bu key, public key ile şifrelenmiş verilerin şifresini çözer.
Sertifika yetkilileri (CA), SSL sertifikalarının verilmesinden sorumludur.

Bir işletme SSL sertifikasını nasıl alabilir?

Cloudflare, herhangi bir işletme için ücretsiz SSL sertifikaları sunar. Cloudflare tarafından
korunan bir web sitesi, birkaç tıklama ile SSL’i etkinleştirebilir.

LVM Disk Genişletme Nasıl Yapılır?

Mevcut LVM (Logical Volume Manager ) yapınızda bulunan disk yetmezliği durumlarda diskin arttırılması istendiğinde yapmamız gereken bir kaç adım bulunmaktadır. VirtualBox, VMware ESXi, VMware vCenter hangi ortamda yapınız var ise yapmanız gereken en hassas konu LVM ile genişleteceğimiz diskin boyutu 20GB ise 20GB kadar artış yapacaksak 40 yazarak diskin boyutunu genişletmiş oluyoruz. Bu yaptığımız işlem fiziksel katmandır. Bunun yazılımsal katmanı ise işletim sistemi içerisinde gerçekleştireceğiz. Fiziksel olarak ekleme işlemi tamamlandıktan sonra sunucuya erişim sağlıyoruz. Disk yönetimi aracını kullanarak listeliyoruz.

fdisk -l

Listelenme sonucunu aşağıda görebilirsiniz. 20GB dan 40GB a güncellendiğini görüyoruz.

LVM de olan disk hangi grupta ise onu seçiyoruz. Bendeki grup sda olduğu için onu seçeceğim.

fdisk /dev/sda

Birden fazla komut çalıştıracağız. Bu komutların ne iş yaptıklarını aşağıda aktarıyor olacağım.

  • n –> New Partition
  • Partition Number –> Normalde partition seçmek istersek sayısını belirtiyoruz. Ben seçmedim direkt default olan değer gelsin dediğim için “enter” tuşuna basarak geçiyoruz.
  • First Sector –> Birinci sektör belirtmemizi ister bunun amacı ise diskte sektör kavramı olduğu için boşluk alandaki sektörleri kullanmamızı istemiş fakat biz burada belirttiğimiz alanı dikkate alacağımız için default seçtik “enter” tuşuna basarak geçiyoruz.
  • Last Sector –> Verdiğimiz disk alanının hepsini seçeceğimiz için defaulttaki değer hepsini kapsayacak değerdir. Son sektörü default devam ederek “enter” tuşuna basarak geçiyoruz.
  • t –> Oluşturduğumuz Partition dosya formatını seçmek için belirterek seçiyoruz.
  • Partition Number –> Bu kısmı yine default seçiyoruz. 4 te default oluşmuştu “enter” tuşuna basarak geçiyoruz.
  • Partition Type –> 8e seçerek devam ediyoruz. Bu 8e ise LVM olacağını belirtmektir.
  • w –> Disk özelinde sektörleri ayırdığımız için ve ayarlamalar yaptığımız için bunu kaydetmek için tercih ediyoruz.

Burada bir kaç işlem yapıyoruz. Bunları anlatarak canlandıramayabiliriz. Ben ek olarak görsel ekliyorum aynı mantıkta yaptığımı belirtmek için.

Bölüm Numarası (Partition Number) 4 olduğunu görmüştük. fdisk -l yaptığımızda /dev/sda4 olduğunu ve eklediğimiz 20GB olduğunu göreceğiz. Bunun ardından bölme işlemi yaptığımız sda4 ü Fiziksel Hacime (Pysical Volume) eklememiz gerekmektedir. Bu işlemi aşağıdaki komutla gerçekleştireceğiz.

pvcreate /dev/sda4

Çalıştırdığım komutun çıktısı aşağıdadır.

Fiziksel Hacimi (Pysical Volume) ekledikten sonra artık Hacim gruba (Volume Group) eklememiz gerekecektir. Hacim Grubu (Volume Group) aşağıdaki komutla listeliyoruz.

vgdisplay

Çalıştırdığım komutun çıktısı aşağıdadır.

Elimde artık Hacim Grubu (Volume Group) bilgisi olduğuna göre genişletme işlemlerine başlayabiliriz. Fiziksel Grubumuz (Physical Group) sda4 olarak eklemiştik ardından Hacim Grubumuzu (Volume Group) öğrenerek aşağıdaki mantığa göre uyarlıyoruz. Benim Hacim Grubum (Volume Group) ubuntu-vg olduğu için sırayla yazıyoruz.

vgextend ubuntu-vg /dev/sda4

Çalıştırdığım komutun çıktısı aşağıdadır.

Bir önceki vgdisplay komutunu çalıştırdığımızda ve sonucu görmüştük görmüş olduğumuz sonuçtaki Free PE / Size kısma baktığınızda 8.22GiB olarak görüyorsunuz. Hacim Grubu (Volume Group) genişlettikten sonra sonuç çıktısını 29.82GiB olarak göreceksiniz ve aşağıda kontrol edebilirsiniz.

Diskleri listeleyerek tekrardan bi göz geçirerek artık Mantıksal Hacimi (Logical Volume) genişletmemiz gerekir.

df -kh

Çalıştırdığım komutun çıktısı aşağıdadır.

Mountlu olan kısmı sarı ile işaretledim ve orayı aslında genişleteceğiz. Mantıksal Hacimi (Logical Volume) genişletmek için aşağıdaki komutu çalıştırmamız gerekir.

lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv

Çalıştırdığım komut çıktısı aşağıdadır.

Mantıksal Hacimi (Logical Volume) genişletmesi tamamlandıktan sonra artık vgdisplay komutu çalıştırarak Alloc PE /Size kısmında 20GB dan 40 GB a çıktığını görebilirsiniz. df -kh komutu doğru çıktıyı gösterebilmesi için aşağıdaki komutu çalıştırmanız sağlıklı olacaktır.

resize2fs -p /dev/mapper/ubuntu--vg-ubuntu--lv

Çalıştırdığım komut çıktısı aşağıdadır.

İşlemler başarıyla tamamlanmış olup hatasız ilerlenmiştir. Hata olacaktır elbet bu hata çözümüne ve soruna nasıl yaklaşacağımız çok önemli disk işlemleri yaptığımız için dikkat etmemiz gerekir. Çok kritik bir makine üzerinde işlem sağlıyorsak yedek almayı unutmayalım. Diskin eklenmiş olup en sonki halini aşağıda görebilirsiniz.

RabbitMQ Yedeği Nasıl Alınır?

RabbitMQ Mesajları yedekleme işlemi çok hassas konudur. Cluster a geçişlerde veya RabbitMQ sunucusunu taşımamız gerekirse bu tarz işlemler için almamız gereken aksiyonlar vardır.

RabbitMQ’nun verilerini export ve import etmek için iki ana yöntem vardır: Yönetim Arayüzü üzerinden veri düzeyinde yedekleme ve geri yükleme, veya Komut Satırı Arayüzü (CLI) kullanarak dosya düzeyinde yedekleme ve geri yükleme. İşte her iki yöntemin nasıl kullanılacağına dair genel bir açıklama:

Yönetim Arayüzü ile Veri Düzeyinde Export ve Import:

Veri Düzeyinde Yedekleme (Export):

  • RabbitMQ yönetim arayüzüne erişin (varsayılan olarak http://sunucuipsi:15672).
  • “Admin” bölümünden “Advanced” seçeneğine gidin.
  • “Generate a new manifest” seçeneğine tıklayarak yedekleme dosyası oluşturun. Bu, RabbitMQ verilerini yedekleyecek bir yedekleme dosyası oluşturacaktır.

Veri Düzeyinde Geri Yükleme (Import):

  • RabbitMQ yönetim arayüzüne erişin (varsayılan olarak http://sunucuipsi:15672).
  • “Admin” bölümünden “Advanced” seçeneğine gidin.
  • “Browse” düğmesini kullanarak önceden oluşturulan yedekleme dosyasını seçin ve “Upload” düğmesine tıklayarak geri yükleme işlemini başlatın.

Komut Satırı Arayüzü (CLI) ile Dosya Düzeyinde Export ve Import:

Dosya Düzeyinde Yedekleme (Export):

  • RabbitMQ sunucusunun çalıştığı dizini belirleyin (varsayılan olarak /var/lib/rabbitmq gibi).
  • Bu dizinde bulunan tüm verileri düzenli aralıklarla yedekleyin. Bu, mesajları, değişimleri, kuyrukları ve diğer verileri içerir.

Dosya Düzeyinde Geri Yükleme (Import):

  • Önceden yedeklenen dosyaları doğru dizine yerleştirin.
  • RabbitMQ sunucusunu durdurun.
  • Yedeklenen dosyaları geri yüklemek için RabbitMQ sunucusunu tekrar başlatın.

Bunların haricinde farklı bir yöntem daha bulunmaktadır. Bunun için sunucuya erişiyoruz. RabbitMQ admin i indiriyoruz.

curl -o rabbitmqadmin http://127.0.0.1:15672/cli/rabbitmqadmin

İndirdiğimiz rabbitmqadmin e yetkilendirme veriyoruz.

chmod +x rabbitmqadmin

Yetkilendirme işlemleri tamamlandıktan sonra artık export edilmesi gereken sunucuda aşağıdaki komutu çalıştırarak export işlemlerini tamamlıyoruz.

./rabbitmqadmin --username admin --password password export config.json

Export edilen dosyamızı aynı sunucu veya farklı sunucuda import etmek istersek. Aşağıdaki kod çıktısı ile import işlemini tamamlayabiliriz.

./rabbitmqadmin --username admin --password password import config.json

RabbitMQ Nasıl Kurulur?

RabbitMQ, uygulamaların birbirleriyle iletişim kurmasını ve bilgi alışverişinde bulunmasını sağlayan bir mesaj aracısıdır. AMQP mesajlaşma protokolünü uygulayan RabbitMQ, açık kaynaklı bir projedir ve Erlang programlama dili kullanılarak yazılmıştır.

Aşağıdaki rehber, RabbitMQ’nun Ubuntu 22.04 işletim sistemi üzerine nasıl kurulacağını adım adım açıklar:

Gerekli Önkoşullar RabbitMQ’nun sorunsuz çalışabilmesi için sisteminizde en son Erlang sürümünün yüklü olması gerekmektedir. Erlang’ı yüklemek için terminale şu komutları sırasıyla girin:

sudo echo "deb https://packages.erlang-solutions.com/ubuntu $(lsb_release -cs) contrib" | sudo tee /etc/apt/sources.list.d/erlang.list
sudo apt update
sudo apt install erlang

Erlang kurulum yapıldıktan sonra artık erlang paketini kontrol etmek üzere aşağıdaki komutu çalıştırıyoruz. eğer erlanga erişim sağlıyorsanız bir problem gözükmemektedir.

sudo erl

Erlang kurulumu bitt ve artık RabbitMQ kuruluma geçiyoruz. Başta ilk atacağımız adım RabbitMQ reposunu eklememiz olacaktır.

sudo wget -qO - https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.deb.sh | sudo bash

RabbitMQ kurulum için install komutunu çalıştırıyoruz.

sudo apt install -y rabbitmq-server

Kurulum tamamlandı ise artık kurduğumuz RabbitMQ servisini kontrol etmemiz gerekir. Hata var olup olmadığını kontrol sağlamak bizim için önemli olacaktır.

RabbitMQ servisini sunucu kapandığında veya restartlandığında servisimizin aktif hale çalışabilmesi için aşağıdaki komutu çalıştırmamız gerekmektedir.

sudo systemctl enable rabbitmq-server
sudo systemctl status rabbitmq-server

RabbitMQ servisimizin kurulu ve sorunsuz olduğunu görüntülediysek eğer web arayüzünden kullanım gerçekleştireceksek eğer bir kaç işlem yapmamız gerekmektedir. Web arayüzü aktif etmesini ve kullanıcı ile o web arayüzüne erişim sağlayabilmek için kullanıcı ve yetkilendirme vermemiz gerekmektedir.

Web arayüzü aktif hale getirmek için komut çalıştıracağız.

sudo rabbitmq-plugins enable rabbitmq_management

Web arayüzüne erişebilmek için kullanıcı ve şifre tanımlaması gerçekleştiriyoruz.

sudo rabbitmqctl add_user cemkilic pwd123

Oluşturduğumuz cemkilic kullanıcısına yetkilendirmemiz gerekir. Kullanıcı arayüzde işlemler yapabilmesi için biz burada “administrator” yetkisi veriyoruz. Birden fazla kullanıcı oluşturacaksınız ona göre yetkilendirme vermeniz en sağlıklı olacaktır.

sudo rabbitmqctl set_user_tags cemkilic administrator

Kullanıcımıza admin seviyesinde yetkimizi verdik. Bu sunucuda dosya okuma ve yapılandırma yapabilmesi gerekir aşağıdaki komutla bu yetkilendirme işlemlerini gerçekleştireceğiz.

sudo rabbitmqctl set_permissions -p / cemkilic ".*" ".*" ".*"

Sunucu kurulumu, web arayüzden erişebilme ardından kullanıcı rolleri ve yetkilendirme işlemlerini tamamladıktan sonra web arayüzüne giriş yapmamız için en önemli kısmına gelmiş olduk. Sunucun IP bilgisi için aşağıdaki komutu çalıştırmamız gerekir.

hostname -I

RabbitMQ servisimizin çalışma portu 15672 olduğu için yukarıda ip bilgisi çıktısından sonra aşağıdaki bilgileri browser üzerinden erişebiliriz.

192.168.56.153:15672

Karşımıza gelecek sonuç ise web arayüze erişimiz olacaktır. Ben kurulumu belirttiğim adımlarla tamamladım. Sonucu aşağıda gözükecektir.