0Pricing
R Academy · Ders

Shiny Uygulamalarını Dağıtma

Uygulamaları shinyapps.io, Shiny Server ve Docker ile kapsüllenmiş ortamlarda yayımlayın.

Shiny Uygulamalarını Dağıtma, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.

Dağıtım Seçeneklerine Genel Bakış

Shiny uygulamaları bütçeye, beklenen trafiğe ve denetim gereksinimlerine bağlı olarak çeşitli platformlarda dağıtılabilir:

  • shinyapps.io: Posit tarafından yönetilen bulut barındırma hizmeti — kullanımı en kolay seçenektir ve ücretsiz katmanı vardır.
  • Shiny Server (açık kaynak): Linux üzerinde kendi sunucunuzda barındırılır, ücretsizdir.
  • Posit Connect: Ticari, kurumsal düzeyde bir platformdur; R Markdown ve Plumber'ı da destekler.
  • Docker + rocker/shiny: En yüksek taşınabilirlik ve denetim.
# 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')

Dağıtım için app.R Yapısı

Dağıtılabilir bir Shiny uygulamasında, hem ui hem de server içeren tek bir app.R dosyası ya da ui.R ve server.R adlı iki dosya bulunmalıdır. Tüm paket bağımlılıkları en üstte library() ile belirtilmelidir. Veri dosyaları aynı dizinde bulunmalı veya uygulamaya göre erişilebilir bir konumda olmalıdır.

# 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 paketi, shinyapps.io ve Posit Connect'e dağıtımı yönetir. Önce hesap kimlik bilgilerinizi yapılandırın, ardından uygulama dizininden rsconnect::deployApp() çağrısını yapın. Bu çağrı tüm R dosyalarını, verileri ve bir bildirim dosyasını otomatik olarak paketler.

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 Kurulumu

shinyapps.io, herkese açık bir URL elde etmenin en hızlı yoludur. shinyapps.io üzerinde ücretsiz bir hesap oluşturun, belirtecinizi ve gizli anahtarınızı panodan kopyalayın ve setAccountInfo() çağrısını yapın. Ücretsiz katman, ayda 25 etkin saatle 5 uygulamaya izin verir.

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 Açık Kaynak

Shiny Server Linux (Ubuntu/RHEL) üzerinde çalışır ve Shiny uygulamalarını /srv/shiny-server/ dizininden sunar. Her alt dizin, http://server:3838/subdirname/ adresinde bir uygulamaya dönüşür. Ücretsizdir ve sunucu kapasitesi dahilinde sınırsız eşzamanlı kullanıcıyı destekler.

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

rocker/shiny ile Docker

rocker/shiny Docker imajı, önceden yapılandırılmış bir Shiny Server sağlar. Uygulama dizininizi kapsayıcıya bağlayarak uygulamanızı hemen sunabilirsiniz. Docker, yeniden üretilebilirliği sağlar — aynı imaj her ana makinede aynı şekilde çalışır.

# 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

Yeniden Üretilebilir Bağımlılıklar için renv

renv, tam paket sürümlerini kaydeden bir kilit dosyasıyla (renv.lock) proje düzeyinde bir paket kitaplığı oluşturur. Dağıtım sırasında bu kilit dosyası, sunucunun veya Docker imajının geliştirme sırasında kullanılan paket sürümlerinin aynısını kurmasını sağlar.

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

Yapılandırma için Ortam Değişkenleri

API anahtarlarını, veritabanı parolalarını veya ortama özgü ayarları uygulama koduna hiçbir zaman sabit olarak yazmayın. Sys.getenv('VAR_NAME', unset = NA) ile okunan ortam değişkenlerini kullanın. Bunları yerel ortamda .Renviron dosyasında, üretim ortamında ise barındırma platformunun ortam yapılandırmasında ayarlayın.

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

Posit Connect'e Genel Bakış

