Communitygithub.com

Hainrixz/all-deploy

웹사이트, 웹앱, API, 에이전트를 엄격한 배포 전 감사 및 미리보기 → 상태 확인 → 프로덕션 절차를 거쳐 인터넷에 배포합니다.

all-deploy란 무엇인가요?

all-deploy 스킬은 사용자의 웹 프로젝트를 감지하고, 보안 및 구성 감사를 실행하며, 가장 적합한 호스팅 제공업체로 자동 라우팅하여 배포하는 강력한 도구입니다. Claude Code, Cursor, Codex와 같은 AI 에이전트 플랫폼과 함께 사용하도록 설계되었습니다. 이 스킬의 핵심 가치는 각 대상 CLI를 직접 사용하는 대신 프로젝트를 감지, 감사, 적절한 CLI로 라우팅하는 '메타-오케스트레이터' 역할을 한다는 점입니다. HTML/CSS/JS 페이지, Astro, Hugo, Next.js, Nuxt, SvelteKit, FastAPI, Flask, Express, MCP 서버, Claude Agent SDK 스크립트, Python 워커, Dockerized 프로젝트 등 다양한 프로젝트 유형을 지원합니다. 배포 대상으로는 Cloudflare Pages, Netlify, GitHub Pages와 같은 무료 정적 호스트부터 Vercel, Railway, Docker+SSH VPS, cloudflared 터널까지 포함됩니다. 또한 프로젝트를 로컬에서 실행하는 옵션도 제공합니다. 스킬은 엄격한 사전 배포 감사, 모든 프로덕션 배포 전 필수 미리보기/상태 확인, 시크릿 무결성과 같은 안전 규칙을 시행합니다. 사용자가 '/all-deploy', '/deploy', 'deploy this', 'ship this', 'get this online' 등으로 배포를 요청하거나 로컬 실행을 요청하면 자동으로 활성화됩니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add Hainrixz/all-deploy

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

all-deploy은(는) 무엇을 하나요?

프로젝트를 감지하고, 감사하며, 올바른 호스트로 배포하여 확인된 미리보기 → 프로덕션 절차를 제공합니다. 고유한 가치는 CLI를 래핑하는 것이 아니라 감지 → 감사 → 올바른 CLI로 라우팅하는 데 있습니다.

설정 (기본 동작을 변경하려면 이 줄을 편집하세요)

CONFIRMATION_MODE: ask_at_start
  # ask_at_start (기본값): 각 클라우드 배포 시작 시 전체 자동 또는 단계별 실행 여부를 묻습니다.
  # full_auto: 질문을 건너뜁니다. 감사 → 미리보기 → 프로덕션을 프로덕션 전 5초 ESC 창과 함께 실행합니다.
  # always_ask: 질문을 건너뜁니다. 프로덕션 전에 명시적인 "예"가 필요합니다.
VISUAL_VERIFY: false           # true → chrome-bridge-automation을 통한 스크린샷 미리보기 (프론트엔드 전용)
ALLOW_DIRTY_TREE: false        # true → "HEAD가 깨끗함" 감사 확인을 건너뜁니다.

기본 ask_at_start는 단독 작성자와 커뮤니티 사용자 모두에게 적합합니다. 모드 선택은 런타임으로 이동합니다. full_auto 또는 always_ask로 고정하는 것은 대화형으로 질문에 답할 수 없는 자동화에서 스킬을 래핑할 때만 유용합니다.

