Plumber-API's naar productie implementeren
Zet Plumber-API's in containers en implementeer ze met Docker en cloudplatforms.
Plumber-API's naar productie implementeren is een gratis R Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject R Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus R Academy bevat in totaal 4 lessen.
Opties voor implementatie in productie
Een Plumber-API kan op verschillende manieren worden geïmplementeerd:
- Docker-container — draagbaar, reproduceerbaar en overal bruikbaar
- Posit Connect — implementatie met één druk op de knop en planning
- Digital Ocean / EC2 — een gewone Linux-VM waarop R draait
Docker is de meest draagbare optie en de industriestandaard voor R-API's in productie.
Toegangspunt van een Plumber-API
Maak een api.R op het hoogste niveau die de Plumber-server start. Gebruik Sys.getenv('PORT', unset='8000'), zodat de poort door de containerorchestrator kan worden ingesteld zonder de code te wijzigen.
# 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
De image rocker/r-ver biedt een minimale R-omgeving waarvan de versie is vastgezet. Zet altijd een specifieke R-versie vast, bijvoorbeeld rocker/r-ver:4.3.2, om reproduceerbare builds te garanderen. Vermijd :latest in productie.
# 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-pakketten installeren in het Dockerfile
Gebruik RUN Rscript -e "install.packages(...)" om pakketten tijdens het bouwen van de image te installeren. Installeer eerst de systeemafhankelijkheden, bijvoorbeeld libssl-dev voor httr2, met 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')"Bestanden kopiëren en de poort instellen
Kopieer uw R-bronbestanden met COPY naar de container. Declareer de poort met EXPOSE, zodat Docker weet op welke poort de container luistert. Dit is alleen documentatie — de poort wordt er niet door gepubliceerd.
# FROM rocker/r-ver:4.3.2
# ...
# WORKDIR /app
# COPY routes.R .
# COPY api.R .
#
# EXPOSE 8000
#
# CMD ["Rscript", "api.R"]De Docker-image bouwen en uitvoeren
Bouw de image met docker build en voer daarna een container uit die de hostpoort aan de containerpoort koppelt. De vlag -e injecteert omgevingsvariabelen voor geheimen.
# 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/pingGeheimen lezen met Sys.getenv()
Geef geheimen in productie nooit op in het Dockerfile of de broncode. Lees ze tijdens runtime met Sys.getenv(). Geef ze door via Docker-vlaggen -e, Kubernetes-geheimen of systemen voor het beheren van omgevingsvariabelen, zoals 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()
')Eindpunt voor statuscontrole
Met een eindpunt als /ping of /health kunnen load balancers en orchestrators (Kubernetes, ECS) bevestigen dat de API actief is. Het moet snel een 200-respons teruggeven zonder authenticatie en kan eventueel de databaseverbinding controleren.
# #* 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 1Compleet Dockerfile-voorbeeld
Alles samengevoegd — een productieklaar Dockerfile voor een 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"]Logging in productie
Gestructureerde logging helpt bij het diagnosticeren van problemen in productie. Gebruik cat() of het pakket logger om logberichten met tijdstempel naar stdout te schrijven — Docker en de meeste platforms leggen stdout automatisch vast en sturen deze door naar een logaggregator.
# 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 met Nginx
Plaats in productie een reverse proxy van Nginx vóór Plumber om TLS-beëindiging, snelheidsbeperking en buffering van aanvragen af te handelen. Nginx stuurt aanvragen door naar Plumber op localhost, terwijl de buitenwereld verbinding maakt met Nginx via poort 443.
# 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;
# }
# }Snelle controle: Docker EXPOSE
Wat doet de instructie EXPOSE 8000 in een Dockerfile eigenlijk?
Samenvatting: Plumber-API's implementeren
Belangrijke stappen voor het implementeren van Plumber in productie:
- Luister op
0.0.0.0en leesPORTuit de omgeving - Gebruik
rocker/r-ver:X.Y.Z(met vastgezette versie) als basisimage - Installeer pakketten in het Dockerfile; kopieer alleen bronbestanden
- Injecteer geheimen via omgevingsvariabelen met
-e— nooit in de broncode of het Dockerfile - Voeg een statuscontrole-eindpunt
/pingtoe (met#* @preempt auth) - Gebruik Nginx als reverse proxy voor TLS en snelheidsbeperking
Leer R met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 43
- Lessen
- 159
Veelgestelde vragen
Is de les “Plumber-API's naar productie implementeren” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad R Academy, waaronder “Plumber-API's naar productie implementeren”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus R Academy bevat in totaal 4 lessen.
Wat leer ik in “Plumber-API's naar productie implementeren”?
Zet Plumber-API's in containers en implementeer ze met Docker en cloudplatforms. Je oefent met R Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met R Academy te beginnen?
Ervaring vooraf is niet nodig. R Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Plumber-API's naar productie implementeren”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over R Academy?
Ja. Elke les over R Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Inleiding tot Plumber en REST
- GET- en POST-endpoints maken
- Authenticatie en API-beveiliging
- Plumber-API's naar productie implementeren