Takip et

Solana Docker Ortamı: Windows’ta WSL Olmadan Kalıcı Kurulum

Windows işletim sisteminde Solana tabanlı merkeziyetsiz uygulamalar (dApp) geliştirmek, bazen beklenenden daha karmaşık olabilir. Özellikle yerel bir Solana validator düğümü kurmak ve bunu kalıcı bir hale getirmek, geliştiriciler için sıkça karşılaşılan bir meydan okumadır. Bağımlılık yönetimi, farklı projeler için izole ortamlar sağlama ve en önemlisi, her bilgisayar yeniden başlatıldığında tüm ilerlemenin kaybolmamasını sağlamak, bu sürecin kritik adımlarıdır. İşte tam da bu noktada, Windows Alt Sistemi Linux (WSL) kullanmadan, doğrudan Docker Desktop aracılığıyla kalıcı bir Solana geliştirme ortamı oluşturmak, pek çok geliştirici için hayat kurtarıcı bir çözüm sunar. Bu makale, size bu süreci adım adım açıklayarak, tutarlı, güvenilir ve kolayca yönetilebilir bir Solana geliştirme ekosistemi kurmanız için gerekli tüm bilgileri sağlayacaktır. Amacımız, WSL’nin getirdiği olası çakışmalardan veya ek katmanlardan kaçınarak, Windows üzerinde saf bir Docker deneyimi ile Solana dünyasına sorunsuz bir giriş yapmanızı sağlamaktır.

Bu yaklaşım sayesinde, geliştirme süreçlerinizde karşılaşabileceğiniz birçok uyumluluk sorununu ortadan kaldıracak, farklı projeler arasında hızlıca geçiş yapabilecek ve ekipler arası işbirliğini kolaylaştıracaksınız. Docker’ın sunduğu izolasyon yetenekleri, Solana validator’ınızın ve dApp’lerinizin bağımlılıklarının sisteminizdeki diğer yazılımlarla çakışmamasını garantilerken, kalıcı depolama çözümleri sayesinde veri kaybı endişesi olmadan güvenle çalışabileceksiniz. Öyleyse, hiç vakit kaybetmeden bu güçlü ikilinin sunduğu avantajları keşfetmeye başlayalım!

Temel Kavramlar Nelerdir? Solana ve Docker Kısaca

Solana ve Docker, günümüzün yazılım geliştirme dünyasında sıklıkla karşımıza çıkan iki güçlü teknolojidir. Bu iki teknolojiyi bir araya getirmek, blok zinciri geliştirme süreçlerini büyük ölçüde basitleştirebilir ve optimize edebilir. Ancak, her şeyden önce bu iki temel kavramı kısaca anlamamız önemlidir.

Solana Nedir? Solana, yüksek performanslı merkeziyetsiz uygulamalar ve kripto projeleri için tasarlanmış, açık kaynaklı, ölçeklenebilir bir blok zinciri platformudur. Hızlı işlem süreleri, düşük işlem ücretleri ve yüksek işlem hacmi kapasitesi ile bilinir. Solana’nın temel özelliklerinden biri, Proof-of-History (PoH) adı verilen yenilikçi bir konsensüs mekanizmasıdır. Bu mekanizma, ağdaki olayların zamanlamasını doğrulamak için kriptografik bir saat oluşturarak, diğer blok zincirlerinin yaşadığı ölçeklenebilirlik sorunlarının üstesinden gelmeye yardımcı olur. Geliştiriciler, Solana üzerinde Rust programlama dilini kullanarak akıllı sözleşmeler (programlar) yazabilir ve dağıtabilirler. Solana CLI (Command Line Interface) araçları, bu programları derlemek, dağıtmak ve Solana ağıyla etkileşim kurmak için vazgeçilmezdir. Geliştiricilerin çoğu, dApp’lerini canlı ağlara dağıtmadan önce, yerel bir validator düğümünde test etmeyi tercih ederler. Bu, hem maliyetten tasarruf sağlar hem de hataların erken aşamada tespit edilmesine olanak tanır.

Docker Nedir? Docker, uygulamaları ve bağımlılıklarını izole edilmiş, taşınabilir “konteynerler” içinde paketlemeyi sağlayan bir platformdur. Geleneksel sanal makinelerden farklı olarak, Docker konteynerleri işletim sistemini içermez; bunun yerine ana bilgisayarın çekirdeğini paylaşır. Bu durum, konteynerleri çok daha hafif, hızlı ve verimli hale getirir. Docker’ın temel bileşenleri şunlardır:

  • Dockerfile: Bir Docker imajını oluşturmak için kullanılan talimatları içeren metin tabanlı bir dosyadır. Örneğin, bir uygulamayı çalıştırmak için hangi işletim sistemi tabanının kullanılacağını, hangi yazılımların kurulacağını ve hangi komutların çalıştırılacağını belirtir.
  • Docker İmajı: Bir uygulamanın ve onun tüm bağımlılıklarının anlık görüntüsüdür. Çalıştırılabilir bir paket olup, birden çok konteyner oluşturmak için bir şablon görevi görür.
  • Docker Konteyneri: Bir Docker imajının çalışan bir örneğidir. İzole edilmiş bir ortamda çalışır ve ana bilgisayar sisteminden bağımsızdır.
  • Docker Compose: Birden fazla Docker konteynerini içeren uygulamaları tanımlamak ve çalıştırmak için kullanılan bir araçtır. Tek bir YAML dosyası kullanarak tüm hizmetleri, ağları ve depolama birimlerini yapılandırmanıza olanak tanır. Bu, karmaşık uygulamaların kurulumunu ve yönetimini büyük ölçüde basitleştirir.
  • Docker Volumes (Birimler): Konteynerler tarafından oluşturulan ve kullanılan verilerin kalıcı olarak depolanmasını sağlar. Konteynerler silinse bile veriler güvende kalır ve yeni konteynerler tarafından tekrar kullanılabilir. Bu, kalıcı bir Solana validator ortamı kurmak için anahtar bir bileşendir.