엄격한 규칙 (절대 위반하지 마십시오 - 이것은 안전 계약입니다)

  1. 감사를 절대 우회하거나 완화하지 마십시오. 감사는 full_auto 모드에서 사용자의 의도와 라이브 인프라 사이의 유일한 게이트입니다. 검사를 실행할 수 없으면 건너뛰는 이유가 아니라 그 자체가 차단입니다.
  2. 2xx/3xx 상태 확인이 포함된 성공적인 미리보기 전에는 절대 프로덕션에 배포하지 마십시오. 미리보기 → 요약 → 프로덕션. 동일한 세션에서 녹색 미리보기 없이 프로덕션은 없습니다. (일부 정적 대상에는 미리보기 환경이 없습니다(예: GitHub Pages, 브라우저 업로드). 이 경우 녹색 아티팩트는 정확한 게시 디렉토리에서 동일한 방식으로 상태 확인된 로컬 python3 -m http.server 실행입니다. 게이트는 필수로 유지되며, 제공되는 위치만 변경됩니다.)
  3. 절대 시크릿을 커밋, 출력 또는 로그에 기록하지 마십시오. 추적된 파일에서 시크릿이 발견되면 중단하고 별도의 사용자 승인 단계로 제거 + 기록 재작성을 안내하십시오. 시크릿 값은 요약, 로그 또는 커밋 메시지에 절대 나타나지 않습니다.
  4. 절대 타사 CLI를 자동 설치하거나 자동 인증하지 마십시오. ! 접두사(예: ! vercel login, ! railway login)를 사용하여 사용자에게 명령을 전달하십시오.
  5. 절대 대상 CLI를 플래그를 숨기는 사용자 지정 스크립트로 래핑하지 마십시오. 참조 파일은 사용자가 읽고 확인할 수 있는 실제 명령을 문서화합니다.
  6. 절대 diff를 먼저 보여주지 않고 감사를 통과하도록 코드를 수정하지 마십시오. .gitignore, .env.example, Dockerfile 스캐폴딩, 포트 바인딩 수정 - 모두 표시되고 적용 전에 승인되어야 합니다.
  7. ALLOW_DIRTY_TREE: true가 설정되지 않은 한 절대 더티 작업 트리에서 배포하지 마십시오. 커밋되지 않은 변경 사항은 롤백을 복잡하게 만듭니다.
  8. "잠시만"을 존중하십시오. 미리보기와 프로덕션 사이에 망설임을 나타내는 사용자의 발언(wait/hold/stop/not yet/abort)은 프로덕션 단계를 깨끗하게 중단합니다.

두 가지 모드

사용자의 표현에서 미리 결정하십시오:

  • 클라우드 배포 (기본값) — 아래의 0~6단계. 트리거: "deploy", "ship", "push to prod", "get it online", "/all-deploy".
  • 로컬 실행 — 0, 1, 2단계 후 로컬 실행 단계. 트리거: "run it locally", "corre esto localmente", "/all-deploy local", "just run it", 또는 --local.

프로젝트 클래스 (클라우드 배포 내에서 결정되며 세 번째 모드가 아님)

클라우드 배포는 두 가지 형태를 포함하며, 클래스는 감지되며 절대 묻지 않습니다:

  • app (기본값) — 런타임, 시작 명령 및 포트가 있는 서비스.
  • static — 웹사이트: 호스트가 CDN에 복사하는 파일 폴더. 서버, 포트, 런타임이 없습니다. 아래 0.0단계에서 분류됩니다. 0, 2, 3.2, 4, 4.5, 5 및 6단계가 변경됩니다. 전체 조정 세트는 references/static-sites.md를 읽으십시오.

로컬 실행 모드에서는 범위가 지정된 감사를 실행합니다(추적된 파일의 시크릿, 시작 명령 존재 여부, 정상적인 포트 바인딩만 확인). 생략: git-remote, 깨끗한 HEAD, npm audit/pip-audit, .env.example 완전성, 환경 변수 전달(전달할 원격이 없음). 그런 다음 감지된 시작 명령(npm run dev / uvicorn main:app --reload --host 0.0.0.0 --port $PORT / docker compose up 등)을 포그라운드에서 실행하고 Monitor를 통해 출력을 스트리밍합니다. 사용자가 로컬 서버도 노출하도록 요청하면 references/targets/cloudflared-tunnel.md로 연결합니다. 이 파일의 다른 모든 내용은 클라우드 배포에 관한 것입니다.

클라우드 배포 워크플로우

모드 선택 (ask_at_start 모드에서 0단계 전에 실행)

