0Pricing
R Academy · Lektion

Plumber-APIs in der Produktion bereitstellen

Containerisieren und deployen Sie Plumber-APIs mit Docker und Cloud-Plattformen

Plumber-APIs in der Produktion bereitstellen ist eine kostenlose R Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des R Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.

Optionen für das Deployment in der Produktion

Eine Plumber-API kann auf verschiedene Arten bereitgestellt werden:

  • Docker-Container – portabel, reproduzierbar und überall einsetzbar
  • Posit Connect – Bereitstellung per Knopfdruck mit Zeitplanung
  • Digital Ocean / EC2 – eine einfache Linux-VM, auf der R läuft

Docker ist die portabelste Option und der Industriestandard für R-APIs in der Produktion.

Einstiegspunkt der Plumber-API

Erstellen Sie eine api.R auf oberster Ebene, die den Plumber-Server startet. Verwenden Sie Sys.getenv('PORT', unset='8000'), damit der Port vom Container-Orchestrator festgelegt werden kann, ohne den Code zu ändern.

# 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)

Basis-Docker-Image – rocker/r-ver

Das Image rocker/r-ver stellt eine minimale, versionsgebundene R-Umgebung bereit. Verwenden Sie immer eine bestimmte R-Version (z. B. rocker/r-ver:4.3.2), um reproduzierbare Builds sicherzustellen. Vermeiden Sie :latest in der Produktion.

# 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-Pakete im Dockerfile installieren

Verwenden Sie RUN Rscript -e "install.packages(...)", um Pakete während der Erstellung des Images zu installieren. Installieren Sie zuerst die Systemabhängigkeiten (z. B. libssl-dev für httr2) mit apt-get.

# 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')"

Dateien kopieren und Port festlegen

Kopieren Sie Ihre R-Quelldateien mit COPY in den Container. Deklarieren Sie den Port mit EXPOSE, damit Docker weiß, an welchem Port der Container lauscht. Dies dient nur der Dokumentation – der Port wird dadurch nicht veröffentlicht.

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

Docker-Image erstellen und ausführen

Erstellen Sie das Image mit docker build und führen Sie anschließend einen Container aus, wobei Sie den Host-Port auf den Container-Port abbilden. Mit dem Flag -e werden Umgebungsvariablen für Geheimnisse eingespeist.

# 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

Geheimnisse mit Sys.getenv() lesen

Legen Sie Geheimnisse in der Produktion niemals im Dockerfile oder im Quellcode ab. Lesen Sie sie zur Laufzeit mit Sys.getenv() ein. Übergeben Sie sie über Docker-Flags wie -e, Kubernetes-Secrets oder Systeme zur Verwaltung von Umgebungsvariablen wie AWS Secrets Manager.

# 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()
')

Health-Check-Endpunkt

Ein /ping- oder /health-Endpunkt ermöglicht es Load-Balancern und Orchestratoren (Kubernetes, ECS) zu prüfen, ob die API aktiv ist. Er sollte schnell und ohne Authentifizierung 200 zurückgeben und optional die Datenbankverbindung prüfen.

# #* 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

Vollständiges Dockerfile-Beispiel

Alles zusammengeführt – ein produktionsbereites Dockerfile für eine Plumber-API:

# 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"]

Protokollierung in der Produktion

Strukturierte Protokollierung erleichtert die Diagnose von Problemen in der Produktion. Verwenden Sie cat() oder das Paket logger, um mit Zeitstempeln versehene Protokolle nach stdout zu schreiben – Docker und die meisten Plattformen erfassen stdout automatisch und leiten es an einen Log-Aggregator weiter.

# 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')))

Reverse-Proxy mit Nginx

Schalten Sie in der Produktion einen Nginx-Reverse-Proxy vor Plumber, um die TLS-Terminierung, Ratenbegrenzung und Pufferung von Anfragen zu übernehmen. Nginx leitet Anfragen auf localhost an Plumber weiter, während die Außenwelt über Port 443 eine Verbindung zu Nginx herstellt.

# 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;
#   }
# }

Schnelltest: Docker EXPOSE

Was bewirkt die Anweisung EXPOSE 8000 in einem Dockerfile tatsächlich?

Zusammenfassung: Plumber-APIs bereitstellen

Wichtige Schritte für das Deployment einer Plumber-API in der Produktion:

  • Auf 0.0.0.0 lauschen und PORT aus der Umgebung lesen
  • rocker/r-ver:X.Y.Z (versionsgebunden) als Basis-Image verwenden
  • Pakete im Dockerfile installieren; nur Quelldateien kopieren
  • Geheimnisse über -e-Umgebungsvariablen einspeisen – niemals im Quellcode oder Dockerfile
  • Einen /ping-Health-Endpunkt hinzufügen (mit #* @preempt auth)
  • Nginx als Reverse-Proxy für TLS und Ratenbegrenzung verwenden

Häufig gestellte Fragen

Ist die Lektion „Plumber-APIs in der Produktion bereitstellen“ kostenlos?

Ja — der vollständige Text von „Plumber-APIs in der Produktion bereitstellen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des R Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Plumber-APIs in der Produktion bereitstellen“?

Containerisieren und deployen Sie Plumber-APIs mit Docker und Cloud-Plattformen Du übst R Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um R Academy zu starten?

Keine Vorkenntnisse erforderlich. R Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Plumber-APIs in der Produktion bereitstellen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser R Academy-Lektion Code schreiben und ausführen?

Ja. Jede R Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Einführung in Plumber und REST
  2. GET- und POST-Endpunkte erstellen
  3. Authentifizierung und API-Sicherheit
  4. Plumber-APIs in der Produktion bereitstellen
← Zurück zu R Academy