Posit Connect, Shiny uygulamalarını, R Markdown belgelerini, Plumber API'lerini ve daha fazlasını dağıtmak için kullanılan kurumsal platformdur. Şunları destekler:

  • LDAP veya SAML üzerinden Tek Oturum Açma (SSO)
  • R Markdown raporlarının zamanlanmış olarak çalıştırılması
  • Uygulama düzeyinde erişim denetimi
  • Otomatik ölçeklendirme ve yük dengeleme

Dağıtımda shinyapps.io ile aynı rsconnect::deployApp() iş akışı kullanılır.

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

Dağıtım Öncesi Kontrol Listesi

Bir Shiny uygulamasını üretim ortamına dağıtmadan önce şunları doğrulayın:

  • Tüm dosya yollarında mutlak yollar yerine göreli yollar kullanılıyor.
  • Hassas veriler (API anahtarları, parolalar) ortam değişkenlerinden okunuyor.
  • Paket bağımlılıkları library() veya renv.lock ile açıkça belirtiliyor.
  • Büyük veri dosyaları reactive içinde değil, server.R dosyasının en üstünde bir kez yükleniyor.
  • Hata iletileri son kullanıcılara dahili bilgileri açığa çıkarmıyor.
# 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))
  })
}

Ölçeklendirme Konuları

Shiny uygulamaları oturum tabanlıdır: her kullanıcıya kendi R işlemi (veya çalışanı) atanır. Ölçeklendirme stratejileri:

  • Önceden hesaplanmış verileri yükleyin: Her oturumda hesaplamak yerine başlangıçta yükleyin.
  • Reactive önbelleğe almayı kullanın: Oturumlar arasında paylaşılan maliyetli hesaplamalar için bindCache() kullanın.
  • Birden çok çalışan: Shiny Server Pro ve Posit Connect paralel R işlemleri başlatır.
  • Veritabanı arka uçları: Eşzamanlı veritabanı erişimi için DBI/pool kullanın.
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')
  })
}

Hızlı Kontrol

Dağıtılmış bir Shiny uygulamasında API anahtarlarını ve veritabanı parolalarını yönetmek için önerilen yöntem nedir?

Shiny Uygulamalarını Dağıtmanın Özeti

Shiny Uygulamalarını Dağıtma konusundan önemli çıkarımlar:

  • Dağıtım seçenekleri: shinyapps.io (en kolay), Shiny Server (kendi sunucunuzda barındırma), Posit Connect (kurumsal), Docker.
  • app.R, tüm bağımlılıkları library() ile belirtmelidir; yeniden üretilebilir sürümler için renv::snapshot() kullanın.
  • rsconnect::deployApp(), uygulamayı paketleyip shinyapps.io veya Posit Connect'e gönderir.
  • rocker/shiny ile Docker, en yüksek taşınabilirliği sağlar.
  • Kimlik bilgileri için Sys.getenv() kullanın — gizli bilgileri hiçbir zaman sabit olarak yazmayın.
  • Büyük veri kümelerini oturumlar arasında paylaşmak için başlangıçta (server() dışında) yükleyin.
  • Eşzamanlı veritabanı erişimi için bağlantı havuzlarını (pool paketi) kullanın.
# 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'
)

Sıkça Sorulan Sorular

“Shiny Uygulamalarını Dağıtma” dersi ücretsiz mi?

Evet — “Shiny Uygulamalarını Dağıtma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.

“Shiny Uygulamalarını Dağıtma” dersinde ne öğreneceğim?

Uygulamaları shinyapps.io, Shiny Server ve Docker ile kapsüllenmiş ortamlarda yayımlayın. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

R Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Shiny Uygulamalarını Dağıtma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu R Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Tepkisel Programlamaya Derinlemesine Bakış
  2. Kod Yeniden Kullanımı için Shiny Modülleri
  3. renderUI ve insertUI ile Dinamik Kullanıcı Arayüzü
  4. Shiny Uygulamalarını Dağıtma
← R Academy Sayfasına Dön