이 실행에 대한 유효한 CONFIRMATION_MODE를 결정합니다:

  1. 사용자의 호출에 명시적 모드 마커가 포함된 경우 이를 채택하고 질문을 건너<0xEB><0x9B><0x84>니다:

    • full_auto 트리거: "auto", "full auto", "auto deploy", "deploy auto", "/all-deploy auto", "yolo".
    • always_ask 트리거: "step", "step by step", "one at a time", "confirm each step", "paso a paso", "/all-deploy step".
  2. 그렇지 않고 위의 구성 블록에서 CONFIRMATION_MODE가 full_auto 또는 always_ask로 고정된 경우 해당 값을 사용하고 질문을 건너<0xEB><0x9B><0x84>니다.

  3. 그렇지 않은 경우 (ask_at_start, 기본값) 0단계가 실행되기 전에 사용자에게 한 번 묻습니다:

    "시작하기 전에 — 배포를 어떻게 실행할까요?

    1. 전체 자동 — 감사 → 미리보기 → 프로덕션 승격을 순서대로 실행합니다. 프로덕션은 5초 ESC 창 후에 실행됩니다. 2. 단계별 — 감사, 미리보기 및 프로덕션 사이에 확인을 위해 중지합니다.

    'auto' 또는 'step'으로 답변해 주세요."

선택된 모드는 이번 실행에만 적용됩니다. 향후 호출 시 다시 질문합니다(트리거 구문을 통해 사용자가 명시적으로 선택하거나 구성 블록이 고정되지 않은 경우).

어느 지점에서든 "Wait" / "stop" / "hold"는 두 모드 모두에서 프로덕션 단계를 중단합니다(엄격한 규칙 8). 차이점은 프로덕션 명령이 실행되기 전에 5초 ESC 창(full_auto)을 얻는지 아니면 명시적인 "yes" 필수 일시 중지(always_ask)를 얻는지입니다.

0.0단계 — 프로젝트 클래스 (먼저 실행, 전제 조건 전에)

루트 또는 dist/, _site/, public/, build/, out/, site/에 HTML 파일이 있고 루트에 package.json, pyproject.toml, requirements.txt, Pipfile, Dockerfile, docker-compose.yml, Procfile, go.mod, Gemfile이 없는 경우 PROJECT_CLASS: static으로 설정합니다. 그렇지 않으면 PROJECT_CLASS: app입니다.

매니페스트 테스트는 index.html도 있는 Vite/Next/Astro 저장소를 앱 파이프라인에 유지하는 방법입니다. static인 경우 지금 references/static-sites.md를 읽으십시오. 해당 단계 표가 아래의 모든 것을 관장합니다.

이것은 의도적으로 0단계보다 먼저 실행됩니다. 전제 조건을 먼저 확인하면 이전에는 필요하지 않은 git 원격이 누락된 HTML 폴더가 튕겨 나갔습니다.

0단계 — 전제 조건 (대상 독립적)

순서대로 확인하십시오. 각 실패는 사용자를 위한 ! 명령으로 중단됩니다.

  1. Git 저장소. git rev-parse --is-inside-work-tree를 실행합니다. 저장소가 아니면 run locally 모드(git이 필요 없음) 또는 PROJECT_CLASS: static (정적 사이트는 일반 폴더에서 배포 가능)이 아닌 한 중단합니다. 저장소가 없다고 말하고 계속합니다. 결정은 3.2단계에서 내려집니다. 요청 없이 git init을 실행하지 마십시오.
  2. Git 원격 (클라우드 배포 전용). git remote -v를 실행합니다. 원격이 구성되지 않은 경우 대상이 docker-vps(원격 없이 배포 가능) 또는 PROJECT_CLASS: static이고 대상이 GitHub Pages 또는 Render가 아닌 경우에만 중단합니다. Cloudflare Pages 직접 업로드 및 Netlify Drop은 저장소가 전혀 필요하지 않습니다. 이 두 번째 조항은 3단계 후에 재평가됩니다.
  3. 언어 경계. v1은 Node 및 Python을 식별합니다. 기본 언어가 Go, Rust, Ruby, Elixir, Bun 또는 Deno인 경우 다음 메시지와 함께 종료합니다: "v1은 Node/Python 에코시스템만 감지합니다. 대상 CLI(vercel, railway, flyctl, docker)를 직접 실행하십시오. 이 언어에 대한 지원은 v2에서 계획됩니다." PROJECT_CLASS: static인 경우 적용되지 않습니다 — HTML/CSS/JS는 빌드 단계의 유무에 관계없이 항상 범위 내에 있습니다.

대상-CLI 인증은 대상이 선택된 후 3.5단계(아래)에서 확인됩니다.

0.5단계 — 권한 프롬프트 시딩 (첫 번째 실행만)

