deploy-shiny-app
정보
이 스킬은 Shiny 애플리케이션을 shinyapps.io, Posit Connect 또는 Docker 컨테이너에 배포합니다. 구성 관리, 매니페스트 생성, Dockerfile 작성, 배포 검증을 처리합니다. 사용자용 앱을 게시하거나 로컬 개발에서 호스팅 환경으로 전환하거나 Kubernetes/Docker 배포를 위해 컨테이너화할 때 사용하세요.
빠른 설치
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-appClaude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요
문서
部署 Shiny 應用
將 Shiny 應用部至 shinyapps.io、Posit Connect 或 Docker 容器。
用時
- 為外或內用者發布 Shiny 應用
- 由本地開發移至宿主環境
- 將 Shiny 應用容器化供 Kubernetes 或 Docker 部署
- 立自動部署流水
入
- 必要: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 路。
第二步甲:部至 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 裝。
第二步乙:部至 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 樣庫)。
第二步丙:以 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 鑰及他秘密必須於部署環境外碼獨配。
Related Skills
scaffold-shiny-app— 部前建應用結構create-r-dockerfile— R 項目之詳 Docker 配setup-docker-compose— Shiny 與數據庫之多容器設setup-github-actions-ci— CI/CD 含自動部署optimize-shiny-performance— 部至產前之性能調
GitHub 저장소
연관 스킬
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을 선택하십시오.
