Shiny-sovellusten käyttöönotto
Julkaiskaa sovelluksia shinyapps.io-palvelussa, Shiny Serverillä ja Docker-kontteihin perustuvissa ympäristöissä.
Shiny-sovellusten käyttöönotto 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.
Katsaus käyttöönottovaihtoehtoihin
Shiny-sovelluksia voidaan ottaa käyttöön useilla alustoilla budjetin, odotetun liikenteen ja hallintavaatimusten mukaan:
- shinyapps.io: Positin hallinnoima pilvipalvelu — helppokäyttöisin vaihtoehto, ja saatavilla on maksuton palvelutaso.
- Shiny Server (open source): Itse ylläpidettävä Linux-palvelu, maksuton.
- Posit Connect: Kaupallinen yritystason ratkaisu, joka tukee myös R Markdownia ja Plumberia.
- Docker + rocker/shiny: Paras siirrettävyys ja hallittavuus.
# 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')app.R-tiedoston rakenne käyttöönottoa varten
Käyttöön otettavassa Shiny-sovelluksessa on oltava joko yksi app.R-tiedosto (joka sisältää sekä ui- että server-osan) tai kaksi tiedostoa, ui.R ja server.R. Kaikki pakettiriippuvuudet on ilmoitettava alussa komennolla library(). Datatiedostojen on oltava samassa hakemistossa kuin sovellus tai niihin on päästävä sovelluksen suhteellisilla poluilla.
# 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()
rsconnect-paketti huolehtii käyttöönotosta shinyapps.io:ssa ja Posit Connectissa. Määritä ensin käyttäjätilisi tunnistetiedot ja kutsu sitten sovelluksen hakemistosta rsconnect::deployApp()-funktiota. Se kokoaa automaattisesti kaikki R-tiedostot, datan ja manifestin.
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
)shinyapps.io:n määrittäminen
shinyapps.io on nopein tapa saada käyttöön julkinen URL-osoite. Luo maksuton tili osoitteessa shinyapps.io, kopioi tunnus ja salaisuus hallintapaneelista ja kutsu setAccountInfo()-funktiota. Maksuton palvelutaso sallii 5 sovellusta ja 25 aktiivista tuntia kuukaudessa.
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 toimii Linuxissa (Ubuntu/RHEL) ja tarjoaa Shiny-sovelluksia /srv/shiny-server/-hakemistosta. Jokaisesta alihakemistosta tulee sovellus osoitteeseen http://server:3838/subdirname/. Palvelu on maksuton ja tukee rajattomasti samanaikaisia käyttäjiä palvelimen kapasiteetin rajoissa.
# 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 ja rocker/shiny
rocker/shiny-Docker-levykuva sisältää valmiiksi määritetyn Shiny Serverin. Liitä sovellushakemistosi säilöön, niin sovellus voidaan tarjota heti. Docker takaa toistettavuuden — sama levykuva toimii samalla tavalla millä tahansa isännällä.
# 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 toistettavia riippuvuuksia varten
renv luo projektikohtaisen pakettikirjaston ja lukitustiedoston (renv.lock), johon tallennetaan tarkat pakettiversiot. Käyttöönoton yhteydessä tämä lukitustiedosto varmistaa, että palvelin tai Docker-levykuva asentaa täsmälleen samat pakettiversiot, joita kehityksen aikana käytettiin.
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 packagesYmpäristömuuttujat määrityksiä varten
Älkää koskaan kirjoittako API-avaimia, tietokantojen salasanoja tai ympäristökohtaisia asetuksia suoraan sovelluskoodiin. Käyttäkää ympäristömuuttujia, jotka luetaan komennolla Sys.getenv('VAR_NAME', unset = NA). Määrittäkää ne paikallisesti .Renviron-tiedostossa ja tuotannossa hosting-alustan ympäristömäärityksissä.
# 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')
}Katsaus Posit Connectiin
Posit Connect on yritysalusta Shiny-sovellusten, R Markdown -dokumenttien, Plumber-rajapintojen ja muiden sisältöjen käyttöönottoon. Se tukee seuraavia ominaisuuksia:
- LDAP- tai SAML-pohjainen kertakirjautuminen (SSO)
- R Markdown -raporttien ajoitettu suoritus
- käyttöoikeuksien hallinta sovellustasolla
- automaattinen skaalaus ja kuormantasaus
Käyttöönotto tehdään samalla rsconnect::deployApp()-työnkululla kuin shinyapps.io:ssa.
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')Käyttöönottoa edeltävä tarkistuslista
Varmistakaa ennen Shiny-sovelluksen käyttöönottoa tuotantoon, että:
- kaikissa tiedostopoluissa käytetään suhteellisia, ei absoluuttisia polkuja.
- arkaluonteiset tiedot (API-avaimet ja salasanat) luetaan ympäristömuuttujista.
- pakettiriippuvuudet on ilmoitettu eksplisiittisesti komennolla
library()tai tiedostossarenv.lock. - suuret datatiedostot ladataan kerran server.R-tiedoston alussa, ei reaktiivisen koodin sisällä.
- virheilmoitukset eivät paljasta sisäisiä tietoja loppukäyttäjille.
# 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))
})
}Skaalautuvuuden huomioiminen
Shiny-sovellukset perustuvat istuntoihin: jokainen käyttäjä saa oman R-prosessinsa (tai työntekijänsä). Skaalausstrategioita ovat:
- Esilasketun datan lataaminen käynnistyksen yhteydessä sen sijaan, että data laskettaisiin jokaiselle istunnolle erikseen.
- Reaktiivisen välimuistin käyttäminen komennolla
bindCache()istuntojen välillä jaettaville raskaille laskutoimituksille. - Useat työntekijät: Shiny Server Pro ja Posit Connect käynnistävät rinnakkaisia R-prosesseja.
- Tietokantataustajärjestelmät: käyttäkää DBI:tä ja poolia samanaikaisiin tietokantayhteyksiin.
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')
})
}Pikatarkistus
Miten API-avaimia ja tietokantojen salasanoja suositellaan käsittelemään käyttöön otetussa Shiny-sovelluksessa?
Shiny-sovellusten käyttöönoton kertaus
Shiny-sovellusten käyttöönoton tärkeimmät asiat:
- Käyttöönottovaihtoehtoja ovat shinyapps.io (helppokäyttöisin), Shiny Server (itse ylläpidettävä), Posit Connect (yrityskäyttöön) ja Docker.
- app.R-tiedostossa on ilmoitettava kaikki riippuvuudet komennolla
library(); käyttäkäärenv::snapshot()-komentoa toistettavien versioiden tallentamiseen. rsconnect::deployApp()kokoaa sovelluksen ja siirtää sen shinyapps.io:hon tai Posit Connectiin.- Docker ja
rocker/shinytarjoavat parhaan siirrettävyyden. - Käyttäkää tunnistetietoihin
Sys.getenv()-funktiota — älkää koskaan kirjoittako salaisuuksia suoraan koodiin. - Ladatkaa suuret aineistot käynnistyksen yhteydessä (
server()-funktion ulkopuolella), jotta istunnot voivat jakaa niitä. - Käyttäkää yhteyspoolia (
pool-paketti) samanaikaisiin tietokantayhteyksiin.
# 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'
)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 ”Shiny-sovellusten käyttöönotto” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa R Academy-oppimispolun 3 oppituntia, myös oppitunnin “Shiny-sovellusten käyttöönotto”. 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 ”Shiny-sovellusten käyttöönotto”?
Julkaiskaa sovelluksia shinyapps.io-palvelussa, Shiny Serverillä ja Docker-kontteihin perustuvissa ympäristöissä. 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 ”Shiny-sovellusten käyttöönotto”-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
- Reaktiivisen ohjelmoinnin syventävä katsaus
- Shiny-moduulit koodin uudelleenkäyttöön
- Dynaaminen käyttöliittymä renderUI- ja insertUI-funktioilla
- Shiny-sovellusten käyttöönotto