Solana ve Docker’ı birleştirmek, özellikle Windows ortamında, geliştirme süreçlerine büyük avantajlar sağlar. Docker, Solana CLI’yı, Rust derleyicisini ve diğer bağımlılıkları içeren tutarlı ve izole bir ortam sunar. Bu, “benim makinemde çalışıyor” sorununu ortadan kaldırır ve geliştirme ortamının her yerde aynı şekilde davranmasını sağlar. Ayrıca, Docker volume’ları sayesinde Solana validator’ınızın blok verileri, işlem geçmişi ve cüzdan bilgileri gibi kritik verileri kalıcı olarak saklayabilir, böylece her başlangıçta sıfırdan başlamak zorunda kalmazsınız. Bu, hem zaman tasarrufu hem de geliştirme verimliliği açısından paha biçilmezdir.

Windows’a Docker Desktop Nasıl Kurulur ve Yapılandırılır?

Windows’ta WSL (Windows Alt Sistemi Linux) kullanmadan, doğrudan Docker Desktop üzerinden bir Solana geliştirme ortamı kurmanın ilk ve en önemli adımı, Docker Desktop’ı doğru şekilde yüklemek ve yapılandırmaktır. Bu bölüm, size bu süreci adım adım açıklayacaktır.

Adım 1: Sistem Gereksinimlerini Kontrol Edin.
Docker Desktop’ın Windows’ta sorunsuz çalışması için bazı temel gereksinimler bulunmaktadır:

  • İşletim Sistemi: Windows 10 64-bit: Home veya Pro sürüm 2004 veya daha yüksek (build 19041 veya daha yüksek). Windows 11 için tüm sürümler desteklenir.
  • Donanım Sanallaştırması: Bilgisayarınızın BIOS/UEFI ayarlarında donanım sanallaştırma özelliğinin (Intel VT-x veya AMD-V) etkinleştirilmiş olması gerekir. Bu, Docker’ın sanal makine (Hyper-V) üzerinde çalışabilmesi için zorunludur.
  • Hyper-V Desteği: Windows 10 Pro, Enterprise veya Education sürümlerinde Hyper-V’nin etkinleştirilmesi gerekir. Windows 10 Home kullanıcıları için Hyper-V yerine alternatif bir sanallaştırma motoru (örneğin eski Docker Desktop versiyonlarında VirtualBox, yeni versiyonlarda otomatikleşmiş Hyper-V Lite) kullanılabilir veya Windows’un kendi sanallaştırma yetenekleri etkinleştirilebilir. Bizim senaryomuzda, WSL’siz bir deneyim için Hyper-V’nin temel alınması önemlidir.
  • RAM: En az 4 GB RAM (8 GB veya daha fazlası şiddetle tavsiye edilir).
  • Disk Alanı: Yeterli boş disk alanı. Docker imajları ve konteyner verileri diskte yer kaplayacaktır.

Adım 2: Docker Desktop’ı İndirin ve Kurun.

  1. Resmi Docker web sitesine gidin: www.docker.com/products/docker-desktop/
  2. “Download for Windows” butonuna tıklayarak kurulum dosyasını indirin.
  3. İndirilen Docker Desktop Installer.exe dosyasını çalıştırın.
  4. Kurulum sihirbazı başladığında, “Use WSL 2 instead of Hyper-V (recommended)” seçeneğinin işaretli OLMADIĞINDAN emin olun. Bizim amacımız WSL kullanmamak olduğu için bu seçeneği devre dışı bırakmalısınız. Eğer bu seçenek görünmüyorsa, Docker Desktop muhtemelen doğrudan Hyper-V’yi kullanacak şekilde yapılandırılacaktır.
  5. Kurulumu tamamlamak için talimatları izleyin. Kurulum sırasında bilgisayarınızın yeniden başlatılması istenebilir.

Adım 3: İlk Çalıştırma ve Ayarları Yapılandırma.

  1. Kurulum tamamlandıktan sonra Docker Desktop uygulamasını başlatın. Başlangıçta biraz zaman alabilir.
  2. Docker başarıyla başladığında, Windows görev çubuğunun sağ alt köşesinde (sistem tepsisinde) mavi bir balina simgesi görmelisiniz. Bu simge, Docker’ın çalıştığını gösterir.
  3. Balina simgesine sağ tıklayın ve “Settings” (Ayarlar) seçeneğini seçin.
  4. Ayarlar menüsünde:

    • Resources (Kaynaklar): Bu bölüm, Docker’ın ana bilgisayarınızdan ne kadar CPU, RAM ve disk alanı kullanacağını belirlemenizi sağlar. Solana validator’ınızın düzgün çalışması için, özellikle RAM ve CPU için yeterli kaynak ayırdığınızdan emin olun. Minimum 4 CPU çekirdeği ve 8 GB RAM önerilir, ancak projenizin büyüklüğüne göre bu değerleri artırmanız gerekebilir.
    • General (Genel): “Use the WSL 2 based engine” seçeneğinin işaretli OLMADIĞINDAN emin olun. Eğer işaretliyse, WSL’siz bir deneyim için işaretini kaldırın ve değişiklikleri uygulamak için Docker’ı yeniden başlatın. (Bazı yeni Docker Desktop sürümlerinde bu seçenek varsayılan olarak WSL2’ye bağlı olabilir ve eski Hyper-V seçeneği daha az belirgin olabilir. Bu durumda, Docker’ın Hyper-V ile çalıştığından emin olmak için Windows Features’da “Hyper-V” özelliğinin etkin olduğundan emin olmalısınız.)
    • Disk Image Location (Disk İmajı Konumu): Docker verilerini (imajlar, volume’lar) sakladığı yerdir. Eğer hızlı bir SSD diskiniz varsa, bu konumu SSD üzerine taşımak performansı önemli ölçüde artıracaktır.
  5. Ayarları kaydettikten sonra, eğer istenirse Docker Desktop’ı yeniden başlatın.

