deploy-shiny-app
について
このClaudeスキルは、開発者がShinyアプリをshinyapps.io、Posit Connect、またはDockerコンテナにデプロイするのを支援します。rsconnectの設定、マニフェスト生成、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-appこのコマンドをClaude Codeにコピー&ペーストしてスキルをインストールします
ドキュメント
name: deploy-shiny-app description: > Desplegar aplicaciones Shiny en shinyapps.io, Posit Connect o contenedores Docker. Cubre la configuración de rsconnect, generación de manifiestos, creación de Dockerfiles y verificación del despliegue. Úsalo al publicar una app Shiny para usuarios externos o internos, al pasar del desarrollo local a un entorno alojado, al containerizar una app Shiny para despliegue en Kubernetes o Docker, o al configurar pipelines de despliegue automatizados. locale: es source_locale: en source_commit: 6f65f316 translator: claude-opus-4-6 translation_date: 2026-03-16 license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: shiny complexity: basic language: R tags: shiny, deployment, shinyapps-io, posit-connect, docker, rsconnect
Deploy Shiny App
Desplegar una aplicación Shiny en shinyapps.io, Posit Connect o un contenedor Docker.
Cuándo Usar
- Al publicar una app Shiny para usuarios externos o internos
- Al pasar del desarrollo local a un entorno alojado
- Al containerizar una app Shiny para despliegue en Kubernetes o Docker
- Al configurar pipelines de despliegue automatizados
Entradas
- Requerido: Ruta a la aplicación Shiny
- Requerido: Destino de despliegue (shinyapps.io, Posit Connect o Docker)
- Opcional: Nombre de cuenta y token (para shinyapps.io/Connect)
- Opcional: Preferencia de tamaño de instancia
- Opcional: Dominio personalizado o ruta de URL
Procedimiento
Paso 1: Preparar la Aplicación
Asegúrate de que la app sea autocontenida y desplegable:
# Verificar dependencias faltantes
rsconnect::appDependencies("path/to/app")
# Para apps golem, asegúrate de que DESCRIPTION liste todos los Imports
devtools::check()
# Verificar que la app se ejecuta limpiamente
shiny::runApp("path/to/app")
Verifica que estos archivos existen:
app.R(oui.R+server.R)renv.lock(recomendado para despliegues reproducibles).RprofileNO llama amcptools::mcp_session()en producción
Esperado: La app se ejecuta localmente sin errores y todas las dependencias están capturadas.
En caso de fallo: Si appDependencies() reporta paquetes faltantes, instálalos y actualiza renv.lock. Si la app usa bibliotecas del sistema (p.ej., gdal, curl), anótalas para el camino de Docker.
Paso 2a: Desplegar en shinyapps.io
# Configuración de cuenta (una vez)
rsconnect::setAccountInfo(
name = "your-account",
token = Sys.getenv("SHINYAPPS_TOKEN"),
secret = Sys.getenv("SHINYAPPS_SECRET")
)
# Desplegar
rsconnect::deployApp(
appDir = "path/to/app",
appName = "my-app",
appTitle = "My Application",
account = "your-account",
forceUpdate = TRUE
)
Almacena las credenciales en .Renviron (nunca en el código):
# .Renviron
SHINYAPPS_TOKEN=your_token_here
SHINYAPPS_SECRET=your_secret_here
Esperado: App desplegada y accesible en https://your-account.shinyapps.io/my-app/.
En caso de fallo: Si la autenticación falla, regenera los tokens en el panel de shinyapps.io > Account > Tokens. Si la instalación del paquete falla en el servidor, verifica que todos los paquetes estén disponibles en CRAN — shinyapps.io no puede instalar desde GitHub por defecto.
Paso 2b: Desplegar en Posit Connect
# Registrar servidor (una vez)
rsconnect::addServer(
url = "https://connect.example.com",
name = "production"
)
# Autenticar (una vez)
rsconnect::connectApiUser(
account = "your-username",
server = "production",
apiKey = Sys.getenv("CONNECT_API_KEY")
)
# Desplegar
rsconnect::deployApp(
appDir = "path/to/app",
appName = "my-app",
server = "production",
account = "your-username"
)
Esperado: App desplegada y accesible en la instancia de Posit Connect.
En caso de fallo: Si el servidor rechaza la conexión, verifica la clave API y la URL del servidor. Si los paquetes no se instalan, verifica que Connect tenga acceso a los repositorios requeridos (CRAN, repos internos tipo CRAN).
Paso 2c: Desplegar con Docker
Crea un Dockerfile:
FROM rocker/shiny-verse:4.4.0
# Instalar dependencias del sistema
RUN apt-get update && apt-get install -y \
libcurl4-openssl-dev \
libssl-dev \
libxml2-dev \
&& rm -rf /var/lib/apt/lists/*
# Instalar paquetes R
RUN R -e "install.packages(c('shiny', 'bslib', 'DT', 'plotly'))"
# Copiar la app
COPY . /srv/shiny-server/myapp/
# Configurar Shiny Server
COPY shiny-server.conf /etc/shiny-server/shiny-server.conf
# Exponer puerto
EXPOSE 3838
# Ejecutar
CMD ["/usr/bin/shiny-server"]
Crea 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;
}
}
Compilar y ejecutar:
docker build -t myapp:latest .
docker run -p 3838:3838 myapp:latest
Esperado: App accesible en http://localhost:3838.
En caso de fallo: Si la compilación falla en la instalación del paquete, añade las bibliotecas del sistema faltantes a la línea apt-get install. Si la app no carga, verifica los registros de Shiny Server: docker exec <container> cat /var/log/shiny-server/*.log.
Paso 3: Verificar el Despliegue
# Verificar que la URL desplegada responde
response <- httr::GET("https://your-app-url/")
httr::status_code(response) # Debe ser 200
# Para Docker
response <- httr::GET("http://localhost:3838/")
httr::status_code(response)
Lista de verificación manual:
- La app carga sin errores
- Todos los elementos interactivos responden
- Las conexiones de datos funcionan en el entorno desplegado
- La autenticación/autorización funciona (si aplica)
Esperado: La app responde con HTTP 200 y todas las funcionalidades funcionan.
En caso de fallo: Revisa los registros del servidor para la plataforma de despliegue específica. Problemas comunes: variables de entorno no configuradas en producción, conexiones de base de datos usando localhost en lugar de URLs de producción, o rutas de archivos que solo existen localmente.
Paso 4: Configurar el Monitoreo (Opcional)
shinyapps.io
Monitoriza a través del panel en https://www.shinyapps.io/admin/#/applications.
Posit Connect
# Verificar el estado del despliegue via API
connectapi::connect(
server = "https://connect.example.com",
api_key = Sys.getenv("CONNECT_API_KEY")
)
Docker
Añade verificación de estado al Dockerfile:
HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
CMD curl -f http://localhost:3838/ || exit 1
Esperado: Monitoreo configurado para el destino de despliegue.
En caso de fallo: Si las verificaciones de estado fallan intermitentemente, aumenta los valores de tiempo de espera. Las apps Shiny pueden ser lentas para responder durante la carga inicial.
Validación
- La app se despliega sin errores
- La URL desplegada responde con HTTP 200
- Todas las funcionalidades interactivas funcionan en producción
- Las variables de entorno/secretos están configurados (no hardcodeados)
- Las credenciales almacenadas en
.Renvirono secretos de CI, no en el código - renv.lock confirmado para resolución reproducible de dependencias
Errores Comunes
- Rutas de archivos hardcodeadas: Reemplaza las rutas absolutas con
system.file()(para datos del paquete) o variables de entorno (para recursos externos). - Dependencias solo de desarrollo: No despliegues
.Rprofileque cargamcptools::mcp_session()odevtools. Usa carga condicional o perfiles separados. - Bibliotecas del sistema faltantes en Docker: Los paquetes R como sf, curl y xml2 necesitan bibliotecas del sistema. Añádelas a la línea
apt-get installdel Dockerfile. - Paquetes solo de CRAN en shinyapps.io: shinyapps.io solo instala desde CRAN por defecto. Los paquetes solo de GitHub necesitan el paquete
remotese instalación explícita en el despliegue. - Variables de entorno olvidadas: Las credenciales de base de datos, claves API y otros secretos deben configurarse en el entorno de despliegue separadamente del código.
Habilidades Relacionadas
scaffold-shiny-app— crear la estructura de la app antes del desplieguecreate-r-dockerfile— configuración detallada de Docker para proyectos Rsetup-docker-compose— configuraciones multi-contenedor para Shiny con bases de datossetup-github-actions-ci— CI/CD incluyendo despliegue automatizadooptimize-shiny-performance— optimización del rendimiento antes de desplegar en producción
GitHub リポジトリ
関連スキル
railway-docs
ドキュメントこのスキルは、Railwayの機能や仕様、特定のドキュメントURLに関する質問に答えるために、最新のRailwayドキュメントを取得します。開発者がRailwayの公式情報源から正確かつ最新の情報を直接受け取れるようにします。ユーザーがRailwayの動作方法について尋ねたり、Railwayドキュメントを参照する際にご利用ください。
n8n-code-python
ドキュメントこのClaudeスキルは、n8nのコードノードでPythonコードを記述するための専門的なガイダンスを提供します。具体的には、Pythonの標準ライブラリの使用方法や、`_input`、`_json`、`_node`といったn8n独自の構文の扱い方を解説します。n8n環境内におけるPythonの制限事項を開発者が理解できるよう支援し、ほとんどのワークフローではJavaScriptの使用を推奨しながらも、特定のデータ変換ニーズに対応するPythonソリューションを提案します。
archon
ドキュメントArchonスキルは、RAGを活用したセマンティック検索とプロジェクト管理をREST APIを通じて提供します。ドキュメントの検索、階層的なプロジェクト/タスクの管理、ドキュメントアップロード機能を備えたナレッジ検索の実行にご利用いただけます。外部ドキュメントを検索する際は、他の情報源を利用する前に常にArchonを最優先で使用してください。
n8n-code-javascript
ドキュメントこのClaudeスキルは、n8nのCodeノードでJavaScriptコードを書くための専門的なガイダンスを提供します。`$input`/`$json`変数、HTTPヘルパー、DateTime処理などの重要なn8n固有の構文を網羅し、一般的なエラーのトラブルシューティングも行います。CodeノードでカスタムJavaScript処理を必要とするn8nワークフローを開発する際にご利用ください。
