MCP HubMCP Hub
스킬 목록으로 돌아가기

deploy-shiny-app

pjt222
업데이트됨 2 days ago
3 조회
17
2
17
GitHub에서 보기
메타aiautomation

정보

이 Claude Skill은 개발자가 Shiny 애플리케이션을 shinyapps.io, Posit Connect 또는 Docker 컨테이너에 배포할 수 있도록 지원합니다. 구성 설정, 매니페스트 생성, Dockerfile 작성 및 배포 검증을 처리합니다. 사용자용 앱을 게시하거나, 로컬 개발 환경에서 호스팅 환경으로 전환하거나, 자동화된 배포 파이프라인을 설정할 때 활용하세요.

빠른 설치

Claude Code

추천
기본
npx skills add pjt222/agent-almanac -a claude-code
플러그인 명령대체
/plugin add https://github.com/pjt222/agent-almanac
Git 클론대체
git 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)

人工驗證清單:

  1. 應用載入無誤
  2. 所有互動元素皆回應
  3. 資料連線於部署環境中運作
  4. 認證/授權運作(若有)

預期: 應用以 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/CD
  • optimize-shiny-performance — 部署至生產前之性能調優

GitHub 저장소

pjt222/agent-almanac
경로: i18n/wenyan-lite/skills/deploy-shiny-app
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

연관 스킬

content-collections

메타

이 스킬은 콘텐츠 콜렉션(Content Collections)을 위한 프로덕션 검증된 설정을 제공합니다. 콘텐츠 콜렉션은 Markdown/MDX 파일을 Zod 검증이 포함된 타입 안전한 데이터 콜렉션으로 변환해주는 TypeScript 최우선 도구입니다. 블로그, 문서 사이트 또는 콘텐츠 중심의 Vite + React 애플리케이션을 구축할 때 타입 안전성과 자동 콘텐츠 검증을 보장하기 위해 사용하세요. Vite 플러그인 구성과 MDX 컴파일부터 배포 최적화 및 스키마 검증에 이르기까지 모든 것을 다룹니다.

스킬 보기

polymarket

메타

이 스킬은 개발자들이 Polymarket 예측 시장 플랫폼을 활용한 애플리케이션을 구축할 수 있도록 지원하며, 거래 및 시장 데이터를 위한 API 통합 기능을 포함합니다. 또한 WebSocket을 통한 실시간 데이터 스트리밍을 제공하여 실시간 거래와 시장 활동을 모니터링할 수 있습니다. 이를 통해 거래 전략을 구현하거나 실시간 시장 업데이트를 처리하는 도구를 생성하는 데 활용할 수 있습니다.

스킬 보기

creating-opencode-plugins

메타

이 스킬은 개발자들이 명령어, 파일, LSP 작업 등 25개 이상의 이벤트 유형에 연결되는 OpenCode 플러그인을 만들 수 있도록 돕습니다. JavaScript/TypeScript 모듈을 위한 플러그인 구조, 이벤트 API 명세, 구현 패턴을 제공합니다. OpenCode AI 어시스턴트의 라이프사이클을 사용자 정의 이벤트 기반 로직으로 가로채거나, 모니터링하거나, 확장해야 할 때 사용하세요.

스킬 보기

sglang

메타

SGLang은 RadixAttention 프리픽스 캐싱을 활용하여 JSON, 정규식, 에이전트 워크플로우를 위한 고속 구조화 생성에 특화된 고성능 LLM 서빙 프레임워크입니다. 특히 반복되는 프리픽스가 있는 작업에서 상당히 빠른 추론 속도를 제공하여 복잡한 구조화 출력 및 다중 턴 대화에 이상적입니다. 제약 디코딩이 필요하거나 광범위한 프리픽스 공유가 있는 애플리케이션을 구축할 때는 vLLM과 같은 대안보다 SGLang을 선택하십시오.

스킬 보기