R Academy · Ders

Plumber API'lerini Üretim Ortamına Dağıtma

Plumber API'lerini Docker ve bulut platformlarıyla kapsülleyip dağıtın.

4. ders / 413 adım

Plumber API'lerini Üretim Ortamına Dağıtma, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.

Üretim Dağıtımı Seçenekleri

Bir Plumber API'si çeşitli şekillerde dağıtılabilir:

  • Docker kapsayıcısı — taşınabilir, tekrarlanabilir ve her yerde çalışır
  • Posit Connect — zamanlamalı, tek düğmeyle dağıtım
  • Digital Ocean / EC2 — R çalıştıran sıradan bir Linux VM'i

Docker en taşınabilir seçenektir ve üretim R API'leri için sektör standardıdır.

Plumber API'si Başlangıç Noktası

Plumber sunucusunu başlatan üst düzey bir api.R dosyası oluşturun. Koddaki değişiklikler gerekmeden bağlantı noktasının kapsayıcı düzenleyicisi tarafından ayarlanabilmesi için Sys.getenv('PORT', unset='8000') kullanın.

# api.R
# library(plumber)
#
# pr <- plumb('routes.R')
# port <- as.integer(Sys.getenv('PORT', unset = '8000'))
# pr$run(host = '0.0.0.0', port = port)
#
# Listening on 0.0.0.0 is required inside Docker
# (127.0.0.1 is only reachable inside the container)

Temel Docker Görüntüsü — rocker/r-ver

rocker/r-ver görüntüsü, en az özellikli ve sürümü sabitlenmiş bir R ortamı sağlar. Tekrarlanabilir derlemeler elde etmek için her zaman belirli bir R sürümünü sabitleyin (ör. rocker/r-ver:4.3.2). Üretimde :latest kullanmaktan kaçının.

# Dockerfile
# FROM rocker/r-ver:4.3.2
#
# Alternatively use rocker/plumber which pre-installs plumber:
# FROM rstudio/plumber:latest
#
# rocker/r-ver is more minimal and gives you full control
# over which packages are installed.

R Paketlerini Dockerfile'a Yükleme

Görüntü derlemesi sırasında paketleri yüklemek için RUN Rscript -e "install.packages(...)" kullanın. Sistem bağımlılıklarını önce apt-get ile yükleyin (ör. httr2 için libssl-dev).

# FROM rocker/r-ver:4.3.2
#
# RUN apt-get update && apt-get install -y \
#     libssl-dev \
#     libcurl4-openssl-dev \
#  && rm -rf /var/lib/apt/lists/*
#
# RUN Rscript -e "install.packages(c('plumber', 'jsonlite', 'httr2'), repos='https://cloud.r-project.org')"

Dosyaları Kopyalama ve Bağlantı Noktasını Ayarlama

R kaynak dosyalarınızı COPY ile kapsayıcıya kopyalayın. Docker'ın kapsayıcının hangi bağlantı noktasını dinlediğini bilmesi için bağlantı noktasını EXPOSE ile bildirin. Bu yalnızca belgelendirme amaçlıdır; bağlantı noktasını yayımlamaz.

# FROM rocker/r-ver:4.3.2
# ...
# WORKDIR /app
# COPY routes.R .
# COPY api.R .
#
# EXPOSE 8000
#
# CMD ["Rscript", "api.R"]

Docker Görüntüsünü Derleme ve Çalıştırma

Görüntüyü docker build ile derleyin, ardından ana makinenin bağlantı noktasını kapsayıcının bağlantı noktasına eşleyen bir kapsayıcı çalıştırın. -e bayrağı, gizli bilgiler için ortam değişkenlerini aktarır.

# Build the image:
# docker build -t my-r-api:1.0 .
#
# Run a container:
# docker run -d \
#   -p 8000:8000 \
#   -e API_SECRET_KEY='my_secret' \
#   -e DATABASE_URL='postgres://...' \
#   --name r-api \
#   my-r-api:1.0
#
# Test:
# curl http://localhost:8000/ping

Sys.getenv() ile Gizli Bilgileri Okuma

Üretimde gizli bilgileri Dockerfile'a veya kaynak koduna hiçbir zaman koymayın. Bunları çalışma zamanında Sys.getenv() ile okuyun. Docker -e bayrakları, Kubernetes gizli bilgileri veya AWS Secrets Manager gibi ortam değişkeni yönetim sistemleri üzerinden aktarın.

