MCP HubMCP Hub
Вернуться к навыкам

deploy-shiny-app

pjt222
Обновлено Yesterday
1 просмотров
17
2
17
Посмотреть на GitHub
Метаaiautomation

О программе

Этот навык развертывает приложения 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 app → shinyapps.io / Posit Connect / Docker.

Use When

  • Publish Shiny → users
  • Local → hosted env
  • Containerize → K8s/Docker
  • Auto deploy pipelines

In

  • Required: App path
  • Required: Target (shinyapps.io / Posit Connect / Docker)
  • Optional: Account + token
  • Optional: Instance size
  • Optional: Custom domain/URL

Do

Step 1: Prep app

Self-contained + deployable:

# 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")

Files:

  • app.R (or ui.R + server.R)
  • renv.lock (recommend reproducible)
  • .Rprofile does NOT call mcptools::mcp_session() in prod

→ App runs locally clean + all deps captured.

If err: appDependencies() missing pkgs → install + update renv.lock. Sys libs (gdal, curl) → note for Docker path.

Step 2a: 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
)

Creds → .Renviron (never code):

# .Renviron
SHINYAPPS_TOKEN=your_token_here
SHINYAPPS_SECRET=your_secret_here

→ Deployed at https://your-account.shinyapps.io/my-app/.

If err: Auth fail → regen tokens at dashboard > Account > Tokens. Pkg install fail → CRAN only default, not GitHub.

Step 2b: 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"
)

→ Deployed on Connect instance.

If err: Server rejects → verify API key + URL. Pkg install fail → check Connect repo access (CRAN, internal).

Step 2c: 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;
  }
}

Build + run:

docker build -t myapp:latest .
docker run -p 3838:3838 myapp:latest

http://localhost:3838.

If err: Build fail on pkg install → add sys libs to apt-get install. App no load → docker exec <container> cat /var/log/shiny-server/*.log.

Step 3: Verify

# 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)

Manual checklist:

  1. Loads clean
  2. Interactive els respond
  3. Data conns work in prod
  4. Auth works (if applicable)

→ HTTP 200 + all features work.

If err: Server logs per platform. Common: env vars not set in prod, DB conns using localhost, local-only file paths.

Step 4: Monitoring (optional)

shinyapps.io

Dashboard: 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

Health check:

HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
  CMD curl -f http://localhost:3838/ || exit 1

→ Monitoring configured.

If err: Health intermittent → increase timeout. Shiny slow initial load.

Check

  • Deploys clean
  • URL HTTP 200
  • Interactive features work
  • Env vars/secrets config'd (not hardcoded)
  • Creds → .Renviron / CI secrets
  • renv.lock committed

Traps

  • Hardcoded paths: → system.file() or env vars
  • Dev-only deps: Don't deploy .Rprofile w/ mcptools::mcp_session() or devtools. Conditional load or separate profiles.
  • Missing sys libs in Docker: sf, curl, xml2 need sys libs → apt-get install
  • CRAN-only on shinyapps.io: GH pkgs need remotes + explicit install
  • Forgotten env vars: DB creds, API keys config'd in deploy env separate from code

  • scaffold-shiny-app — app structure before deploy
  • create-r-dockerfile — Docker config for R
  • setup-docker-compose — multi-container w/ DBs
  • setup-github-actions-ci — CI/CD auto deploy
  • optimize-shiny-performance — perf tune pre-prod

GitHub репозиторий

pjt222/agent-almanac
Путь: i18n/caveman-ultra/skills/deploy-shiny-app
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

Похожие навыки

content-collections

Мета

Этот навык предоставляет проверенную в продакшене настройку для Content Collections — TypeScript-ориентированного инструмента, который преобразует файлы Markdown/MDX в типобезопасные коллекции данных с валидацией Zod. Используйте его при создании блогов, сайтов документации или контентных приложений на Vite + React для обеспечения типобезопасности и автоматической проверки содержимого. Он охватывает всё: от настройки плагина Vite и компиляции MDX до оптимизации развертывания и валидации схем.

Просмотреть навык

polymarket

Мета

Этот навык позволяет разработчикам создавать приложения на платформе прогнозных рынков Polymarket, включая интеграцию с API для торговли и получения рыночных данных. Он также обеспечивает потоковую передачу данных в реальном времени через WebSocket для отслеживания текущих сделок и рыночной активности. Используйте его для реализации торговых стратегий или создания инструментов, обрабатывающих обновления рынка в реальном времени.

Просмотреть навык

creating-opencode-plugins

Мета

Этот навык помогает разработчикам создавать плагины OpenCode, которые подключаются к более чем 25 типам событий, таким как команды, файлы и операции LSP. Он предоставляет структуру плагина, спецификации API событий и шаблоны реализации для модулей на JavaScript/TypeScript. Используйте его, когда вам нужно перехватывать, отслеживать или расширять жизненный цикл ассистента OpenCode AI с помощью пользовательской событийно-ориентированной логики.

Просмотреть навык

sglang

Мета

SGLang — это высокопроизводительный фреймворк для обслуживания больших языковых моделей (LLM), специализирующийся на быстрой структурированной генерации JSON, regex и рабочих процессов агентов с использованием кэширования префиксов RadixAttention. Он обеспечивает значительно более высокую скорость вывода, особенно для задач с повторяющимися префиксами, что делает его идеальным для сложных структурированных результатов и многократных диалогов. Выбирайте SGLang вместо альтернатив, таких как vLLM, когда вам требуется ограниченное декодирование или вы создаете приложения с интенсивным совместным использованием префиксов.

Просмотреть навык