Menerapkan Aplikasi Shiny
Publikasikan aplikasi ke shinyapps.io, Shiny Server, dan lingkungan berbasis Docker.
Menerapkan Aplikasi Shiny 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.
Ikhtisar Opsi Deployment
Aplikasi Shiny dapat di-deploy pada beberapa platform, bergantung pada anggaran, perkiraan lalu lintas, dan kebutuhan kontrol:
- shinyapps.io: Hosting cloud terkelola oleh Posit — paling mudah, dengan tingkat gratis yang tersedia.
- Shiny Server (open source): Dihosting sendiri di Linux, gratis.
- Posit Connect: Komersial, berkelas perusahaan, juga mendukung R Markdown dan Plumber.
- Docker + rocker/shiny: Portabilitas dan kontrol maksimum.
# Summary of deployment options and their trade-offs:
# shinyapps.io: managed, auto-scaling, per-instance pricing
# Shiny Server: self-hosted, unlimited users, needs sysadmin
# Posit Connect: enterprise SSO, scheduling, REST APIs
# Docker: any cloud provider, reproducible environments
cat('Choose based on: scale, budget, infra control needs')Struktur app.R untuk Deployment
Aplikasi Shiny yang dapat di-deploy harus memiliki satu app.R (berisi ui dan server) atau dua file, yaitu ui.R dan server.R. Semua dependensi paket harus dideklarasikan dengan library() di bagian atas. File data harus berada di direktori yang sama atau dapat diakses menggunakan jalur relatif terhadap aplikasi.
# Minimal app.R for deployment
library(shiny)
library(ggplot2)
library(dplyr)
# Load data relative to app directory
data <- readRDS('data/processed_data.rds')
ui <- fluidPage(
titlePanel('My Deployed App'),
sidebarLayout(
sidebarPanel(selectInput('var', 'Variable:', choices = names(data))),
mainPanel(plotOutput('main_plot'))
)
)
server <- function(input, output, session) {
output$main_plot <- renderPlot({
ggplot(data, aes_string(x = input$var)) + geom_histogram()
})
}
shinyApp(ui, server)rsconnect::deployApp()
Paket rsconnect menangani deployment ke shinyapps.io dan Posit Connect. Pertama, konfigurasikan kredensial akun Anda, lalu panggil rsconnect::deployApp() dari direktori aplikasi. Fungsi ini secara otomatis mengemas semua file R, data, dan sebuah manifes.
library(rsconnect)
# One-time setup: link your shinyapps.io account
# rsconnect::setAccountInfo(
# name = 'your_account_name',
# token = 'YOUR_TOKEN',
# secret = 'YOUR_SECRET'
# )
# Deploy the app in the current directory
rsconnect::deployApp(
appDir = '.', # or 'path/to/app'
appName = 'my_analysis_app',
forceUpdate = TRUE
)Penyiapan shinyapps.io
shinyapps.io adalah cara tercepat untuk mendapatkan URL publik. Buat akun gratis di shinyapps.io, salin token dan secret dari dasbor, lalu panggil setAccountInfo(). Tingkat gratis memungkinkan 5 aplikasi dengan 25 jam aktif per bulan.
library(rsconnect)
# Copy credentials from shinyapps.io -> Account -> Tokens
rsconnect::setAccountInfo(
name = 'your_username',
token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
secret = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
)
# Verify the connection
rsconnect::accountInfo()
# List currently deployed apps
rsconnect::applications()Shiny Server Open Source
Shiny Server berjalan di Linux (Ubuntu/RHEL) dan menyajikan aplikasi Shiny dari direktori /srv/shiny-server/. Setiap subdirektori menjadi aplikasi di http://server:3838/subdirname/. Layanan ini gratis dan mendukung pengguna serentak tanpa batas, sesuai kapasitas server.
# Install Shiny Server on Ubuntu:
# sudo apt-get install r-base
# sudo R -e 'install.packages(c("shiny", "rmarkdown"))'
# wget https://download3.rstudio.org/ubuntu-20.04/x86_64/shiny-server-1.5.21.1012-amd64.deb
# sudo dpkg -i shiny-server-1.5.21.1012-amd64.deb
# Deploy an app:
# sudo cp -r /path/to/myapp /srv/shiny-server/myapp
# Access at: http://your-server:3838/myapp
# Config file: /etc/shiny-server/shiny-server.conf
cat('Shiny Server config controls ports, auth, and app paths')Docker dengan rocker/shiny
Citra Docker rocker/shiny menyediakan Shiny Server yang telah dikonfigurasi sebelumnya. Kaitkan direktori aplikasi Anda ke dalam kontainer agar aplikasi langsung dapat disajikan. Docker menjamin reproduktibilitas — citra yang sama berjalan secara identik pada host mana pun.
# Dockerfile for a custom Shiny app
# FROM rocker/shiny:4.4.0
#
# # Install R package dependencies
# RUN R -e 'install.packages(c("ggplot2","dplyr","DT"))'
#
# # Copy app files
# COPY myapp/ /srv/shiny-server/myapp/
#
# EXPOSE 3838
# Build and run:
# docker build -t my-shiny-app .
# docker run -p 3838:3838 my-shiny-app
# Access at: http://localhost:3838/myapprenv untuk Dependensi yang Reproduktif
renv membuat pustaka paket tingkat proyek dengan berkas kunci (renv.lock) yang mencatat versi paket secara tepat. Saat melakukan deployment, berkas kunci ini memastikan server atau citra Docker memasang versi paket yang persis sama dengan yang digunakan selama pengembangan.
library(renv)
# Initialise renv in the project (creates renv.lock)
renv::init()
# After installing/updating packages, record the state
renv::snapshot()
# On the server: restore exact versions from lockfile
renv::restore()
# Check lockfile for a specific package version
renv::dependencies() # lists all used packagesVariabel Lingkungan untuk Konfigurasi
Jangan pernah menulis API key, kata sandi basis data, atau pengaturan khusus lingkungan secara langsung di dalam kode aplikasi. Gunakan variabel lingkungan yang dibaca dengan Sys.getenv('VAR_NAME', unset = NA). Atur variabel tersebut di .Renviron secara lokal dan di konfigurasi lingkungan platform hosting untuk produksi.
# In .Renviron (never commit this file):
# DB_HOST=prod-db.example.com
# DB_PASSWORD=secret123
# API_KEY=key_abc
# In app.R:
db_host <- Sys.getenv('DB_HOST', unset = 'localhost')
db_pass <- Sys.getenv('DB_PASSWORD', unset = '')
api_key <- Sys.getenv('API_KEY', unset = '')
if (api_key == '') {
warning('API_KEY not set — some features disabled')
}Ikhtisar Posit Connect
Posit Connect adalah platform perusahaan untuk men-deploy aplikasi Shiny, dokumen R Markdown, API Plumber, dan lainnya. Platform ini mendukung:
- Single Sign-On (SSO) melalui LDAP atau SAML
- Eksekusi laporan R Markdown terjadwal
- Kontrol akses pada tingkat aplikasi
- Penskalaan otomatis dan penyeimbangan beban
Deployment menggunakan alur kerja rsconnect::deployApp() yang sama seperti shinyapps.io.
library(rsconnect)
# Configure connection to Posit Connect server
rsconnect::addServer(
url = 'https://connect.yourcompany.com',
name = 'my_connect_server'
)
# Authenticate with API key
rsconnect::connectApiUser(
account = 'jsmith',
server = 'my_connect_server',
apiKey = Sys.getenv('CONNECT_API_KEY')
)
# Deploy
rsconnect::deployApp(server = 'my_connect_server')Daftar Periksa Sebelum Deployment
Sebelum men-deploy aplikasi Shiny ke produksi, verifikasikan hal-hal berikut:
- Semua jalur file menggunakan jalur relatif, bukan jalur absolut.
- Data sensitif (API key, kata sandi) dibaca dari variabel lingkungan.
- Dependensi paket dinyatakan secara eksplisit dengan
library()ataurenv.lock. - File data berukuran besar dimuat satu kali di bagian atas server.R, bukan di dalam reactive.
- Pesan kesalahan tidak mengungkapkan informasi internal kepada pengguna akhir.
# Production-hardened app.R patterns
# Load data once at startup (not per-session)
app_data <- readRDS('data/processed.rds') # outside server()
server <- function(input, output, session) {
# Reference app_data directly — already in memory
output$plot <- renderPlot({
subset_data <- app_data[app_data$group == input$grp, ]
plot(subset_data$x, subset_data$y)
})
# Sanitise error messages
tryCatch({
risky_operation()
}, error = function(e) {
showNotification('An error occurred.', type = 'error')
# log the real error internally, not to user
message('Error: ', conditionMessage(e))
})
}Pertimbangan Penskalaan
Aplikasi Shiny berbasis sesi: setiap pengguna mendapatkan proses R (atau worker) masing-masing. Strategi penskalaan:
- Muat data yang telah dihitung sebelumnya saat startup, bukan menghitungnya untuk setiap sesi.
- Gunakan caching reaktif dengan
bindCache()untuk komputasi mahal yang digunakan bersama oleh beberapa sesi. - Beberapa worker: Shiny Server Pro dan Posit Connect menjalankan proses R secara paralel.
- Backend basis data: gunakan DBI/pool untuk akses basis data secara serentak.
library(shiny)
library(pool)
# Create a database connection pool at startup
# (shared across all sessions)
pool <- dbPool(
drv = RPostgres::Postgres(),
host = Sys.getenv('DB_HOST'),
dbname = 'analytics',
user = Sys.getenv('DB_USER'),
password = Sys.getenv('DB_PASSWORD'),
minSize = 2,
maxSize = 10
)
onStop(function() { poolClose(pool) })
server <- function(input, output, session) {
output$tbl <- renderTable({
dbGetQuery(pool, 'SELECT * FROM metrics LIMIT 100')
})
}Pemeriksaan Singkat
Apa cara yang direkomendasikan untuk menangani API key dan kata sandi basis data dalam aplikasi Shiny yang telah di-deploy?
Ringkasan Deployment Aplikasi Shiny
Hal-hal penting dari Deployment Aplikasi Shiny:
- Opsi deployment: shinyapps.io (paling mudah), Shiny Server (dihosting sendiri), Posit Connect (perusahaan), Docker.
- app.R harus mendeklarasikan semua dependensi dengan
library(); gunakanrenv::snapshot()untuk versi yang reproduktif. rsconnect::deployApp()mengemas dan mengirim aplikasi ke shinyapps.io atau Posit Connect.- Docker dengan
rocker/shinymenyediakan portabilitas maksimum. - Gunakan
Sys.getenv()untuk kredensial — jangan pernah menulis rahasia secara langsung di dalam kode. - Muat kumpulan data berukuran besar saat startup (di luar
server()) agar dapat digunakan bersama oleh beberapa sesi. - Gunakan kumpulan koneksi (paket
pool) untuk akses basis data secara serentak.
# Minimal production-ready structure
# myapp/
# app.R <- ui + server + shinyApp()
# data/ <- processed datasets
# R/ <- modules and helpers
# renv.lock <- package version snapshot
# .Renviron <- local env vars (gitignored)
# Deploy:
library(rsconnect)
rsconnect::deployApp(
appDir = 'myapp',
appName = 'my_production_app'
)Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menerapkan Aplikasi Shiny” gratis?
Ya — teks lengkap “Menerapkan Aplikasi Shiny” 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 Aplikasi Shiny”?
Publikasikan aplikasi ke shinyapps.io, Shiny Server, dan lingkungan berbasis Docker. 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 Aplikasi Shiny” 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
- Pendalaman Pemrograman Reaktif
- Modul Shiny untuk Penggunaan Ulang Kode
- UI Dinamis dengan renderUI dan insertUI
- Menerapkan Aplikasi Shiny