deploy-shiny-app
Acerca de
Esta habilidad de Claude ayuda a los desarrolladores a implementar aplicaciones Shiny en shinyapps.io, Posit Connect o contenedores Docker. Maneja configuración, generación de manifiestos, creación de Dockerfiles y verificación de despliegues. Úsela al publicar aplicaciones para usuarios, al pasar del desarrollo local al alojamiento, o al configurar canalizaciones de implementación automatizadas.
Instalación rápida
Claude Code
Recomendadonpx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/deploy-shiny-appCopia y pega este comando en Claude Code para instalar esta habilidad
Documentación
Deploy Shiny App
部署 Shiny 應用於 shinyapps.io、Posit Connect 或 Docker 容器。
適用時機
- 為外部或內部用戶發布 Shiny 應用
- 自本地開發遷至託管環境
- 為 Kubernetes 或 Docker 部署將 Shiny 應用容器化
- 設自動化部署管線
輸入
- 必需:Shiny 應用之路徑
- 必需:部署目標(shinyapps.io、Posit Connect 或 Docker)
- 可選:帳戶名與令牌(供 shinyapps.io/Connect)
- 可選:實例大小偏好
- 可選:自定網域或 URL 路徑
步驟
步驟一:備應用
確保應用自足且可部署:
# Check for missing dependencies
rsconnect::appDependencies("path/to/app")
# For golem apps, ensure DESCRIPTION lists all Imports
devtools::check()
# Verify the app runs cleanly
shiny::runApp("path/to/app")
驗此等檔案存在:
app.R(或ui.R+server.R)renv.lock(建議以供可重現之部署).Rprofile於生產中不調mcptools::mcp_session()
預期: 應用於本地無誤執行,所有依賴已捕獲。
失敗時: 若 appDependencies() 報缺失套件,裝之並更 renv.lock。若應用用系統函式庫(如 gdal、curl),記之以供 Docker 路徑。
步驟二 a:部署至 shinyapps.io
# One-time account setup
rsconnect::setAccountInfo(
name = "your-account",
token = Sys.getenv("SHINYAPPS_TOKEN"),
secret = Sys.getenv("SHINYAPPS_SECRET")
)
# Deploy
rsconnect::deployApp(
appDir = "path/to/app",
appName = "my-app",
appTitle = "My Application",
account = "your-account",
forceUpdate = TRUE
)
將憑證存於 .Renviron(絕不於程式碼中):
# .Renviron
SHINYAPPS_TOKEN=your_token_here
SHINYAPPS_SECRET=your_secret_here
預期: 應用已部署,可於 https://your-account.shinyapps.io/my-app/ 存取。
失敗時: 若認證失敗,於 shinyapps.io 儀表板 > Account > Tokens 重生令牌。若伺服器上套件安裝失敗,查所有套件於 CRAN 可得——shinyapps.io 預設無法自 GitHub 安裝。
步驟二 b:部署至 Posit Connect
# Register server (one-time)
rsconnect::addServer(
url = "https://connect.example.com",
name = "production"
)
# Authenticate (one-time)
rsconnect::connectApiUser(
account = "your-username",
server = "production",
apiKey = Sys.getenv("CONNECT_API_KEY")
)
# Deploy
rsconnect::deployApp(
appDir = "path/to/app",
appName = "my-app",
server = "production",
account = "your-username"
)
預期: 應用已部署,可於 Posit Connect 實例上存取。
失敗時: 若伺服器拒絕連線,驗 API 金鑰與伺服器 URL。若套件安裝失敗,查 Connect 可達所需之儲存庫(CRAN、內部類 CRAN 之儲存庫)。
步驟二 c:以 Docker 部署
建 Dockerfile:
FROM rocker/shiny-verse:4.4.0
# Install system dependencies
RUN apt-get update && apt-get install -y \
libcurl4-openssl-dev \
libssl-dev \
libxml2-dev \
&& rm -rf /var/lib/apt/lists/*
# Install R packages
RUN R -e "install.packages(c('shiny', 'bslib', 'DT', 'plotly'))"
# Copy app
COPY . /srv/shiny-server/myapp/
# Configure Shiny Server
COPY shiny-server.conf /etc/shiny-server/shiny-server.conf
# Expose port
EXPOSE 3838
# Run
CMD ["/usr/bin/shiny-server"]
建 shiny-server.conf:
run_as shiny;
server {
listen 3838;
location / {
site_dir /srv/shiny-server/myapp;
log_dir /var/log/shiny-server;
directory_index on;
}
}
建並執行:
docker build -t myapp:latest .
docker run -p 3838:3838 myapp:latest
預期: 應用於 http://localhost:3838 可達。
失敗時: 若於套件安裝時建置失敗,加缺失之系統函式庫於 apt-get install 行。若應用未載,查 Shiny Server 日誌:docker exec <container> cat /var/log/shiny-server/*.log。
步驟三:驗證部署
# Check the deployed URL responds
response <- httr::GET("https://your-app-url/")
httr::status_code(response) # Should be 200
# For Docker
response <- httr::GET("http://localhost:3838/")
httr::status_code(response)
人工驗證清單:
- 應用載入無誤
- 所有互動元素皆回應
- 資料連線於部署環境中運作
- 認證/授權運作(若有)
預期: 應用以 HTTP 200 回應,所有功能運作。
失敗時: 查特定部署平台之伺服器日誌。常見問題:生產中環境變數未設、資料庫連線用 localhost 而非生產 URL、或僅於本地存在之檔案路徑。
步驟四:配監控(可選)
shinyapps.io
於儀表板 https://www.shinyapps.io/admin/#/applications 監之。
Posit Connect
# Check deployment status via API
connectapi::connect(
server = "https://connect.example.com",
api_key = Sys.getenv("CONNECT_API_KEY")
)
Docker
於 Dockerfile 加健康檢查:
HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
CMD curl -f http://localhost:3838/ || exit 1
預期: 部署目標之監控已配。
失敗時: 若健康檢查間歇失敗,增超時值。Shiny 應用於初始載入時可能回應慢。
驗證
- 應用部署無誤
- 部署之 URL 以 HTTP 200 回應
- 生產中所有互動功能運作
- 環境變數/秘鑰已配(非硬編碼)
- 憑證存於
.Renviron或 CI 秘鑰,非於程式碼 - renv.lock 已提交以供可重現之依賴解析
常見陷阱
- 硬編碼檔案路徑:以
system.file()(供套件資料)或環境變數(供外部資源)替絕對路徑。 - 僅限開發之依賴:不部署載
mcptools::mcp_session()或devtools之.Rprofile。用條件載入或分離設定檔。 - Docker 中缺系統函式庫:sf、curl、xml2 等 R 套件需系統函式庫。加之於 Dockerfile 之
apt-get install。 - shinyapps.io 僅限 CRAN 套件:shinyapps.io 預設僅自 CRAN 安裝。僅限 GitHub 之套件需
remotes套件與部署中之顯式安裝。 - 遺忘環境變數:資料庫憑證、API 金鑰等秘鑰須於部署環境中與程式碼分離地配置。
相關技能
scaffold-shiny-app— 部署前建應用結構create-r-dockerfile— R 專案之詳細 Docker 配置setup-docker-compose— Shiny 與資料庫之多容器設定setup-github-actions-ci— 含自動化部署之 CI/CDoptimize-shiny-performance— 部署至生產前之性能調優
Repositorio GitHub
Habilidades relacionadas
content-collections
MetaEsta habilidad proporciona una configuración probada en producción para Content Collections, una herramienta centrada en TypeScript que transforma archivos Markdown/MDX en colecciones de datos con tipado seguro mediante validación Zod. Úsala al construir blogs, sitios de documentación o aplicaciones Vite + React con mucho contenido para garantizar seguridad de tipos y validación automática de contenido. Abarca todo, desde la configuración del plugin de Vite y compilación MDX hasta la optimización de despliegue y validación de esquemas.
polymarket
MetaEsta habilidad permite a los desarrolladores crear aplicaciones con la plataforma de mercados de predicción Polymarket, incluyendo la integración de API para operaciones y datos de mercado. También proporciona transmisión de datos en tiempo real a través de WebSocket para monitorear operaciones en vivo y actividad del mercado. Úsela para implementar estrategias de trading o crear herramientas que procesen actualizaciones de mercado en tiempo real.
creating-opencode-plugins
MetaEsta habilidad ayuda a los desarrolladores a crear complementos de OpenCode que se conectan a más de 25 tipos de eventos, como comandos, archivos y operaciones LSP. Proporciona la estructura del complemento, las especificaciones de la API de eventos y los patrones de implementación para módulos en JavaScript/TypeScript. Úsala cuando necesites interceptar, monitorear o extender el ciclo de vida del asistente de IA de OpenCode con lógica personalizada basada en eventos.
sglang
MetaSGLang es un framework de alto rendimiento para el servicio de LLM que se especializa en generación rápida y estructurada para JSON, expresiones regulares y flujos de trabajo de agentes utilizando su caché de prefijos RadixAttention. Ofrece una inferencia significativamente más rápida, especialmente para tareas con prefijos repetidos, lo que lo hace ideal para salidas complejas y estructuradas, y conversaciones multiturno. Elige SGLang sobre alternativas como vLLM cuando necesites decodificación restringida o estés construyendo aplicaciones con uso extensivo de prefijos compartidos.