# In routes.R:
# db_url   <- Sys.getenv('DATABASE_URL', unset = '')
# api_key  <- Sys.getenv('API_SECRET_KEY', unset = '')
#
# if (nchar(db_url) == 0)  stop('DATABASE_URL is required')
# if (nchar(api_key) == 0) stop('API_SECRET_KEY is required')
#
# Fail fast at startup rather than failing silently at request time
cat('Validate all required env vars at startup with stop()
')

Durum Denetimi Uç Noktası

/ping veya /health uç noktası, yük dengeleyicilerin ve düzenleyicilerin (Kubernetes, ECS) API'nin çalışır durumda olduğunu doğrulamasını sağlar. Kimlik doğrulama olmadan hızlıca 200 döndürmeli ve isteğe bağlı olarak veritabanı bağlantısını denetlemelidir.

# #* Health check
# #* @preempt auth
# #* @get /ping
# function() {
#   list(
#     status  = 'ok',
#     version = '1.0.0',
#     time    = format(Sys.time(), '%Y-%m-%dT%H:%M:%SZ')
#   )
# }
#
# Docker HEALTHCHECK:
# HEALTHCHECK CMD curl -f http://localhost:8000/ping || exit 1

Eksiksiz Dockerfile Örneği

Her şeyi bir araya getiren, üretime hazır bir Plumber API Dockerfile'ı:

# FROM rocker/r-ver:4.3.2
# RUN apt-get update && apt-get install -y libssl-dev libcurl4-openssl-dev \
#  && rm -rf /var/lib/apt/lists/*
# RUN Rscript -e "install.packages(c('plumber','jsonlite'), repos='https://cloud.r-project.org')"
# WORKDIR /app
# COPY routes.R api.R ./
# EXPOSE 8000
# HEALTHCHECK CMD curl -f http://localhost:8000/ping || exit 1
# CMD ["Rscript", "api.R"]

Üretimde Günlük Kaydı

Yapılandırılmış günlük kaydı, üretimdeki sorunların tanılanmasına yardımcı olur. Zaman damgalı günlükleri stdout'a yazmak için cat() veya logger paketini kullanın; Docker ve çoğu platform stdout'u otomatik olarak yakalayıp bir günlük toplayıcısına yönlendirir.

# Log format: ISO timestamp + level + message
log_info <- function(msg) {
  cat(format(Sys.time(), '%Y-%m-%dT%H:%M:%S'), '[INFO]', msg, '
')
}

log_info('API starting up')
log_info(paste('Port:', Sys.getenv('PORT', '8000')))

Nginx ile Ters Vekil Sunucu

Üretimde TLS sonlandırma, istek hızı sınırlama ve istek arabelleğe alma işlemlerini gerçekleştirmesi için Plumber'ın önüne bir Nginx ters vekil sunucusu koyun. Nginx istekleri localhost üzerindeki Plumber'a iletir; dış dünya ise Nginx'e 443 numaralı bağlantı noktasından bağlanır.

# Nginx config snippet (nginx.conf):
# server {
#   listen 443 ssl;
#   ssl_certificate     /etc/letsencrypt/.../fullchain.pem;
#   ssl_certificate_key /etc/letsencrypt/.../privkey.pem;
#
#   location /api/ {
#     proxy_pass         http://127.0.0.1:8000/;
#     proxy_set_header   Host $host;
#     proxy_set_header   X-Real-IP $remote_addr;
#   }
# }

Hızlı Kontrol: Docker EXPOSE

Dockerfile içindeki EXPOSE 8000 yönergesi gerçekte ne yapar?

Plumber API'lerini Dağıtma Özeti

Üretimde Plumber dağıtımı için temel adımlar:

  • 0.0.0.0 üzerinde dinleyin ve PORT değerini ortamdan okuyun
  • Temel görüntü olarak sürümü sabitlenmiş rocker/r-ver:X.Y.Z kullanın
  • Paketleri Dockerfile içinde yükleyin; yalnızca kaynak dosyalarını kopyalayın
  • Gizli bilgileri -e ortam değişkenleriyle aktarın; bunları kaynak koda veya Dockerfile'a koymayın
  • Bir /ping durum denetimi uç noktası ekleyin (#* @preempt auth ile)
  • TLS ve istek hızı sınırlama için Nginx'i ters vekil sunucusu olarak kullanın
Başlamak ücretsiz

Yapay zeka eğitmeniyle R öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
43
Dersler
159

Sıkça Sorulan Sorular

“Plumber API'lerini Üretim Ortamına Dağıtma” dersi ücretsiz mi?

Evet — “Plumber API'lerini Üretim Ortamına Dağıtma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.

“Plumber API'lerini Üretim Ortamına Dağıtma” dersinde ne öğreneceğim?

Plumber API'lerini Docker ve bulut platformlarıyla kapsülleyip dağıtın. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

R Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Plumber API'lerini Üretim Ortamına Dağıtma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu R Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Plumber ve REST'e Giriş
  2. GET ve POST Uç Noktaları Oluşturma
  3. Kimlik Doğrulama ve API Güvenliği
  4. Plumber API'lerini Üretim Ortamına Dağıtma
← R Academy Sayfasına Dön