Takip et

Linux Geliştirme Günlüğüm: WSL’den Buluta İlk Adımlar (Gün 1-5)

Merhaba teknoloji meraklıları ve yazılım geliştiricileri! Bu makalede, Windows Subsystem for Linux (WSL) ile başlayan ve bulut platformlarında uygulam…

Linux Geliştirme Günlüğüm: WSL’den Buluta İlk Adımlar (Gün 1-5)

Merhaba teknoloji meraklıları ve yazılım geliştiricileri! Bu makalede, Windows Subsystem for Linux (WSL) ile başlayan ve bulut platformlarında uygulama dağıtımına uzanan 5 günlük bir geliştirme serüvenimi sizlerle paylaşacağım. Modern yazılım geliştirme dünyasında Linux tabanlı ortamların ve bulut teknolojilerinin önemi yadsınamaz. Bu yolculuk, hem kişisel gelişimime katkıda bulundu hem de karmaşık görünen süreçleri adım adım basitleştirmeme yardımcı oldu. Eğer siz de WSL’den buluta geçişin nasıl bir deneyim olduğunu merak ediyorsanız veya kendi geliştirme ortamınızı kurma arayışındaysanız, doğru yerdesiniz. Hazırlanın, çünkü bu devlog, pratik bilgiler ve gerçek dünya deneyimleriyle dolu olacak.

Gün 1: WSL ile Tanışma ve Temelleri Atma

Geliştirme yolculuğumun ilk durağı, Windows işletim sistemi üzerinde tam teşekküllü bir Linux deneyimi sunan WSL oldu. Windows kullanıcısı olarak, Linux’un sunduğu esnekliği ve güçlü araçları kaybetmek istemiyordum. WSL, bu iki dünyanın en iyi özelliklerini bir araya getirerek benim için ideal bir başlangıç noktası sundu.

WSL Nedir ve Neden Tercih Ettim?

WSL (Windows Subsystem for Linux), Microsoft tarafından geliştirilen, Windows 10 ve sonrası işletim sistemlerinde Linux dağıtımlarını çalıştırmanıza olanak tanıyan bir uyumluluk katmanıdır. Geleneksel sanal makinelerden farklı olarak, WSL çok daha hafif ve hızlıdır çünkü tam bir sanallaştırma katmanı yerine, Linux çekirdeği çağrılarını Windows çekirdeği çağrılarına çevirir. Benim için WSL’i tercih etmemin başlıca nedenleri şunlardı:

  • Performans: Sanal makinelere kıyasla daha hızlı dosya sistemi erişimi ve genel performans.
  • Entegrasyon: Windows dosya sistemine kolay erişim ve VS Code gibi araçlarla sorunsuz entegrasyon.
  • Linux Ortamı: Linux’a özgü araçları, komutları ve geliştirme ortamlarını doğrudan Windows üzerinden kullanabilme.

Kurulum Süreci ve İlk Adımlar

WSL kurulumu oldukça basitti. Yönetici olarak açtığım PowerShell terminaline tek bir komut yazarak Ubuntu dağıtımını kurdum:

wsl --install -d Ubuntu

Bu komut, WSL'i etkinleştirdi ve varsayılan olarak Ubuntu dağıtımını kurdu. Kurulum tamamlandıktan sonra bir kullanıcı adı ve parola belirledim. Artık Windows Başlat menüsünden "Ubuntu" yazarak Linux terminalime erişebiliyordum. İlk olarak sistem güncellemelerini yaparak başladım:

sudo apt update
sudo apt upgrade

Temel Linux Komutları ve Dosya Sistemi

Linux ortamına alışmak için temel komutları tekrar gözden geçirdim. Dosya ve dizin işlemleri, izinler, paket yönetimi gibi konulara odaklandım. Özellikle Windows dosya sistemine erişim konusunda WSL'in sunduğu kolaylık dikkat çekiciydi. Windows sürücülerine /mnt/c, /mnt/d gibi yollardan erişebiliyordum. İşte birkaç temel komut:

  • ls -la: Dizin içeriğini detaylı listeleme
  • cd /mnt/c/Users/KullaniciAdi/Projeler: Windows dizinine geçiş
  • mkdir yeni_proje: Yeni bir dizin oluşturma
  • chmod +x script.sh: Betiğe çalıştırma izni verme

