Shiny ऐप परिनियोजित करना
ऐप को shinyapps.io, Shiny Server और Docker-कंटेनरीकृत परिवेशों पर प्रकाशित करें।
Shiny ऐप परिनियोजित करना, CoddyKit पर R Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह R Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। R Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
परिनियोजन विकल्पों का अवलोकन
बजट, अपेक्षित ट्रैफ़िक और नियंत्रण संबंधी आवश्यकताओं के आधार पर Shiny ऐप्स को कई प्लेटफ़ॉर्म पर परिनियोजित किया जा सकता है:
- shinyapps.io: Posit द्वारा प्रबंधित क्लाउड होस्टिंग — सबसे आसान विकल्प, निःशुल्क स्तर उपलब्ध।
- Shiny Server (ओपन सोर्स): Linux पर स्वयं-होस्टेड, निःशुल्क।
- Posit Connect: व्यावसायिक, एंटरप्राइज़-स्तरीय प्लेटफ़ॉर्म, R Markdown और Plumber को भी समर्थन देता है।
- Docker + rocker/shiny: अधिकतम पोर्टेबिलिटी और नियंत्रण।
# 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 की संरचना
परिनियोजित किए जा सकने वाले Shiny ऐप में या तो एकल app.R फ़ाइल होनी चाहिए (जिसमें ui और server दोनों हों) या फिर दो फ़ाइलें ui.R और server.R होनी चाहिए। सभी पैकेज निर्भरताओं को सबसे ऊपर library() के साथ घोषित किया जाना चाहिए। डेटा फ़ाइलें उसी निर्देशिका में होनी चाहिए या ऐप के सापेक्ष पहुँच योग्य होनी चाहिए।
# 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 पैकेज shinyapps.io और Posit Connect पर परिनियोजन संभालता है। पहले अपने खाते के क्रेडेंशियल कॉन्फ़िगर करें, फिर ऐप की निर्देशिका से rsconnect::deployApp() चलाएँ। यह सभी R फ़ाइलों, डेटा और एक मैनिफ़ेस्ट को अपने-आप एक पैकेज में शामिल कर देता है।
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 सेटअप
shinyapps.io सार्वजनिक URL पाने का सबसे तेज़ तरीका है। shinyapps.io पर निःशुल्क खाता बनाएँ, डैशबोर्ड से अपना टोकन और सीक्रेट कॉपी करें, और setAccountInfo() चलाएँ। निःशुल्क स्तर पर हर महीने 25 सक्रिय घंटों के साथ 5 ऐप्स की अनुमति है।
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 ओपन सोर्स
Shiny Server Linux (Ubuntu/RHEL) पर चलता है और /srv/shiny-server/ निर्देशिका से Shiny ऐप्स उपलब्ध कराता है। प्रत्येक उपनिर्देशिका http://server:3838/subdirname/ पर एक ऐप बन जाती है। यह निःशुल्क है और सर्वर की क्षमता के भीतर असीमित समवर्ती उपयोगकर्ताओं का समर्थन करता है।
# 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 के साथ Docker
rocker/shiny Docker इमेज पहले से कॉन्फ़िगर किया हुआ Shiny Server प्रदान करती है। अपने ऐप की निर्देशिका को कंटेनर में माउंट करें और उसे तुरंत उपलब्ध कराएँ। Docker पुनरुत्पादकता सुनिश्चित करता है — वही इमेज किसी भी होस्ट पर एक समान चलती है।
# 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
renv प्रोजेक्ट-स्तर की पैकेज लाइब्रेरी बनाता है और एक लॉकफ़ाइल (renv.lock) में पैकेज के सटीक संस्करण दर्ज करता है। परिनियोजन के समय यह लॉकफ़ाइल सुनिश्चित करती है कि सर्वर या Docker इमेज विकास के दौरान उपयोग किए गए पैकेज के बिल्कुल वही संस्करण इंस्टॉल करे।
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कॉन्फ़िगरेशन के लिए पर्यावरण चर
API कुंजियों, डेटाबेस पासवर्ड या पर्यावरण-विशिष्ट सेटिंग्स को ऐप कोड में कभी हार्डकोड न करें। इन्हें Sys.getenv('VAR_NAME', unset = NA) से पढ़े जाने वाले पर्यावरण चरों में रखें। इन्हें स्थानीय रूप से .Renviron में और प्रोडक्शन के लिए होस्टिंग प्लेटफ़ॉर्म के पर्यावरण कॉन्फ़िगरेशन में सेट करें।
# 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 का अवलोकन
Posit Connect Shiny ऐप्स, R Markdown दस्तावेज़ों, Plumber API और अन्य सामग्री को परिनियोजित करने का एंटरप्राइज़ प्लेटफ़ॉर्म है। यह निम्नलिखित का समर्थन करता है:
- LDAP या SAML के माध्यम से सिंगल साइन-ऑन (SSO)
- R Markdown रिपोर्ट का निर्धारित समय पर निष्पादन
- ऐप स्तर पर पहुँच नियंत्रण
- स्वचालित स्केलिंग और लोड संतुलन
परिनियोजन में shinyapps.io जैसी ही rsconnect::deployApp() कार्यप्रणाली का उपयोग होता है।
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')परिनियोजन-पूर्व जाँच-सूची
Shiny ऐप को प्रोडक्शन में परिनियोजित करने से पहले जाँच लें:
- सभी फ़ाइल पथ पूर्ण पथों के बजाय सापेक्ष पथों का उपयोग करते हैं।
- संवेदनशील डेटा (API कुंजियाँ, पासवर्ड) पर्यावरण चरों से पढ़ा जाता है।
- पैकेज निर्भरताएँ
library()याrenv.lockके माध्यम से स्पष्ट रूप से घोषित हैं। - बड़ी डेटा फ़ाइलें server.R के शीर्ष पर एक बार लोड की जाती हैं, reactive के अंदर नहीं।
- त्रुटि संदेश अंतिम उपयोगकर्ताओं को आंतरिक जानकारी उजागर नहीं करते।
# 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))
})
}स्केलिंग संबंधी विचार
Shiny ऐप सत्र-आधारित होते हैं: प्रत्येक उपयोगकर्ता को अपनी R प्रक्रिया (या worker) मिलती है। स्केलिंग की रणनीतियाँ:
- प्रत्येक सत्र में गणना करने के बजाय स्टार्टअप पर पहले से गणना किया हुआ डेटा लोड करें।
- सत्रों के बीच साझा की जाने वाली महँगी गणनाओं के लिए
bindCache()के साथ reactive कैशिंग का उपयोग करें। - एकाधिक worker: Shiny Server Pro और Posit Connect समानांतर R प्रक्रियाएँ शुरू करते हैं।
- डेटाबेस बैकएंड: समवर्ती DB पहुँच के लिए DBI/pool का उपयोग करें।
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')
})
}त्वरित जाँच
परिनियोजित Shiny ऐप में API कुंजियों और डेटाबेस पासवर्ड को संभालने का अनुशंसित तरीका क्या है?
Shiny ऐप्स के परिनियोजन का पुनरावलोकन
Shiny ऐप्स के परिनियोजन से मुख्य बातें:
- परिनियोजन विकल्प: shinyapps.io (सबसे आसान), Shiny Server (स्वयं-होस्टेड), Posit Connect (एंटरप्राइज़), Docker।
- app.R में सभी निर्भरताएँ
library()के साथ घोषित होनी चाहिए; पुनरुत्पादक संस्करणों के लिएrenv::snapshot()का उपयोग करें। rsconnect::deployApp()पैकेज बनाकर उसे shinyapps.io या Posit Connect पर भेजता है।rocker/shinyके साथ Docker अधिकतम पोर्टेबिलिटी प्रदान करता है।- क्रेडेंशियल के लिए
Sys.getenv()का उपयोग करें — सीक्रेट को कभी हार्डकोड न करें। - सत्रों के बीच साझा करने के लिए बड़े डेटासेट स्टार्टअप पर (
server()के बाहर) लोड करें। - समवर्ती डेटाबेस पहुँच के लिए कनेक्शन पूल (
poolपैकेज) का उपयोग करें।
# 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'
)एआई शिक्षक के साथ R सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 43
- पाठ
- 159
अक्सर पूछे जाने वाले प्रश्न
क्या “Shiny ऐप परिनियोजित करना” पाठ निःशुल्क है?
हाँ — R Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Shiny ऐप परिनियोजित करना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। R Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Shiny ऐप परिनियोजित करना” में मैं क्या सीखूँगा?
ऐप को shinyapps.io, Shiny Server और Docker-कंटेनरीकृत परिवेशों पर प्रकाशित करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ R Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या R Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर R Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“Shiny ऐप परिनियोजित करना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस R Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर R Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- रिएक्टिव प्रोग्रामिंग का गहन अध्ययन
- कोड के पुनः उपयोग के लिए Shiny मॉड्यूल
- renderUI और insertUI से डायनेमिक UI
- Shiny ऐप परिनियोजित करना