Uzman İpucu: Windows’ta Hyper-V’nin etkin olduğundan emin olmak için ‘Windows Özelliklerini Aç veya Kapat’ (Turn Windows features on or off) kontrol panelini açın ve ‘Hyper-V’ seçeneğinin işaretli olduğunu kontrol edin. Eğer işaretli değilse, işaretleyip bilgisayarınızı yeniden başlatmanız gerekecektir. Bu, Docker Desktop’ın WSL olmadan düzgün çalışması için kritik bir adımdır.

Bu adımları tamamladıktan sonra, Windows sisteminizde Docker Desktop’ı başarıyla kurmuş ve Solana geliştirme için temel altyapıyı hazırlamış olacaksınız. Artık konteynerler oluşturmaya ve Solana validator’ınızı çalıştırmaya hazırsınız!

Kalıcı Solana Docker Ortamı İçin Temel Hazırlıklar ve Dosya Yapısı

Docker Desktop kurulumunu başarıyla tamamladıktan sonra, kalıcı bir Solana geliştirme ortamı oluşturmak için gerekli dosya yapısını ve temel yapılandırmayı hazırlamanız gerekmektedir. Bu adım, hem Solana CLI araçlarını içeren özel bir Docker imajı oluşturmayı hem de Docker Compose kullanarak validator servisini tanımlamayı kapsar.

Adım 1: Proje Dizini Oluşturma.
Öncelikle, tüm projenizin dosyalarını içerecek bir ana dizin oluşturun. Örneğin, C:\SolanaDocker veya D:\Projects\SolanaDev gibi bir konum seçebilirsiniz. Bu dizin içinde, Dockerfile ve docker-compose.yml dosyalarınızı barındıracaksınız.


mkdir C:\SolanaDocker
cd C:\SolanaDocker
    

Adım 2: Solana CLI İçeren Bir Dockerfile Oluşturma.
Solana validator'ı çalıştırmak ve Solana ağıyla etkileşim kurmak için Solana CLI araçlarına ihtiyacımız var. Bu araçları bir Docker imajına dahil etmek, bağımlılıkları izole etmenin ve ortam tutarlılığını sağlamanın en iyi yoludur. C:\SolanaDocker dizini içinde Dockerfile adında bir dosya oluşturun ve içine aşağıdaki içeriği yapıştırın:


# Dockerfile
FROM ubuntu:latest