Gün 2: Geliştirme Ortamını Kurma ve İlk Projeler

WSL ortamım hazır olduğuna göre, artık geliştirme araçlarımı kurma ve ilk projelerimi hayata geçirme zamanı gelmişti. Bu gün, verimli bir çalışma ortamı oluşturmak için gerekli yazılımları yükledim ve VS Code ile entegrasyonu sağladım.

Gerekli Araçların Kurulumu

Modern web geliştirme için olmazsa olmaz bazı araçlar var. Ben Node.js tabanlı bir geliştirici olduğum için öncelikle Node.js ve npm'i kurdum. Python veya Go gibi farklı dillerle çalışanlar da kendi tercihlerine göre kurulum yapabilirler. Kurulum için genellikle dağıtımın paket yöneticisi kullanılır (Ubuntu için apt):

# Node.js ve npm kurulumu
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs

# Git kurulumu (genellikle kurulu gelir ama kontrol etmekte fayda var)
sudo apt install git

# Python (genellikle kurulu gelir)
sudo apt install python3 python3-pip

Ayrıca, kod düzenleyici olarak Visual Studio Code'u tercih ettim. VS Code'un WSL Remote Development eklentisi, Windows üzerinden doğrudan Linux ortamındaki dosyaları düzenlememe ve terminali kullanmama olanak tanıdı.

VS Code Entegrasyonu ve Uzak Geliştirme

VS Code'u Windows'a kurduktan sonra, "Remote - WSL" eklentisini yükledim. Bu eklenti sayesinde, VS Code'u doğrudan WSL ortamıma bağlayabiliyordum. WSL terminalinde bir dizinde iken code . komutunu çalıştırdığımda, VS Code otomatik olarak o dizini WSL içinde açıyor ve tüm eklentilerim, ayarlarım Linux ortamına uygun şekilde çalışıyordu. Bu, geliştirme deneyimini inanılmaz derecede sorunsuz hale getirdi.

# WSL terminalinde
cd ~/my-first-project
code .

Bu entegrasyon, Windows'un grafik arayüzünü kullanırken, tüm geliştirme ve derleme işlemlerini Linux'un gücüyle yapabilmem anlamına geliyordu.

İlk Proje: Basit Bir Web Uygulaması

Ortamım hazır olduğuna göre, basit bir Node.js Express uygulaması oluşturdum. Amacım, kurulumun doğru çalıştığını ve temel bir web sunucusunu başarıyla başlatabildiğimi görmekti. Proje dizini oluşturdum, npm init -y ile package.json dosyasını başlattım ve npm install express ile Express.js'i kurdum. Ardından app.js adında basit bir sunucu dosyası yazdım:

// app.js
const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Merhaba WSL ve Express!');
});

