Bu ders için video bulunmamaktadır.
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ışı:
- Geliştirici kodu depolar (örneğin, GitHub).
- CI/CD aracı (örneğin, GitHub Actions, Jenkins, GitLab CI) kod değişikliklerini algılar.
- Testler çalıştırılır.
- Kod derlenir ve Docker imajı oluşturulur.
- İmaj bir konteyner kayıt defterine (örneğin, Docker Hub) gönderilir.
- 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.