Bu ders için video bulunmamaktadır.

Bu derse başlamak veya ilerlemenizi kaydetmek için lütfen giriş yapın veya kayıt olun.

Ders İçeriği

Giriş: Uygulama Dağıtımı ve DevOps

Yazılım geliştirme sürecinin önemli bir parçası da geliştirilen uygulamaların canlı ortamlara (sunuculara) dağıtılmasıdır. Bu sürece Deployment (Dağıtım) denir. Modern yazılım geliştirme yaklaşımlarında, geliştirme, test ve dağıtım süreçlerini otomatikleştirmeyi ve entegre etmeyi hedefleyen DevOps kültürü büyük önem taşır. DevOps, geliştirme (Dev) ve operasyon (Ops) ekipleri arasındaki işbirliğini artırarak yazılım teslim süreçlerini hızlandırmayı ve kalitesini artırmayı amaçlar.

Uygulama Dağıtımı (Deployment) Stratejileri

Manuel Dağıtım

Uygulama dosyalarının sunucuya elle kopyalanması, bağımlılıkların manuel olarak kurulması ve uygulamanın başlatılması gibi adımları içerir. Küçük projeler için uygun olsa da, büyük ve karmaşık uygulamalarda hata yapma olasılığı yüksektir ve zaman alıcıdır.

Otomatik Dağıtım

Scriptler veya özel araçlar kullanılarak dağıtım sürecinin otomatikleştirilmesidir. Bu, hataları azaltır, tutarlılığı artırır ve dağıtım sürelerini kısaltır.

Sunucu Yönetimi

PM2 (Process Manager 2)

PM2, Node.js uygulamalarını üretim ortamında yönetmek için kullanılan popüler bir süreç yöneticisidir. Uygulamaların sürekli çalışmasını sağlar, çöktüğünde otomatik olarak yeniden başlatır, yük dengeleme yapar ve performans izleme özellikleri sunar.

npm install -g pm2

#pm2 start app.js --name my-node-app
pm2 list
pm2 stop my-node-app
pm2 restart my-node-app
pm2 delete my-node-app

Nginx ile Ters Proxy

Nginx, yüksek performanslı bir web sunucusu ve ters proxy sunucusudur. Node.js uygulamalarını doğrudan internete açmak yerine, Nginx gibi bir ters proxy kullanarak güvenlik, yük dengeleme ve statik dosya sunumu gibi avantajlar elde edebilirsiniz.

# /etc/nginx/sites-available/default veya sitenizin konfigürasyon dosyası
server { listen 80; server_name your_domain.com www.your_domain.com; location / { proxy_pass http://localhost:3000; # Node.js uygulamanızın çalıştığı port proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }

Konteynerleştirme (Docker)

Docker, uygulamaları ve bağımlılıklarını izole edilmiş, taşınabilir birimler olan konteynerler içinde paketlemeyi sağlayan bir platformdur. Bu, uygulamanın farklı ortamlarda (geliştirme, test, üretim) tutarlı bir şekilde çalışmasını garanti eder.

Dockerfile Oluşturma

# Dockerfile

# Temel Node.js imajı
FROM node:18-alpine

# Çalışma dizini oluştur
WORKDIR /app

# package.json ve package-lock.json dosyalarını kopyala
COPY package*.json ./

# Bağımlılıkları yükle
RUN npm install

# Uygulama kaynak kodunu kopyala
COPY . .

# Uygulamanın dinleyeceği portu belirt
EXPOSE 3000

# Uygulamayı başlatma komutu
CMD ["node", "app.js"]

Docker İmajı Oluşturma ve Çalıştırma

docker build -t my-node-app .
docker run -p 80:3000 my-node-app

Orkestrasyon (Docker Compose, Kubernetes)

Birden fazla konteynerden oluşan uygulamaları yönetmek için orkestrasyon araçları kullanılır.

Docker Compose

Docker Compose, çoklu konteyner Docker uygulamalarını tanımlamak ve çalıştırmak için bir araçtır. Tek bir YAML dosyası kullanarak tüm servislerinizi yapılandırabilirsiniz.

# docker-compose.yml

version: '3.8'
services:
  web:
    build: .
    ports:
      - "80:3000"
    environment:
      NODE_ENV: production
  db:
    image: mongo:latest
    volumes:
      - mongo-data:/data/db

volumes:
  mongo-data:
docker-compose up -d
docker-compose down

CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım)

CI/CD, yazılım geliştirme yaşam döngüsünü otomatikleştirmeyi amaçlayan bir dizi uygulama ve araçtır. Sürekli Entegrasyon (CI), geliştiricilerin kod değişikliklerini sık sık merkezi bir depoya entegre etmesini sağlar. Sürekli Dağıtım (CD), testlerden geçen kodun otomatik olarak üretim ortamına dağıtılmasını sağlar.

Temel CI/CD Akışı:

  1. Geliştirici kodu depolar (örneğin, GitHub).
  2. CI/CD aracı (örneğin, GitHub Actions, Jenkins, GitLab CI) kod değişikliklerini algılar.
  3. Testler çalıştırılır.
  4. Kod derlenir ve Docker imajı oluşturulur.
  5. İmaj bir konteyner kayıt defterine (örneğin, Docker Hub) gönderilir.
  6. Uygulama üretim ortamına dağıtılır.

İzleme ve Loglama

Uygulamaların üretim ortamında sağlıklı çalıştığından emin olmak için izleme ve loglama araçları kullanılır.

Prometheus ve Grafana

Prometheus, metrik toplama ve depolama için kullanılan açık kaynaklı bir izleme sistemidir. Grafana ise toplanan metrikleri görselleştirmek için kullanılan bir analiz ve izleme platformudur.

ELK Stack (Elasticsearch, Logstash, Kibana)

ELK Stack, logların toplanması, işlenmesi, depolanması ve görselleştirilmesi için kullanılan güçlü bir araç setidir.


Pratik Alıştırma: Docker ile Uygulama Dağıtımı

Basit bir Node.js uygulamasını Docker kullanarak konteynerleştirin ve çalıştırın:

  • Yeni bir Node.js projesi oluşturun (örneğin, basit bir Express.js "Merhaba Dünya" uygulaması).
  • Uygulamanız için bir Dockerfile oluşturun.
  • Docker imajını oluşturun ve yerel olarak çalıştırın.
  • (İsteğe bağlı) Docker Compose kullanarak uygulamanızı bir veritabanı servisiyle birlikte çalıştırın.