0Pricing
R Academy · Pelajaran

Menerapkan API Plumber ke Produksi

Buat kontainer dan terapkan API Plumber dengan Docker serta platform awan.

Menerapkan API Plumber ke Produksi adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.

Opsi Deployment Produksi

API Plumber dapat di-deploy dengan beberapa cara:

  • Kontainer Docker — portabel, dapat direproduksi, dan berfungsi di mana saja
  • Posit Connect — deployment sekali klik dengan penjadwalan
  • Digital Ocean / EC2 — VM Linux biasa yang menjalankan R

Docker adalah opsi paling portabel dan merupakan standar industri untuk API R produksi.

Titik Masuk API Plumber

Buat api.R tingkat teratas yang memulai server Plumber. Gunakan Sys.getenv('PORT', unset='8000') agar PORT dapat diatur oleh pengatur orkestrasi kontainer tanpa mengubah kode.

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

Citra Docker Dasar — rocker/r-ver

Citra rocker/r-ver menyediakan lingkungan R minimal dengan versi yang dikunci. Selalu kunci ke versi R tertentu (misalnya, rocker/r-ver:4.3.2) untuk memastikan build yang dapat direproduksi. Hindari :latest dalam produksi.

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

Memasang Paket R dalam Dockerfile

Gunakan RUN Rscript -e "install.packages(...)" untuk memasang paket selama build citra. Pasang dependensi sistem terlebih dahulu (misalnya, libssl-dev untuk httr2) menggunakan 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')"

Menyalin Berkas dan Mengatur PORT

Salin berkas sumber R ke dalam kontainer dengan COPY. Deklarasikan PORT dengan EXPOSE agar Docker mengetahui PORT yang digunakan kontainer untuk mendengarkan. Ini hanya dokumentasi — instruksi ini tidak memublikasikan PORT.

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

Membangun dan Menjalankan Citra Docker

Bangun citra dengan docker build, lalu jalankan kontainer dengan memetakan PORT host ke PORT kontainer. Bendera -e memasukkan variabel lingkungan untuk rahasia.

# 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

Membaca Rahasia dengan Sys.getenv()

Dalam produksi, jangan pernah menaruh rahasia dalam Dockerfile atau kode sumber. Baca rahasia saat runtime dengan Sys.getenv(). Teruskan melalui bendera Docker -e, rahasia Kubernetes, atau sistem pengelolaan variabel lingkungan seperti 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()
')

Titik Akhir Pemeriksaan Kesehatan

Titik akhir /ping atau /health memungkinkan penyeimbang beban dan pengatur orkestrasi (Kubernetes, ECS) memastikan API aktif. Titik akhir ini harus mengembalikan 200 dengan cepat tanpa autentikasi, dan secara opsional memeriksa konektivitas basis data.

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

Contoh Dockerfile Lengkap

Menyatukan semuanya — Dockerfile yang siap produksi untuk 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"]

Pencatatan dalam Produksi

Pencatatan terstruktur membantu mendiagnosis masalah dalam produksi. Gunakan cat() atau paket logger untuk menulis catatan berstempel waktu ke stdout — Docker dan sebagian besar platform secara otomatis menangkap stdout dan meneruskannya ke pengumpul catatan.

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

Proksi Balik dengan Nginx

Dalam produksi, tempatkan proksi balik Nginx di depan Plumber untuk menangani terminasi TLS, pembatasan laju, dan buffering permintaan. Nginx meneruskan permintaan ke Plumber di localhost, sementara dunia luar terhubung ke Nginx melalui 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;
#   }
# }

Pemeriksaan Singkat: Docker EXPOSE

Apa yang sebenarnya dilakukan instruksi EXPOSE 8000 dalam Dockerfile?

Ringkasan Deployment Plumber API

Langkah-langkah utama untuk deployment Plumber dalam produksi:

  • Dengarkan pada 0.0.0.0 dan baca PORT dari lingkungan
  • Gunakan rocker/r-ver:X.Y.Z (versi dikunci) sebagai citra dasar
  • Pasang paket dalam Dockerfile; salin hanya berkas sumber
  • Masukkan rahasia melalui variabel lingkungan -e — jangan pernah menyimpannya dalam sumber atau Dockerfile
  • Tambahkan titik akhir kesehatan /ping (dengan #* @preempt auth)
  • Gunakan Nginx sebagai proksi balik untuk TLS dan pembatasan laju

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menerapkan API Plumber ke Produksi” gratis?

Ya — teks lengkap “Menerapkan API Plumber ke Produksi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Menerapkan API Plumber ke Produksi”?

Buat kontainer dan terapkan API Plumber dengan Docker serta platform awan. Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai R Academy?

Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Menerapkan API Plumber ke Produksi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?

Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pengantar Plumber dan REST
  2. Membuat Titik Akhir GET dan POST
  3. Autentikasi dan Keamanan API
  4. Menerapkan API Plumber ke Produksi
← Kembali ke R Academy