app.listen(port, () => {
  console.log(Uygulama http://localhost:${port} adresinde çalışıyor);
});

Uygulamayı node app.js komutuyla başlattığımda, tarayıcımdan http://localhost:3000 adresine erişebildim. Bu küçük başarı, tüm kurulumun doğru çalıştığını ve ileriki adımlar için hazır olduğumu gösterdi.

Gün 3: Docker ve Konteynerleşme Dünyasına Adım

Geliştirme ortamımı kurduktan ve ilk uygulamamı çalıştırdıktan sonra, projelerimi daha taşınabilir ve izole hale getirme ihtiyacı hissettim. İşte bu noktada Docker devreye girdi. Konteynerleşme, modern yazılım geliştirmenin vazgeçilmez bir parçası.

Neden Docker? Konteynerleşmenin Faydaları

Docker, uygulamaları ve bağımlılıklarını "konteyner" adı verilen izole edilmiş, taşınabilir birimler halinde paketlemeyi sağlayan bir platformdur. Konteynerleşmenin bana sunduğu başlıca avantajlar şunlardı:

  • Tutarlılık: Geliştirme, test ve üretim ortamları arasında tutarlılık sağlar. "Benim makinemde çalışıyor" sorununu ortadan kaldırır.
  • İzolasyon: Her uygulama kendi konteynerinde izole çalışır, bağımlılık çakışmalarını engeller.
  • Taşınabilirlik: Konteynerler, herhangi bir Docker yüklü sistemde (yerel makine, bulut sunucusu vb.) aynı şekilde çalışır.
  • Hızlı Dağıtım: Uygulamaların hızlı bir şekilde paketlenip dağıtılmasını kolaylaştırır.

Docker Kurulumu ve Temel Komutlar

WSL 2 üzerinde Docker Desktop'ı kurmak en kolay yoldu. Docker Desktop, Windows üzerinde çalışır ancak WSL 2 entegrasyonu sayesinde Linux konteynerlerini sorunsuz bir şekilde yönetmemi sağlar. Kurulumdan sonra, WSL terminalimde Docker komutlarını kullanabildim:

# Docker versiyonunu kontrol etme
docker --version

# Çalışan konteynerleri listeleme
docker ps

# Tüm konteynerleri listeleme (durdurulmuşlar dahil)
docker ps -a

# Docker imajlarını listeleme
docker images

Bu komutlar, Docker'ın başarılı bir şekilde kurulduğunu ve WSL üzerinden erişilebilir olduğunu doğruladı.

Uygulamayı Dockerize Etme

Önceki gün yazdığım Express uygulamasını Dockerize etmek için bir Dockerfile oluşturdum. Bu dosya, Docker'a uygulamamın nasıl bir imaj haline getirileceğini anlatır:

# Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]

Ardından, bu Dockerfile'ı kullanarak bir Docker imajı oluşturdum ve uygulamayı bir konteyner içinde çalıştırdım:

# Docker imajını oluşturma
docker build -t my-express-app .

# Konteyneri çalıştırma
docker run -p 3000:3000 -d my-express-app

Tarayıcıdan tekrar http://localhost:3000 adresine gittiğimde, uygulamanın bu kez bir Docker konteyneri içinden çalıştığını gördüm. Bu adım, uygulamamın taşınabilirliğini ve izole edilebilirliğini büyük ölçüde artırdı.

Gün 4: Git, GitHub ve Versiyon Kontrolü Pratikleri

Her geliştiricinin en iyi dostlarından biri versiyon kontrol sistemleridir. Bu gün, projelerimi yönetmek, değişiklikleri takip etmek ve işbirliği yapmak için Git ve GitHub'ı aktif olarak kullanmaya başladım.

Versiyon Kontrolünün Önemi

Versiyon kontrol sistemleri (VCS), yazılım geliştirme sürecinde yapılan değişiklikleri takip etmeyi, geçmiş sürümlere geri dönmeyi ve birden fazla geliştiricinin aynı proje üzerinde eş zamanlı çalışmasını sağlamayı amaçlar. Git, dağıtık yapısıyla bu alanda en popüler araçlardan biridir. Versiyon kontrolü sayesinde şunları yapabilirim:

  • Kod tabanındaki her değişikliği kaydetme ve kimin ne zaman yaptığını görme.
  • Yanlışlıkla yapılan değişiklikleri geri alma veya belirli bir geçmiş sürüme dönme.
  • Farklı özellikler üzerinde ayrı ayrı çalışmak için dallar (branches) oluşturma.
  • Ekip üyeleriyle sorunsuz bir şekilde işbirliği yapma.

Git Temelleri ve GitHub Entegrasyonu

Git'i WSL ortamımda zaten kurmuştum. İlk olarak, Git'i kimliğimi belirterek yapılandırdım:

git config --global user.name "Adınız Soyadınız"
git config --global user.email "email@example.com"

Ardından, mevcut projem için bir GitHub deposu oluşturdum ve yerel depomu bu uzak depoya bağladım:

# Mevcut dizini Git deposu olarak başlatma
git init

# Dosyaları ekleme
git add .

# İlk commit
git commit -m "Initial commit: Express app dockerized"

# Uzak depoyu ekleme (GitHub'da oluşturduğunuz repo URL'si)
git remote add origin https://github.com/KullaniciAdiniz/my-express-app.git

# Değişiklikleri uzak depoya gönderme
git push -u origin master

Bu adımlarla, projemin kod tabanı artık GitHub'da güvenli bir şekilde saklanıyor ve versiyon kontrolü altında. GitHub'ın web arayüzü üzerinden de projemin durumunu takip edebiliyordum.

Branching, Merging ve Pull Request İş Akışları

Tek bir "master" veya "main" dalında çalışmak, özellikle bir ekiple çalışırken veya yeni özellikler geliştirirken riskli olabilir. Bu nedenle, Git'in dallanma (branching) özelliği çok önemlidir. Yeni bir özellik geliştirmek için yeni bir dal oluşturdum:

# Yeni bir özellik dalı oluşturma ve ona geçiş yapma
git checkout -b feature/add-greeting

# Kod değişiklikleri yapıldı...
# Değişiklikleri commit etme
git add .
git commit -m "Added personalized greeting endpoint"

# Dalı uzak depoya gönderme
git push origin feature/add-greeting

Değişikliklerim hazır olduğunda, GitHub üzerinden bir "Pull Request" (Çekme İsteği) oluşturdum. Bu, kodumun ana dala birleştirilmeden önce gözden geçirilmesini sağlayan standart bir iş akışıdır. İnceleme ve onay sürecinden sonra, dalımı ana dala birleştirdim (merge). Bu süreç, hem kod kalitesini artırıyor hem de ekip içi işbirliğini kolaylaştırıyor.

Gün 5: Buluta Geçiş ve İlk Dağıtım Deneyimi

Geliştirme ortamımı ve versiyon kontrolümü sağlamlaştırdıktan sonra, sıra uygulamamı dünyaya açmaya geldi. Bu son gün, Dockerize ettiğim Express uygulamasını bir bulut platformuna dağıtarak bulut bilişim dünyasına ilk adımımı attım.

Bulut Platformu Seçimi ve Nedenleri

Piyasada birçok güçlü bulut sağlayıcısı bulunuyor: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP). Her birinin kendine göre avantajları var. Bu ilk dağıtım için AWS'i tercih ettim. AWS'in geniş hizmet yelpazesi, sektördeki lider konumu ve ücretsiz kullanım katmanı (Free Tier) başlangıç için cazip geldi. Özellikle basit bir sanal sunucu (EC2) ve Docker konteynerlerini çalıştırmak için uygun bir ortam sunması kararımı etkiledi.

