Writing Skills
writing-skills
效率与协作技能,来自 obra/superpowers,查看原文获取完整用途和操作说明。
deploy-shiny-app【部署与运维】Shinyアプリケーションをshinyapps.io、Posit Connect、またはDockerコンテナに デプロイします。rsconnectの設定、マニフェストの生成、Dockerfileの作成、 デプロイメントの検証を扱います。外部または内部ユーザー向けにShinyアプリを 公開するとき、ローカル開発からホスト環境に移行するとき、KubernetesまたはDocker デプロイメント用にShinyアプリをコンテナ化するとき、または自動デプロイメント パイプラインをセットアップするときに使用します。
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
ShinyアプリケーションをShinyapps.io、Posit Connect、またはDockerコンテナにデプロイします。
アプリが自己完結型でデプロイ可能であることを確認します:
# 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パス用にメモしてください。
# 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からインストールできません。
# 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ライクなリポジトリ)にアクセスできるか確認してください。
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を使ったデータベース接続、またはローカルにしか存在しないファイルパス。
https://www.shinyapps.io/admin/#/applicationsのダッシュボードでモニタリングします。
# Check deployment status via API
connectapi::connect(
server = "https://connect.example.com",
api_key = Sys.getenv("CONNECT_API_KEY")
)
DockerfileにHEALTHCHECKを追加します:
HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
CMD curl -f http://localhost:3838/ || exit 1
期待結果: デプロイメントターゲットのモニタリングが設定されています。
失敗時: ヘルスチェックが断続的に失敗する場合はタイムアウト値を増やしてください。Shinyアプリは初回読み込み時に応答が遅い場合があります。
.RenvironまたはCIシークレットに保存されており、コードには書かれていないsystem.file()(パッケージデータ用)または環境変数(外部リソース用)に置き換えてください。mcptools::mcp_session()やdevtoolsを読み込む.Rprofileをデプロイしないでください。条件付き読み込みまたは別のプロファイルを使用してください。apt-get installに追加してください。remotesパッケージとデプロイメント内での明示的なインストールが必要です。scaffold-shiny-app — デプロイ前のアプリ構造の作成create-r-dockerfile — Rプロジェクトの詳細なDocker設定setup-docker-compose — データベースを持つShiny用のマルチコンテナセットアップsetup-github-actions-ci — 自動デプロイメントを含むCI/CDoptimize-shiny-performance — 本番デプロイ前のパフォーマンスチューニング