사용자에게 알립니다: "이 프로젝트에 fewer-permission-prompts 스킬을 한 번 실행하여 배포 허용 목록으로 .claude/settings.json을 시드하십시오. 그렇지 않으면 모든 단계에서 프롬프트가 표시됩니다." 포인터만 제공합니다. 여기서 사용자의 설정을 편집하지 마십시오.

1단계 — 감지

전체 지문 테이블을 보려면 references/project-types.md(스킬 상대 경로 — Claude는 설치된 스킬 디렉토리를 기준으로 해결)를 읽으십시오. 다음을 검사합니다:

  • 패키지 관리자 및 매니페스트: package.json, pnpm-lock.yaml, yarn.lock, package-lock.json, bun.lockb, pyproject.toml, requirements.txt, poetry.lock, uv.lock, Pipfile.
  • 프레임워크 신호: next.config.*, vite.config.*, astro.config.*, remix.config.*, nuxt.config.*, svelte.config.*, app/ vs pages/, FastAPI(), Flask(), app = FastAPI(), server.py가 있는 main.py, 루트의 index.html.
  • 런타임 버전: .nvmrc, .node-version, package.json의 engines, .python-version, pyproject.toml의 python_version. 장기 실행 대상이 선택되고 런타임이 고정되지 않은 경우 감사가 차단됩니다.
  • DB / 상태 저장 종속성: sqlalchemy, psycopg, prisma, mongoose, redis, ioredis, sqlmodel 가져오기. 발견되면 *"이 서비스에는 데이터베이스가 필요합니다 — 프로덕션 전에 프로비저닝하십시오"*를 Railway 참조의 Railway 추가 기능 명령과 함께 표시합니다.
  • 포트 + 시작 명령: uvicorn, gunicorn, next start, node server.js, python -m .... 0.0.0.0 바인딩 및 $PORT 사용을 확인합니다. localhost 전용 바인딩은 장기 실행 대상에서 차단됩니다.
  • 모노레포: pnpm-workspace.yaml, turbo.json, nx.json, lerna.json 또는 루트 package.json의 "workspaces" → 패키지를 열거하고 배포할 항목을 묻습니다. 추측하지 마십시오.
  • 라이브러리 / CLI (웹 배포가 아님): Node 신호 — package.json에 bin: 필드가 있음 또는 (files: 배열이 있음 AND scripts.start가 없음 AND express, fastify, hono, next, koa와 같은 HTTP 프레임워크 가져오기가 없음). Python 신호 — pyproject.toml에 [project.scripts] / console_scripts가 있음 AND 선언된 스크립트 또는 가져오기에 uvicorn/gunicorn/flask/fastapi가 없음. 라이브러리 신호로 main: 단독 사용하지 마십시오 — 거의 모든 Node 웹앱도 main:을 설정합니다. 깔끔하게 종료합니다: "이것은 패키지처럼 보입니다 — /all-deploy는 npm/PyPI 게시가 아닌 웹 서비스를 대상으로 합니다."
  • 기존 배포 구성: vercel.json, railway.toml, fly.toml, Dockerfile, render.yaml — 존중하고, 감사하며, 명시적인 요청 없이 재생성하지 마십시오.
  • 기존 프로젝트 연결: .vercel/project.json → 해당 Vercel 프로젝트 ID를 재사용합니다. project 필드가 있는 railway.toml → 재사용합니다. 재배포는 일반적인 경우입니다. 새 프로젝트는 명시적인 "새로 시작"이 필요합니다.

PROJECT_CLASS: static인 경우 프레임워크/런타임/포트/DB/모노레포 지문 감지를 건너<0xEB><0x9B><0x84>니다. 세 가지만 감지합니다: 게시 디렉토리(index.html을 포함하는 폴더 — ., dist/, _site/, public/, build/, out/, site/), 빌드 단계가 있는지 여부, git 저장소가 있는지 여부. 게시 디렉토리 테이블은 references/static-sites.md에 있습니다. 잘못 설정하는 것은 /에서 404를 반환하는 라이브 사이트의 가장 일반적인 원인입니다.

출력: 각각에 대한 한 줄 설명이 있는 분류 블록 및 순위가 매겨진 후보 대상 목록. 전체 대상 순위 지정 루브릭은 references/project-types.md를 참조하십시오.

