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/pingGeheimnisse 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 1Vollstä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.0lauschen undPORTaus 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
- Einführung in Plumber und REST
- GET- und POST-Endpunkte erstellen
- Authentifizierung und API-Sicherheit
- Plumber-APIs in der Produktion bereitstellen