# Gerekli bağımlılıkları ve araçları yükle
RUN apt-get update && apt-get install -y \
    curl \
    pkg-config \
    build-essential \
    libudev-dev \
    git \
    lsb-release \
    ca-certificates \
    apt-transport-https \
    software-properties-common \
    && rm -rf /var/lib/apt/lists/*

# Rust programlama dilini yükle (Akıllı sözleşme geliştirmek için)
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
ENV PATH="/root/.cargo/bin:${PATH}"

# Solana CLI'yı yükle
# En son stabil sürümü kontrol etmek için: https://docs.solana.com/cli/install-solana-cli
ARG SOLANA_VERSION=v1.18.4
RUN sh -c "$(curl -sSfL https://release.solana.com/${SOLANA_VERSION}/install)"
ENV PATH="/root/.local/share/solana/install/active_release/bin:${PATH}"

# Çalışma dizinini ayarla
WORKDIR /app

# Konteyner başlatıldığında varsayılan komut (sadece versiyonu gösterir)
CMD ["solana", "--version"]
    

Bu Dockerfile, Solana CLI'nın ve Rust'ın konteyner içinde hazır olmasını sağlar. SOLANA_VERSION değişkenini istediğiniz Solana sürümüne göre ayarlayabilirsiniz.

Adım 3: Docker İmajını Oluşturma.
Dockerfile dosyasını kaydettikten sonra, komut istemcisini veya PowerShell'i C:\SolanaDocker dizininde açın ve aşağıdaki komutu çalıştırarak Docker imajını oluşturun:


docker build -t solana_cli_image .
    

Bu komut, geçerli dizindeki Dockerfile'ı kullanarak solana_cli_image etiketli bir Docker imajı oluşturacaktır. Bu işlem, internet bağlantınızın hızına bağlı olarak biraz zaman alabilir.

Adım 4: Docker Compose ile Kalıcı Depolama ve Servis Tanımlama.
Kalıcı bir Solana validator düğümü için docker-compose.yml dosyası oluşturmak, en kritik adımlardan biridir. Bu dosya, validator servisini tanımlayacak, gerekli portları açacak ve en önemlisi, validator verilerini kalıcı olarak saklamak için bir Docker Volume oluşturacaktır. C:\SolanaDocker dizininde docker-compose.yml adında bir dosya oluşturun ve şimdilik temel bir yapılandırma ile başlayalım:


# docker-compose.yml
version: '3.8' # Docker Compose dosya formatının versiyonu

services:
  solana-validator:
    build: . # Dockerfile'ı kullanarak bu servisin imajını oluştur
    container_name: solana-local-validator # Konteyner için kolay hatırlanabilir bir isim
    ports:
      # Solana RPC portu (dApp'ler buradan bağlanır)
      - "8899:8899"
      # Solana Websocket portu (gerçek zamanlı güncellemeler için)
      - "8900:8900"
      # Validator düğümünün diğer düğümlerle iletişim kurduğu gossip portları
      # Bu aralık, validator'ın ihtiyaç duyabileceği tüm portları kapsar.
      # Gerçek kullanımda daha daraltılabilir veya ihtiyaç duyuldukça artırılabilir.
      - "8000-8020:8000-8020/udp"
    
    # Konteyner yeniden başlatıldığında otomatik olarak başlasın
    restart: always 
    
    # Kalıcı depolama için Docker Volume'ları kullan
    volumes:
      # solana_validator_data isimli volume, konteyner içindeki /solana-data dizinine bağlanır.
      # Bu, validator'ın tüm blok verilerini, cüzdanları ve diğer durum bilgilerini kalıcı olarak saklar.
      - solana_validator_data:/solana-data
      # Logları Windows ana bilgisayarınızda görmek isterseniz, bu bir bind mount örneğidir.
      # ./logs dizini, proje kök dizininizdeki "logs" klasörüne işaret eder.
      - ./logs:/solana-data/logs 
    
    # Validator'ı başlatmak için komut
    command:
      - sh
      - -c
      - |
          echo "Starting Solana Test Validator..."
          # solana-test-validator komutunu --log ile log dosyasına yönlendiriyoruz
          # --bind-address 0.0.0.0, konteyner dışından erişilebilir olmasını sağlar
          # --rpc-port 8899 ve --websocket-port 8900 varsayılan portlardır
          # --validator-target-slot değeri, validator'ın ne kadar süre/slot çalışacağını belirler. 0 sonsuzdur.
          solana-test-validator \
            --bind-address 0.0.0.0 \
            --log /solana-data/logs/validator.log \
            --validator-target-slot 0 \
            --reset # Her başlangıçta sıfırlamak isterseniz bunu kullanın, aksi takdirde kaldırın.
    
# Docker Volume'larını tanımla
volumes:
  solana_validator_data:
    name: solana_validator_data # Volume için belirgin bir isim

    

Bu docker-compose.yml dosyası, solana-local-validator adında bir konteyner oluşturur. Bu konteyner, daha önce oluşturduğumuz solana_cli_image imajını kullanır. En önemlisi, solana_validator_data adlı bir Docker Volume'u kullanarak Solana validator verilerini kalıcı hale getirir. Bu sayede, konteyneri durdurup yeniden başlattığınızda bile validator'ınız en son durumdan devam edecektir (eğer reset bayrağını kullanmazsanız). Ayrıca, logs klasörünü bind mount ederek, validator'ın loglarını doğrudan Windows ana bilgisayarınızdaki proje dizininizde takip edebilirsiniz. Bu yapı, size esnek ve kalıcı bir yerel Solana geliştirme ortamı sağlar. Artık validator'ınızı çalıştırmaya hazırsınız!

Solana Validator Düğümü Docker Konteynerinde Nasıl Çalıştırılır?

Önceki bölümde, kalıcı bir Solana Docker ortamı için temel dosyaları ve yapılandırmayı hazırlamıştık. Şimdi ise bu yapılandırmayı kullanarak yerel bir Solana validator düğümünü Docker konteynerinde nasıl başlatacağımızı, yöneteceğimizi ve doğrulayacağımızı adım adım inceleyelim.

Adım 1: Solana Validator'ı Başlatma.
docker-compose.yml dosyanızın bulunduğu C:\SolanaDocker dizininde bir komut istemcisi veya PowerShell açın. Validator'ı arka planda (detached mode) başlatmak için aşağıdaki komutu kullanın:


docker-compose up -d
    

Bu komutun çalıştırılmasıyla Docker Compose:

  1. Eğer solana_cli_image imajı henüz oluşturulmadıysa (veya docker-compose.yml dosyasında build: . kullanıldıysa), Dockerfile'ı kullanarak imajı oluşturacaktır.
  2. solana_validator_data adında bir Docker Volume oluşturacak veya mevcutsa kullanacaktır.
  3. solana-local-validator adında bir konteyner başlatacak ve içinde Solana test validator'ını çalıştıracaktır.
  4. Belirttiğimiz portları (8899, 8900, 8000-8020/udp) ana bilgisayarınıza eşleyecektir.

İlk çalıştırmada, imaj oluşturma ve validator'ın başlaması biraz zaman alabilir. Tüm işlemler tamamlandığında, komut istemcisinde herhangi bir hata görmemelisiniz.

Adım 2: Validator Durumunu Kontrol Etme ve Logları İzleme.
Validator'ın sorunsuz çalıştığından emin olmak için logları kontrol etmek önemlidir.


docker logs -f solana-local-validator
    

Bu komut, solana-local-validator konteynerinin loglarını gerçek zamanlı olarak gösterir (-f bayrağı, "follow" anlamına gelir). Loglarda, validator'ın başladığını, bloklar ürettiğini ve genel durum bilgilerini görmelisiniz. Özellikle "starting validator..." ve "RPC listening on..." gibi mesajlar, validator'ın düzgün çalıştığını gösterir.

Alternatif olarak, logları Windows ana bilgisayarınızdaki C:\SolanaDocker\logs klasöründeki validator.log dosyasından da kontrol edebilirsiniz. Bu, docker-compose.yml dosyasındaki bind mount sayesinde mümkündür.

Adım 3: Solana CLI ile Bağlantıyı Doğrulama.
Validator'ınız çalışırken, Solana CLI'yi kullanarak ona bağlanabilir ve durumunu kontrol edebilirsiniz. Bunun için, ana bilgisayarınızda (Windows) Solana CLI'nin kurulu olmasına gerek yoktur, çünkü tüm etkileşimleri konteyner üzerinden gerçekleştirebiliriz.


# Konteyner içinde Solana CLI kullanarak RPC URL'ini yerel validator'a ayarla
docker exec solana-local-validator solana config set --url http://solana-validator:8899

# Konteyner içinde bakiye kontrolü yap (varsayılan test cüzdanı için)
docker exec solana-local-validator solana balance
    

solana config set --url http://solana-validator:8899 komutu, konteyner içindeki Solana CLI'ya yerel validator'ın RPC adresini bildirir. http://solana-validator:8899 yerine http://localhost:8899 de kullanabilirsiniz, ancak konteyner içinde diğer servislerin bu validator'a bağlanması durumunda servis adını kullanmak daha iyidir. Eğer her şey yolundaysa, solana balance komutu bir miktar SOL bakiyesi gösterecektir (yerel test validator'ı başlangıçta bazı hesaplara test SOL'ü atar).

Adım 4: Validatörü Durdurma ve Kaldırma.
Geliştirme işiniz bittiğinde veya ortamı sıfırlamak istediğinizde, validator'ı durdurabilir ve konteyneri kaldırabilirsiniz:


# Validator'ı durdurma (konteyner durur ama veriler kalır)
docker-compose stop

# Validator'ı tamamen kaldırma (konteyner silinir, veriler kalır)
docker-compose down

# Validator'ı ve onunla ilişkili verileri (volume) tamamen kaldırma (Sıfırdan başlamak için ideal)
docker-compose down -v
    

Özellikle docker-compose down -v komutu, solana_validator_data volume'unu da silerek, bir sonraki başlangıçta tertemiz bir validator ortamı kurmanızı sağlar. Bu, tekrarlanabilir testler için oldukça kullanışlıdır.

Vaka Çalışması 1: Yeni Token Standardı Geliştirme.
Bir ekip, Solana üzerinde yeni bir token standardı geliştirmek istiyor. Bu süreçte, tokenin mint edilmesi, transfer edilmesi ve yakılması gibi temel operasyonları defalarca test etmeleri gerekiyor. Yerel bir Docker tabanlı Solana validator ortamı sayesinde:

  • Geliştiriciler, her test senaryosunu hızlıca dağıtabilir ve validator'ın sıfır maliyetle anında tepki vermesini sağlayabilir.
  • Her test turundan sonra docker-compose down -v komutunu kullanarak ortamı tamamen sıfırlayabilir ve tutarlı bir başlangıç noktası elde edebilirler. Bu, önceki testlerin kalıntılarının sonraki testleri etkilemesini engeller.
  • Farklı ekip üyeleri, aynı Dockerfile ve docker-compose.yml dosyalarını kullanarak kendi Windows makinelerinde aynı ortamı kurabilir, böylece "benim makinemde çalışıyor" sorununu ortadan kaldırır.

Bu senaryoda, kalıcı Docker ortamı sayesinde geliştirme döngüsü hızlanır, hatalar daha verimli bir şekilde tespit edilir ve ekip içi işbirliği güçlenir.

DApp Geliştirme Ortamını Entegre Etmek ve Akıllı Sözleşmelerle Çalışmak

Yerel Solana validator'ınız Docker üzerinde sorunsuz bir şekilde çalışırken, şimdi sıra merkeziyetsiz uygulamanız (dApp) için geliştirme ortamını bu yapıya entegre etmeye geliyor. Bu bölüm, akıllı sözleşmelerinizi nasıl derleyip dağıtacağınızı ve dApp istemcinizin yerel validator ile nasıl iletişim kuracağını ele alacaktır.

Adım 1: DApp İstemcisini Yerel Validatöre Bağlama.
DApp'inizin ön yüzü (frontend) veya akıllı sözleşme derleme/dağıtım araçları (örneğin Anchor framework), Solana validator'ınızın RPC portuna bağlanmalıdır. Docker konteyneri içinde çalışan validator'a, Windows ana bilgisayarınızdan http://localhost:8899 adresi üzerinden erişebilirsiniz. Bu, web tabanlı bir dApp ön yüzü için veya terminalinizden solana komutlarını çalıştırırken kullanacağınız adrestir.


# Windows terminalinizden Solana CLI'yi yapılandırma (eğer kuruluysa)
solana config set --url http://localhost:8899
solana config get # Doğrulama
    

Eğer dApp istemciniz de bir Docker konteyneri içinde çalışacaksa (ki bu daha tutarlı bir yaklaşım olabilir), docker-compose.yml dosyasındaki servis adları üzerinden iletişim kurabilirler. Örneğin, solana-validator adındaki servisimize diğer konteynerler http://solana-validator:8899 adresinden erişebilir.

Adım 2: Akıllı Sözleşme Geliştirme ve Derleme.
Solana akıllı sözleşmeleri genellikle Rust dilinde yazılır ve Anchor framework'ü, geliştirme sürecini büyük ölçüde hızlandırır.

  1. Yeni Bir Akıllı Sözleşme Projesi Oluşturma: Eğer yeni bir proje başlatıyorsanız, C:\SolanaDocker dizini içinde veya yanına yeni bir klasör oluşturun (örn. my-dapp).

    
    mkdir C:\SolanaDocker\my-dapp
    cd C:\SolanaDocker\my-dapp
    anchor init my-program # Eğer Anchor kuruluysa
    # veya manuel Rust projesi: cargo new --lib program-name
            

  2. Akıllı Sözleşmeyi Derleme: Akıllı sözleşmenizi derlemek için, Solana CLI'nın veya Anchor'ın kurulu olduğu bir ortama ihtiyacınız vardır. Bunu, daha önce oluşturduğumuz solana_cli_image konteyneri içinde yapabiliriz.

    
    # Konteyner içinde derleme (my-dapp klasörünüzü konteynere bind mount ederek)
    # İlk olarak my-dapp klasörünü ana docker-compose.yml dizinine taşıyın
    # Sonra docker-compose.yml dosyanızı güncelleyin veya geçici olarak bir konteyner çalıştırın:
    docker run --rm -it -v C:/SolanaDocker/my-dapp:/app solana_cli_image bash -c "cd /app && cargo build-bpf"
    # Veya Anchor kullanıyorsanız:
    docker run --rm -it -v C:/SolanaDocker/my-dapp:/app solana_cli_image bash -c "cd /app && anchor build"
            

    Bu komutlar, akıllı sözleşmenizi derleyerek target/deploy dizinine .so uzantılı bir dosya yerleştirecektir.

Adım 3: Akıllı Sözleşmeyi Yerel Validatöre Dağıtma.
Derlenmiş akıllı sözleşmenizi yerel validator'ınıza dağıtabilirsiniz. Bu işlem de yine Solana CLI aracılığıyla yapılır.


# Akıllı sözleşmeyi dağıtma (my-dapp klasörünüzü konteynere bind mount ettiyseniz)
docker run --rm -it -v C:/SolanaDocker/my-dapp:/app solana_cli_image bash -c "solana program deploy /app/target/deploy/my_program.so --url http://solana-validator:8899"
    

Burada, konteyner içinde solana program deploy komutu ile akıllı sözleşmenizi yerel validator'ınıza yüklüyoruz. --url bayrağı, hangi validator'a dağıtım yapılacağını belirtir. Dağıtım başarılı olursa, konsolda programınızın yeni Program ID'sini göreceksiniz.

Adım 4: Entegre DApp Geliştirici Konteyneri (İsteğe Bağlı ama Önerilir).
DApp istemcinizi de bir Docker konteyneri içinde çalıştırmak, daha tutarlı ve taşınabilir bir geliştirme ortamı sağlar. docker-compose.yml dosyanıza ek bir servis ekleyerek bunu yapabilirsiniz:


# ... önceki solana-validator servisi ...
  
  dapp-client:
    build:
      context: ./dapp-client # dApp istemcinizin Dockerfile'ının bulunduğu klasör
      dockerfile: Dockerfile_DApp # İstemci için özel Dockerfile adı (isteğe bağlı)
    container_name: solana-dapp-client
    ports:
      - "3000:3000" # Örnek React/Next.js uygulaması için port
    volumes:
      - ./my-dapp:/app # dApp kodunuzu konteynere bağlayın
    environment:
      # dApp'in konteyner içindeki validator'a bağlanması için ortam değişkeni
      - REACT_APP_SOLANA_RPC_URL=http://solana-validator:8899 
    depends_on:
      - solana-validator # Validator'ın istemciden önce başlamasını sağlar
    command: npm start # İstemci uygulamasını başlatma komutu (örneğin bir React uygulaması)

    

Bu dapp-client servisi, kendi Dockerfile'ı (genellikle Node.js veya başka bir dil için) ile oluşturulur ve my-dapp klasörünüzü bir bind mount olarak içerir. environment değişkeni sayesinde, dApp'iniz solana-validator servis adını kullanarak yerel validator'a kolayca bağlanabilir. depends_on ifadesi, dapp-client servisi başlamadan önce solana-validator servisinin çalışır durumda olmasını garantiler.

Vaka Çalışması 2: Oyun İçi NFT ve Mikro İşlemler Testi.
Bir oyun geliştiricisi, Solana üzerinde oyun içi NFT'ler (karakter eşyaları, kozmetikler) ve mikro işlem mekaniği (oyun içi para birimi transferleri) geliştirmektedir. Bu süreçte, akıllı sözleşmelerinin güvenilirliğini ve performansını ana ağa dağıtmadan önce kapsamlı bir şekilde test etmek isterler. Entegre Docker ortamı sayesinde:

  • Geliştirici, oyun istemcisini bir Docker konteynerinde, akıllı sözleşmeleri ve yerel validator'ı da diğer konteynerlerde çalıştırabilir.
  • Her bir NFT basma, transfer veya yakma işlemini defalarca simüle edebilir, farklı senaryoları (örneğin, bir kullanıcının bakiyesi yetersiz olduğunda ne olacağı) güvenle test edebilir.
  • Yeni akıllı sözleşme versiyonlarını yerel validator üzerinde dağıttıkça, oyun istemcisinin bu güncellemelerle nasıl etkileşime girdiğini gerçek zamanlı olarak gözlemleyebilir.
  • Geliştirme sürecinin her aşamasında tutarlı ve izole bir ortam sağlayarak, dış faktörlerin (ağ gecikmeleri, ana ağdaki değişiklikler) test sonuçlarını etkilemesini önleyebilir.

Bu entegrasyon, karmaşık dApp'lerin geliştirilmesini kolaylaştırır, test süreçlerini hızlandırır ve hataların üretim ortamına ulaşmadan önce tespit edilmesine olanak tanır.

Performans İpuçları, İleri Düzey Konfigürasyonlar ve En İyi Uygulamalar

Windows üzerinde WSL olmadan kalıcı bir Solana Docker ortamı kurmak, geliştirme süreçlerinizi önemli ölçüde hızlandırabilir. Ancak, bu ortamdan en iyi performansı almak ve daha karmaşık senaryolar için uygun şekilde yapılandırmak için bazı ileri düzey ipuçları ve en iyi uygulamaları bilmek faydalıdır.

1. Docker Desktop Kaynak Optimizasyonu:
Docker Desktop, Windows üzerinde bir sanal makine (Hyper-V veya WSL 2 backend) çalıştırdığı için, bu sanal makineye ayrılan kaynaklar doğrudan Solana validator'ınızın performansını etkiler.

  • CPU ve RAM: Docker Desktop ayarlarınızdan (sistem tepsisindeki balina simgesi -> Settings -> Resources) sanal makineye daha fazla CPU çekirdeği ve RAM ayırın. Solana validator'ı özellikle yoğun disk I/O ve işlem gücü gerektiren bir uygulamadır. En az 4 CPU çekirdeği ve 8-16 GB RAM ayırmanız, akıcı bir geliştirme deneyimi için kritik öneme sahiptir.
  • Disk Alanı: Docker imajları ve volume'ları, ana bilgisayarınızdaki bir sanal disk dosyasında saklanır. Bu dosyanın (genellikle vhdx uzantılı) hızlı bir SSD sürücüsünde bulunduğundan emin olun. HDD üzerindeki bir Docker diski, Solana validator'ın performansını büyük ölçüde düşürecektir. Disk imajının boyutunu da ihtiyacınıza göre ayarlayabilirsiniz.
  • Gereksiz Konteynerleri Kapatın: Kullanmadığınız Docker konteynerlerini durdurmak veya kaldırmak, sistem kaynaklarını serbest bırakarak çalışan uygulamalarınızın daha iyi performans göstermesini sağlar.

2. Volume Türleri ve Kullanım Senaryoları:
Docker'da veri kalıcılığı için iki ana volume türü vardır:

  • Named Volumes (Adlandırılmış Volume'lar): solana_validator_data örneğimizde olduğu gibi Docker tarafından yönetilen volume'lardır. Genellikle daha iyi performans ve veri güvenliği sunarlar çünkü Docker, volume'un disk üzerindeki konumunu ve erişimini optimize edebilir. Özellikle Solana validator'ının blok verileri gibi kritik ve sıkça güncellenen veriler için named volume'lar tercih edilmelidir.
  • Bind Mounts (Bağlama Noktaları): Ana bilgisayarınızdaki belirli bir dizini doğrudan konteyner içindeki bir dizine bağlarlar. logs klasörümüzü bu şekilde bağlamıştık. Geliştirme sırasında kod dosyaları, konfigürasyon dosyaları veya loglar gibi, ana bilgisayarınızdan doğrudan erişmek ve düzenlemek istediğiniz veriler için idealdir. Performans açısından named volume'lara göre biraz daha yavaş olabilirler, ancak geliştirme esnekliği sunarlar.

Uzman İpucu: Solana validator'ın disk I/O performansı kritiktir. Docker Desktop ayarlarınızda sanal diskinizin (Disk Image Location) hızlı bir SSD üzerinde konumlandığından emin olun ve mümkünse Named Volumes kullanın. Bu, veritabanı işlemlerinde gözle görülür bir hız artışı sağlar ve validator'ın daha kararlı çalışmasına yardımcı olur.

3. Ağ Yapılandırması:
docker-compose.yml dosyanızda özel ağlar tanımlamak, karmaşık dApp yapılandırmalarında konteynerler arası iletişimi daha güvenli ve düzenli hale getirebilir.


version: '3.8'
services:
  solana-validator:
    # ...
    networks:
      - solana_dev_network

  dapp-client:
    # ...
    networks:
      - solana_dev_network

networks:
  solana_dev_network:
    driver: bridge # Varsayılan köprü ağı
    

Bu, solana_dev_network adında özel bir ağ oluşturur ve solana-validator ile dapp-client hizmetlerinin bu ağ içinde birbirleriyle isimleriyle iletişim kurmasını sağlar.

4. Günlük Yönetimi ve Gözlemleme:

docker logs -f [konteyner_adı] komutu, gerçek zamanlı log takibi için vazgeçilmezdir. Ayrıca, logları solana-data/logs/validator.log gibi kalıcı bir volume içindeki bir dosyaya yönlendirerek, konteyner yeniden başlatılsa bile log geçmişinizi koruyabilirsiniz. Bu, sorun giderme ve validator'ın davranışını anlama açısından çok değerlidir.

5. Otomasyon ve Geliştirme İş Akışı:

Tekrarlayan Docker komutlarını (örneğin, docker-compose up -d, docker-compose down -v, akıllı sözleşme dağıtımı) otomatikleştirmek için basit .bat veya PowerShell scriptleri yazabilirsiniz. Bu scriptler, geliştirme ortamınızı tek bir komutla başlatmanızı veya sıfırlamanızı sağlar, geliştirme döngüsünü daha da hızlandırır.

6. Mobil Uyumlu HTML için En İyi Uygulamalar (DApp Geliştiricileri İçin):

Makalemiz bir Docker kurulumu üzerine olsa da, geliştirdiğiniz Solana dApp'lerinin kullanıcı arayüzlerinin (UI) mobil cihazlarda da iyi görünmesi ve işlev görmesi önemlidir. Kullanıcılarınızın büyük bir kısmı dApp'lerinize mobil cihazlardan erişebilir. Bu nedenle, geliştirdiğiniz web tabanlı dApp'lerde responsive (duyarlı) tasarım prensiplerini uygulamak kritik önem taşır.

  • Viewport Meta Tag: Her HTML sayfanızın bölümüne aşağıdaki meta etiketini ekleyin:

    
    
            


    Bu, tarayıcıya sayfanın cihazın genişliğine göre ölçeklenmesini söyler.

  • CSS Media Queries: Farklı ekran boyutları için farklı stiller tanımlamak için CSS media query'lerini kullanın. Örneğin:

    
    
            

    Bu örnek, konteyner genişliğini ve dolguyu farklı ekran boyutlarına göre ayarlayarak dApp'inizin farklı cihazlarda daha okunabilir ve kullanılabilir olmasını sağlar.

  • Esnek Birimler ve Görüntüler: px yerine %, em, rem, vw, vh gibi esnek birimler kullanın. Görüntülerin de max-width: 100%; height: auto; stiliyle responsive olduğundan emin olun.

Bu en iyi uygulamaları takip ederek, hem Solana geliştirme ortamınızın performansını optimize edebilir hem de dApp'lerinizin geniş bir kullanıcı kitlesine ulaşmasını sağlayabilirsiniz.

Sonuç: Windows'ta Kalıcı Solana Geliştirmenin Avantajları ve Gelecek

Bu kapsamlı makale boyunca, Windows işletim sisteminde, WSL (Windows Alt Sistemi Linux) bağımlılığı olmaksızın, Docker Desktop kullanarak nasıl kalıcı bir Solana geliştirme ortamı kuracağınızı adım adım inceledik. Başlangıçta Docker Desktop'ın kurulumundan, Solana CLI içeren özel bir Docker imajının oluşturulmasına, yerel bir Solana validator düğümünün kalıcı veri depolama ile nasıl çalıştırılacağına ve son olarak dApp'lerinizin bu ortama nasıl entegre edileceğine kadar tüm süreci detaylandırdık. Performans ipuçları, ileri düzey yapılandırmalar ve dApp'leriniz için mobil uyumlu tasarım yaklaşımları gibi konulara da değinerek, geliştirme deneyiminizi optimize etmenize yardımcı olacak değerli bilgiler sunduk.

Kurduğumuz bu ortamın sunduğu en önemli avantajlar şunlardır:

  • İzolasyon ve Tutarlılık: Docker konteynerleri, Solana validator'ınızı ve dApp'inizin bağımlılıklarını sisteminizdeki diğer yazılımlardan izole eder. Bu, "benim makinemde çalışıyor" sorununu ortadan kaldırır ve ekibinizdeki herkesin aynı, tutarlı geliştirme ortamında çalışmasını sağlar.
  • Kalıcılık: Docker Volume'ları sayesinde, yerel validator'ınızın blok verileri, hesap bilgileri ve diğer kritik durumları, konteynerler durdurulsa veya yeniden başlatılsa bile güvende kalır. Bu, her başlangıçta sıfırdan başlamak zorunda kalma yükünü ortadan kaldırır.
  • Kolay Kurulum ve Yönetim: docker-compose.yml dosyası, tüm Solana geliştirme ortamınızı tek bir dosya içinde tanımlamanıza olanak tanır. Tek bir komutla (docker-compose up -d) tüm ortamı başlatabilir, durdurabilir veya sıfırlayabilirsiniz.
  • Esneklik ve Taşınabilirlik: Docker imajları ve Compose dosyaları, geliştirme ortamınızı farklı Windows makineleri arasında kolayca taşımanızı ve paylaşmanızı sağlar. Yeni bir geliştirici ekibe katıldığında, ortamı kurması sadece birkaç komutla mümkün olur.
  • WSL Bağımsızlığı: Özellikle Hyper-V'ye alışkın olan veya çeşitli nedenlerle WSL kullanmak istemeyen Windows kullanıcıları için temiz ve doğrudan bir çözüm sunulmuştur.

Solana ekosistemi hızla büyümeye devam ederken, yerel ve sağlam bir geliştirme ortamına sahip olmak, projelerinizi hızlı ve güvenilir bir şekilde hayata geçirmek için temel bir gerekliliktir. Bu kılavuzla edindiğiniz bilgiler ve oluşturduğunuz altyapı, sizi Solana üzerinde yenilikçi ve güçlü merkeziyetsiz uygulamalar geliştirmeye bir adım daha yaklaştıracaktır. Gelecekte, Solana'nın sürekli gelişen araçları ve altyapısıyla birlikte bu Docker tabanlı ortamlar, geliştiriciler için vazgeçilmez bir araç olmaya devam edecektir. Şimdiden başarılar dileriz!

Sıkça Sorulan Sorular

1. Neden bu kurulumda WSL kullanmıyoruz?
Bazı kullanıcılar, Hyper-V tabanlı sanallaştırmayı tercih edebilir, mevcut WSL kurulumları ile çakışma yaşamak istemeyebilir veya sadece tamamen Windows tabanlı, WSL'den bağımsız bir çözüm arıyor olabilir. Docker Desktop'ın Hyper-V backend'i de oldukça kararlı ve güçlü bir alternatif sunar. Bu makale, bu özel kullanıcı senaryosuna odaklanmaktadır.
2. Solana validator verileri nereye kaydediliyor ve kalıcı mı?
Evet, veriler kalıcı olarak kaydedilir. docker-compose.yml dosyasında tanımladığımız solana_validator_data adındaki Docker Volume'una kaydedilir. Bu volume, Docker Desktop tarafından yönetilen sanal disk üzerinde bulunur ve konteyner silinse bile validator'ın blok verileri, işlem geçmişi ve cüzdan bilgileri gibi verileri kalıcı olarak saklar.
3. Performans sorunları yaşarsam ne yapmalıyım?
Docker Desktop ayarlarına giderek sanal makineye (Hyper-V VM) ayrılan CPU çekirdeği ve RAM miktarını artırabilirsiniz. Ayrıca, validator'ın loglarını ve veri dizinlerini mümkün olduğunca hızlı bir SSD üzerinde barındırmak performansı önemli ölçüde artıracaktır. docker-compose.yml dosyasındaki command bölümüne --no-bpf-jit gibi performans artırıcı bayraklar eklemek de bazen yardımcı olabilir.
4. Farklı Solana ağlarına (devnet, testnet) nasıl bağlanabilirim?
Yerel validator'ı çalıştırırken solana-test-validator yerine, konteyner içinde veya host makinenizden direkt olarak farklı ağlara bağlanabilirsiniz. Örneğin:


# Konteyner içinden devnet'e bağlanmak için
docker exec solana-local-validator solana config set --url https://api.devnet.solana.com

# Windows hostunuzdan devnet'e bağlanmak için (Solana CLI kuruluysa)
solana config set --url https://api.devnet.solana.com
      


Geliştirme için genellikle yerel validator tercih edilir, ancak testnet/devnet bağlantısı gerektiğinde bu yöntem kullanılabilir.

5. Akıllı sözleşmelerimi güncellediğimde ne yapmam gerekiyor?
Akıllı sözleşmenizi her güncellediğinizde ve tekrar derlediğinizde (cargo build-bpf veya anchor build), derlenmiş .so dosyasını yerel validator üzerinde yeniden dağıtmanız gerekir. Bunun için solana program deploy target/deploy/my_program.so --url http://localhost:8899 komutunu kullanabilirsiniz (host'tan veya konteyner içinden RPC URL'ini doğru belirterek). solana-test-validator çalışırken bu işlem otomatik olarak yeni program ID'sini kullanır veya mevcut programı günceller.

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.