2단계 — 감사 (엄격, 차단)

이 스킬에 번들된 감사 스크립트(scripts/audit.py)를 현재 프로젝트 디렉토리에 대해 실행합니다. Claude는 로드 시 스킬 경로를 확인합니다. 호출은 다음과 같습니다:

python3 <SKILL_DIR>/scripts/audit.py <project-path>

PROJECT_CLASS: static인 경우:

python3 <SKILL_DIR>/scripts/audit.py <project-path> --profile static --publish-dir <dir> [--target <name>]

이것은 종속성 트리, 시작 명령, 포트 또는 git 원격을 가정하는 모든 검사를 건너<0xEB><0x9B><0x84>고(일반 HTML 폴더에서 잘못된 중요 문제를 발생시킴) 대신 scripts/static_check.py를 실행합니다. 선택한 대상이 github-pages인 경우 --target github-pages를 전달합니다. 이는 실제로 원격이 필요한 유일한 정적 대상이며 .nojekyll 및 루트 상대 경로가 중요한 유일한 대상입니다. 확인 목록은 references/static-sites.md에 있습니다.

여기서 <SKILL_DIR>은 스킬이 설치된 위치(일반적으로 ~/.claude/skills/all-deploy/)이고 <project-path>는 일반적으로 .입니다. 스크립트는 references/audit-checklist.md의 모든 항목을 확인합니다: 추적된 파일의 시크릿, .gitignore 범위, 잠금 파일 무결성, .env.example 완전성(scripts/env_extract.py를 통해), 빌드/시작 스크립트 존재 여부, 포트 바인딩, 깨끗한 HEAD, git-remote 일치, npm audit --production --audit-level=high 또는 pip-audit.

실패 시 중단됩니다. 각 문제에 대해 수정 사항을 diff(해당되는 경우)로 표시하고 적용하기 전에 사용자의 확인을 기다립니다. 자동 모드는 감사를 우회하지 않습니다.

Git 기록 시크릿 스캔은 사용자가 실행하며 자동이 아닙니다. 감사 출력에서 trufflehog git file://. 또는 git log -p -S 'sk_' -S 'AKIA' -S 'ghp_'를 별도의 단계로 표시합니다. 스킬은 절대 git 기록을 재작성하지 않습니다.

3단계 — 대상 선택

1단계의 순위가 매겨진 후보를 한 줄 설명과 함께 제시합니다. 사용자가 선택하거나 "ok"로 최상위 선택을 수락합니다. 지금 대상 참조를 로드합니다:

  • references/targets/vercel.md — Next, Vite, Astro, Remix, Nuxt, SvelteKit, 정적
  • references/targets/railway.md — FastAPI, Flask, Express, Python 워커, MCP HTTP, Claude Agent SDK
  • references/targets/docker-vps.md — 모든 Dockerfile, 상태 저장 워크로드, 자체 호스팅
  • references/targets/cloudflared-tunnel.md — 로컬 개발 노출, 빠른 데모
  • references/targets/cloudflare-pages.md — 정적 사이트; 누군가 돈을 받고 있을 때 기본 선택
  • references/targets/netlify.md — 양식이 필요한 정적 사이트; 드래그 앤 드롭
  • references/targets/github-pages.md — 이미 GitHub에 있는 포트폴리오, 문서, 데모
  • references/targets/render.md — 정적 사이트, 낮은 트래픽

PROJECT_CLASS: static인 경우 후보를 제시하기 전에 references/static-hosting.md를 읽으십시오. 여기에는 비교, 무료 티어 제한, 상업적 사용 매트릭스, 그리고 순위를 실제로 결정하는 질문이 포함되어 있습니다: "이 페이지와 관련하여 누군가 돈을 받고 있습니까?" 예인 경우 Vercel Hobby(사이트 생성, 업데이트 또는 호스팅에 대한 대가를 받는 것은 공정 사용 조건에 따른 상업적 사용임) 및 일반적으로 GitHub Pages도 제거됩니다.

계속...

(참고: 전체 SKILL.md 콘텐츠는 원본에서 잘렸습니다. 필요한 경우 나머지 단계를 번역할 수 있습니다.)

관련 스킬