0Pricing
R Academy · Leçon

Déployer des API Plumber en production

Conteneurisez et déployez des API Plumber avec Docker et des plateformes infonuagiques.

Déployer des API Plumber en production est une leçon R Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage R Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours R Academy comprend 4 leçons au total.

Options de déploiement en production

Une API Plumber peut être déployée de plusieurs façons :

  • Conteneur Docker — portable, reproductible et exécutable partout
  • Posit Connect — déploiement en un clic avec planification
  • Digital Ocean / EC2 — une VM Linux classique exécutant R

Docker est l’option la plus portable et la norme du secteur pour les API R en production.

Point d’entrée de l’API Plumber

Créez un fichier api.R de niveau supérieur qui démarre le serveur Plumber. Utilisez Sys.getenv('PORT', unset='8000') afin que le port puisse être défini par l’orchestrateur de conteneurs sans modifier le code.

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

Image Docker de base — rocker/r-ver

L’image rocker/r-ver fournit un environnement R minimal dont la version est figée. Figez toujours une version précise de R (par exemple rocker/r-ver:4.3.2) afin de garantir des compilations reproductibles. Évitez :latest en production.

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

Installer des paquets R dans le Dockerfile

Utilisez RUN Rscript -e "install.packages(...)" pour installer les paquets lors de la compilation de l’image. Installez d’abord les dépendances système (par exemple libssl-dev pour httr2) à l’aide de 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')"

Copier les fichiers et définir le port

Copiez vos fichiers source R dans le conteneur avec COPY. Déclarez le port avec EXPOSE afin d’indiquer à Docker sur quel port le conteneur écoute. Il s’agit uniquement d’une indication documentaire : cela ne publie pas le port.

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

Construire et exécuter l’image Docker

Construisez l’image avec docker build, puis exécutez un conteneur en associant le port de l’hôte au port du conteneur. L’option -e injecte les variables d’environnement contenant les secrets.

# 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

Lire les secrets avec Sys.getenv()

En production, ne placez jamais les secrets dans le Dockerfile ou le code source. Lisez-les au moment de l’exécution avec Sys.getenv(). Transmettez-les via les options Docker -e, les secrets Kubernetes ou des systèmes de gestion des variables d’environnement comme 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()
')

Point de terminaison de vérification d’état

Un point de terminaison /ping ou /health permet aux équilibreurs de charge et aux orchestrateurs (Kubernetes, ECS) de confirmer que l’API est active. Il doit renvoyer rapidement 200 sans authentification et peut éventuellement vérifier la connectivité à la base de données.

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

Exemple complet de Dockerfile

Voici un Dockerfile prêt pour la production qui rassemble tous les éléments d’une API Plumber :

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

Journalisation en production

La journalisation structurée aide à diagnostiquer les problèmes en production. Utilisez cat() ou le paquet logger pour écrire des journaux horodatés sur la sortie standard : Docker et la plupart des plateformes capturent automatiquement la sortie standard et l’acheminent vers un agrégateur de journaux.

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

Proxy inverse avec Nginx

En production, placez un proxy inverse Nginx devant Plumber pour gérer la terminaison TLS, la limitation du débit et la mise en mémoire tampon des requêtes. Nginx transmet les requêtes à Plumber sur localhost, tandis que le monde extérieur se connecte à Nginx sur le port 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;
#   }
# }

Vérification rapide : Docker EXPOSE

Que fait réellement l’instruction EXPOSE 8000 dans un Dockerfile ?

Récapitulatif du déploiement des API Plumber

Étapes clés pour déployer Plumber en production :

  • Écouter sur 0.0.0.0 et lire PORT depuis l’environnement
  • Utiliser rocker/r-ver:X.Y.Z (version figée) comme image de base
  • Installer les paquets dans le Dockerfile ; ne copier que les fichiers source
  • Injecter les secrets via les variables d’environnement -e — jamais dans le code source ou le Dockerfile
  • Ajouter un point de terminaison d’état /ping (avec #* @preempt auth)
  • Utiliser Nginx comme proxy inverse pour TLS et la limitation du débit

Questions Fréquemment Posées

La leçon « Déployer des API Plumber en production » est-elle gratuite ?

Oui — le texte complet de « Déployer des API Plumber en production » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours R Academy, passe à CoddyKit PRO. Le cours R Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Déployer des API Plumber en production » ?

Conteneurisez et déployez des API Plumber avec Docker et des plateformes infonuagiques. Tu pratiques R Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer R Academy ?

Aucune expérience préalable n'est requise. R Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Déployer des API Plumber en production » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon R Academy ?

Oui. Chaque leçon R Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Introduction à Plumber et REST
  2. Créer des points d’accès GET et POST
  3. Authentification et sécurité des API
  4. Déployer des API Plumber en production
← Retour à R Academy