Basit Bir Sanal Sunucu Kurulumu

AWS konsoluna giriş yaparak bir EC2 (Elastic Compute Cloud) sanal sunucu başlattım. Adımlar kısaca şöyleydi:

  1. EC2 hizmetine gittim ve "Launch Instance" (Örnek Başlat) seçeneğini seçtim.
  2. Ubuntu Server (Free tier eligible) AMI'sini seçtim.
  3. t2.micro (Free tier eligible) örnek tipini seçtim.
  4. Bir key pair (anahtar çifti) oluşturdum ve .pem dosyasını indirdim. Bu, SSH ile sunucuya bağlanmak için gerekli.
  5. Güvenlik grubu (Security Group) ayarlarında, web uygulamamın erişilebilir olması için 80 (HTTP) ve 3000 (uygulama portu) portlarına gelen trafiğe izin verdim. Ayrıca SSH (22) portuna da kendi IP adresimden erişime izin verdim.
  6. Örneği başlattım ve birkaç dakika içinde çalışır duruma geldi.

Sunucunun genel IP adresini veya DNS adını alarak SSH ile bağlandım:

ssh -i "anahtar-cifti.pem" ubuntu@EC2_GENEL_IP_ADRESI

Dockerize Edilmiş Uygulamayı Dağıtma

EC2 sunucusuna bağlandıktan sonra, Docker'ı kurdum ve Dockerize ettiğim uygulamamı dağıtım için hazırladım. İlk olarak, sunucuya Docker'ı yükledim:

# Docker kurulumu
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

# Kullanıcıyı docker grubuna ekleme (sudo kullanmadan docker komutlarını çalıştırmak için)
sudo usermod -aG docker $USER
newgrp docker # Grubu etkinleştirmek için oturumu yeniden başlatmak veya bu komutu çalıştırmak

Daha sonra, Docker imajımı Docker Hub gibi bir konteyner kayıt defterine yükledim (veya doğrudan sunucuya kopyaladım, ancak kayıt defteri daha iyi bir uygulamadır). Yerel imajımı Docker Hub'a göndermek için:

docker tag my-express-app:latest kullaniciadi/my-express-app:latest
docker push kullaniciadi/my-express-app:latest

Son olarak, EC2 sunucumda bu imajı çekip uygulamayı çalıştırdım:

# Sunucuda
docker pull kullaniciadi/my-express-app:latest
docker run -p 80:3000 -d kullaniciadi/my-express-app

Uygulamamı 80 numaralı porta yönlendirdim, böylece sunucunun genel IP adresine doğrudan eriştiğimde uygulamam çalışacaktı. Tarayıcımdan EC2 sunucumun genel IP adresine giderek "Merhaba WSL ve Express!" mesajını gördüğümde, bu 5 günlük yolculuğun zirvesine ulaştığımı anladım. Uygulamam artık bulutta, dünyaya açık bir şekilde çalışıyordu.

Sonuç

Bu 5 günlük geliştirme günlüğü, WSL'in sunduğu yerel Linux deneyiminden, Docker ile konteynerleşmenin gücüne ve nihayetinde bulut platformlarında uygulama dağıtımına kadar uzanan kapsamlı bir serüveni özetliyor. Her gün, yeni bir teknoloji veya kavramla tanıştım ve bunları pratik uygulamalarla pekiştirdim. Bu süreçte edindiğim bilgiler ve deneyimler, modern yazılım geliştirme ekosisteminde daha yetkin ve kendinden emin bir geliştirici olmamı sağladı.

WSL, Windows kullanıcıları için Linux geliştirme ortamına erişimi demokratikleştirirken, Docker uygulamaların tutarlı ve taşınabilir olmasını sağlıyor. Git ve GitHub ise işbirliğini ve kod yönetimini kolaylaştırıyor. Bulut platformları ise uygulamalarımızı global ölçekte dağıtmamıza olanak tanıyor. Bu teknolojilerin birleşimi, geliştiricilere inanılmaz bir esneklik ve güç sunuyor. Umarım bu devlog, kendi geliştirme yolculuğunuzda size ilham verir ve yeni ufuklar açar.

SSS (Sık Sorulan Sorular)

S1: WSL 1 mi yoksa WSL 2 mi kullanmalıyım?
C1: Kesinlikle WSL 2 kullanmalısınız. WSL 2, tam bir Linux çekirdeği içerir ve WSL 1'e göre çok daha iyi performans, tam sistem çağrısı uyumluluğu ve Docker gibi araçlarla daha iyi entegrasyon sunar.

S2: Docker Desktop, WSL 2 olmadan da çalışır mı?
C2: Evet, Docker Desktop Windows'ta Hyper-V sanallaştırması ile de çalışabilir. Ancak WSL 2 entegrasyonu, daha hafif ve hızlı bir deneyim sunarak tercih edilen yöntem haline gelmiştir.

S3: Hangi bulut platformunu seçmeliyim?
C3: Seçim, projenizin gereksinimlerine, bütçenize ve kişisel öğrenme hedeflerinize bağlıdır. AWS, Azure ve GCP piyasanın liderleridir ve her biri geniş bir hizmet yelpazesi sunar. Yeni başlayanlar için ücretsiz kullanım katmanları olan platformlar iyi bir başlangıç olabilir.

S4: Git ve GitHub'ı öğrenmek ne kadar sürer?
C4: Git'in temel komutlarını (add, commit, push, pull, branch, merge) öğrenmek birkaç saat içinde mümkündür. Ancak ileri düzey kavramları ve karmaşık iş akışlarını kavramak pratik ve deneyim gerektirir. Düzenli kullanım ile hızla ustalaşabilirsiniz.

S5: WSL'de geliştirme yaparken Windows uygulamalarına erişebilir miyim?
C5: Evet, WSL ortamından Windows uygulamalarını doğrudan çalıştırabilirsiniz. Örneğin, notepad.exe veya code.exe gibi komutları doğrudan WSL terminalinden çağırabilirsiniz. Bu, Windows ve Linux ortamları arasında sorunsuz bir geçiş sağlar.

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

Gönder

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.
Exit mobile version