deploy-shiny-app
关于
This Claude Skill helps developers deploy Shiny applications to shinyapps.io, Posit Connect, or Docker containers. It handles configuration, manifest generation, Dockerfile creation, and deployment verification. Use it when publishing apps for users, moving from local development to hosting, or setting up automated deployment pipelines.
快速安装
Claude Code
推荐npx 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-app在 Claude Code 中复制并粘贴此命令以安装该技能
技能文档
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— 部署至生產前之性能調優
GitHub 仓库
相关推荐技能
content-collections
元Content Collections 是一个 TypeScript 优先的构建工具,可将本地 Markdown/MDX 文件转换为类型安全的数据集合。它专为构建博客、文档站和内容密集型 Vite+React 应用而设计,提供基于 Zod 的自动模式验证。该工具涵盖从 Vite 插件配置、MDX 编译到生产环境部署的完整工作流。
polymarket
元这个Claude Skill为开发者提供完整的Polymarket预测市场开发支持,涵盖API调用、交易执行和市场数据分析。关键特性包括实时WebSocket数据流,可监控实时交易、订单和市场动态。开发者可用它构建预测市场应用、实施交易策略并集成实时市场预测功能。
creating-opencode-plugins
元该Skill帮助开发者创建OpenCode插件,用于接入命令、文件、LSP等25+种事件。它提供了插件结构、事件API规范和JavaScript/TypeScript实现模式,适合需要拦截操作、扩展功能或自定义事件处理的场景。开发者可通过它快速构建响应式模块来增强OpenCode AI助手的能力。
sglang
元SGLang是一个专为LLM设计的高性能推理框架,特别适用于需要结构化输出的场景。它通过RadixAttention前缀缓存技术,在处理JSON、正则表达式、工具调用等具有重复前缀的复杂工作流时,能实现极速生成。如果你正在构建智能体或多轮对话系统,并追求远超vLLM的推理性能,SGLang是理想选择。
