Plumber-rajapintojen käyttöönotto tuotannossa
Pakkaakaa ja ottakaa Plumber-rajapintoja käyttöön Dockerilla ja pilvialustoilla.
Plumber-rajapintojen käyttöönotto tuotannossa on ilmainen R Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu R Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. R Academy-kurssilla on yhteensä 4 oppituntia.
Tuotantokäyttöönoton vaihtoehdot
Plumber API voidaan ottaa käyttöön useilla tavoilla:
- Docker-säilö — siirrettävä, toistettava ja toimii kaikkialla
- Posit Connect — painikekäyttöinen käyttöönotto ja ajastus
- Digital Ocean / EC2 — tavallinen Linux-virtuaalikone, jossa R suoritetaan
Docker on siirrettävin vaihtoehto ja tuotantokäyttöön tarkoitettujen R-rajapintojen alan standardi.
Plumber API:n käynnistystiedosto
Luokaa ylätason api.R-tiedosto, joka käynnistää Plumber-palvelimen. Käyttäkää muotoa Sys.getenv('PORT', unset='8000'), jotta säilöjen orkestroija voi määrittää portin ilman koodin muuttamista.
# 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)Docker-perusimage — rocker/r-ver
rocker/r-ver-image tarjoaa minimaalisen, tiettyyn versioon kiinnitetyn R-ympäristön. Kiinnittäkää aina tietty R-versio (esimerkiksi rocker/r-ver:4.3.2), jotta koontiversiot voidaan toistaa yhdenmukaisesti. Välttäkää :latest-tunnistetta tuotannossa.
# 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-pakettien asentaminen Dockerfile-tiedostossa
Asentakaa paketit image-koonnin aikana komennolla RUN Rscript -e "install.packages(...)". Asentakaa järjestelmäriippuvuudet ensin käyttämällä apt-get-komentoa (esimerkiksi libssl-dev tarvitaan httr2-paketille).
# 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')"Tiedostojen kopioiminen ja portin määrittäminen
Kopioikaa R-lähdetiedostot säilöön komennolla COPY. Ilmoittakaa portti komennolla EXPOSE, jotta Docker tietää, mitä porttia säilö kuuntelee. Tämä on vain dokumentaatiota — se ei julkaise porttia.
# FROM rocker/r-ver:4.3.2
# ...
# WORKDIR /app
# COPY routes.R .
# COPY api.R .
#
# EXPOSE 8000
#
# CMD ["Rscript", "api.R"]Docker-imagen koonti ja suorittaminen
Koontakaa image komennolla docker build ja suorittakaa sitten säilö yhdistämällä isäntäkoneen portti säilön porttiin. -e-valitsimella välitetään ympäristömuuttujia, kuten salaisuuksia.
# 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/pingSalaisuuksien lukeminen Sys.getenv()-funktiolla
Älkää koskaan sijoittako salaisuuksia tuotannossa Dockerfile-tiedostoon tai lähdekoodiin. Lukekaa ne suorituksen aikana käyttämällä Sys.getenv()-funktiota. Välittäkää ne Dockerin -e-valitsimilla, Kubernetes-salaisuuksina tai AWS Secrets Managerin kaltaisilla ympäristömuuttujien hallintajärjestelmillä.
# 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()
')Terveystarkistuksen päätepiste
/ping- tai /health-päätepisteen avulla kuormantasaajat ja orkestroijat (Kubernetes, ECS) voivat varmistaa, että API on toiminnassa. Sen tulee palauttaa nopeasti tila 200 ilman todennusta, ja se voi halutessanne tarkistaa myös yhteyden tietokantaan.
# #* 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 1Täydellinen Dockerfile-esimerkki
Kaikki yhdistettynä — tuotantokäyttöön valmis Dockerfile Plumber API:a varten:
# 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"]Lokitus tuotannossa
Rakenteinen lokitus auttaa selvittämään tuotannon ongelmia. Kirjoittakaa aikaleimalliset lokit vakiotulosteeseen käyttämällä cat()-funktiota tai logger-pakettia — Docker ja useimmat alustat keräävät vakiotulosteen automaattisesti ja välittävät sen lokien koontijärjestelmään.
# 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')))Käänteisvälityspalvelin Nginxillä
Sijoittakaa tuotannossa Plumberin eteen Nginx-käänteisvälityspalvelin käsittelemään TLS:n päättämistä, pyyntömäärien rajoittamista ja pyyntöjen puskurointia. Nginx välittää pyynnöt localhostissa toimivalle Plumberille, kun taas ulkomaailma muodostaa yhteyden Nginxiin portissa 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;
# }
# }Pikatarkistus: Dockerin EXPOSE
Mitä Dockerfile-tiedoston EXPOSE 8000-käsky todellisuudessa tekee?
Plumber API:en käyttöönoton kertaus
Plumberin tuotantokäyttöönoton tärkeimmät vaiheet:
- Kuunnelkaa osoitteessa
0.0.0.0ja lukekaaPORTympäristöstä - Käyttäkää perusimagena versionumerolla kiinnitettyä
rocker/r-ver:X.Y.Z-imagea - Asentakaa paketit Dockerfile-tiedostossa ja kopioikaa vain lähdetiedostot
- Välittäkää salaisuudet
-e-ympäristömuuttujina — älkää koskaan sijoittako niitä lähdekoodiin tai Dockerfile-tiedostoon - Lisätkää
/ping-terveystarkistuksen päätepiste (jossa on#* @preempt auth) - Käyttäkää Nginxiä käänteisvälityspalvelimena TLS:lle ja pyyntömäärien rajoittamiseen
Opi R tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 43
- Oppitunnit
- 159
Usein kysytyt kysymykset
Onko oppitunti ”Plumber-rajapintojen käyttöönotto tuotannossa” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa R Academy-oppimispolun 3 oppituntia, myös oppitunnin “Plumber-rajapintojen käyttöönotto tuotannossa”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. R Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Plumber-rajapintojen käyttöönotto tuotannossa”?
Pakkaakaa ja ottakaa Plumber-rajapintoja käyttöön Dockerilla ja pilvialustoilla. Harjoittelet R Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni R Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin R Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Plumber-rajapintojen käyttöönotto tuotannossa”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä R Academy-oppitunnilla?
Kyllä. Jokainen R Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Plumberin ja RESTin perusteet
- GET- ja POST-päätepisteiden luominen
- Todennus ja API-tietoturva
- Plumber-rajapintojen käyttöönotto tuotannossa