R Academy · Oppitunti

Shiny-sovellusten käyttöönotto

Julkaiskaa sovelluksia shinyapps.io-palvelussa, Shiny Serverillä ja Docker-kontteihin perustuvissa ympäristöissä.

Oppitunti 4/413 vaihetta

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/myapp

renv 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 packages

Ympä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 tiedostossa renv.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/shiny tarjoavat 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'
)
Aloita maksutta

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

  1. Reaktiivisen ohjelmoinnin syventävä katsaus
  2. Shiny-moduulit koodin uudelleenkäyttöön
  3. Dynaaminen käyttöliittymä renderUI- ja insertUI-funktioilla
  4. Shiny-sovellusten käyttöönotto
← Takaisin: R Academy