deploy-shiny-app
О программе
Этот навык развертывает приложения 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-almanacgit 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(orui.R+server.R)renv.lock(recommend reproducible).Rprofiledoes NOT callmcptools::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:
- Loads clean
- Interactive els respond
- Data conns work in prod
- 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
.Rprofilew/mcptools::mcp_session()ordevtools. 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 deploycreate-r-dockerfile— Docker config for Rsetup-docker-compose— multi-container w/ DBssetup-github-actions-ci— CI/CD auto deployoptimize-shiny-performance— perf tune pre-prod
GitHub репозиторий
Похожие навыки
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, когда вам требуется ограниченное декодирование или вы создаете приложения с интенсивным совместным использованием префиксов.
