forked from lidge-jun/cli-jaw
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
33 lines (26 loc) · 1.49 KB
/
Copy pathDockerfile
File metadata and controls
33 lines (26 loc) · 1.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# ─── cli-jaw Docker image (npm 배포판) ───────────
FROM node:22-slim
# 시스템 Chromium + better-sqlite3 빌드 deps + curl (uv 설치용)
# findChrome()이 /usr/bin/chromium 탐지 → Playwright 캐시 경로 불필요
RUN apt-get update && apt-get install -y --no-install-recommends \
python3 make g++ \
chromium \
curl \
&& rm -rf /var/lib/apt/lists/*
# non-root 사용자 (Chromium sandbox 정상 동작 보장)
RUN groupadd -r jaw && useradd -r -g jaw -m jaw
# cli-jaw 글로벌 설치 (postinstall이 5-CLI + MCP + skills 자동 설치)
# CLI_JAW_HOME을 설치 전에 설정 → postinstall이 /home/jaw/.cli-jaw에 초기화
ENV CLI_JAW_HOME=/home/jaw/.cli-jaw
ARG CLI_JAW_VERSION=latest
RUN npm install -g cli-jaw@${CLI_JAW_VERSION}
# 빌드 시 기능 가드 — /api/health 엔드포인트가 있는 버전인지 확인
RUN node -e "const s=require('fs').readFileSync(require.resolve('cli-jaw/dist/server.js'),'utf8'); if(!s.includes('/api/health')) { console.error('ERROR: cli-jaw@'+require('cli-jaw/package.json').version+' does not include /api/health. Minimum required version not met.'); process.exit(1); }"
# 런타임 — CHROME_NO_SANDBOX 의도적 미설정 (sandbox 기본 유지)
ENV PORT=3457
RUN chown -R jaw:jaw /home/jaw/.cli-jaw
USER jaw
EXPOSE 3457
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD node -e "fetch('http://localhost:3457/api/health').then(r=>{if(!r.ok)throw 1})" || exit 1
ENTRYPOINT ["jaw", "serve", "--no-open"]