@kood/claude-code 0.1.7 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +118 -3
- package/package.json +8 -2
- package/templates/hono/CLAUDE.md +53 -326
- package/templates/hono/docs/architecture/architecture.md +93 -747
- package/templates/hono/docs/deployment/cloudflare.md +59 -513
- package/templates/hono/docs/deployment/docker.md +41 -356
- package/templates/hono/docs/deployment/index.md +49 -190
- package/templates/hono/docs/deployment/railway.md +36 -306
- package/templates/hono/docs/deployment/vercel.md +49 -434
- package/templates/hono/docs/library/ai-sdk/index.md +53 -290
- package/templates/hono/docs/library/ai-sdk/openrouter.md +19 -387
- package/templates/hono/docs/library/ai-sdk/providers.md +28 -394
- package/templates/hono/docs/library/ai-sdk/streaming.md +52 -353
- package/templates/hono/docs/library/ai-sdk/structured-output.md +63 -395
- package/templates/hono/docs/library/ai-sdk/tools.md +62 -431
- package/templates/hono/docs/library/hono/env-setup.md +24 -313
- package/templates/hono/docs/library/hono/error-handling.md +34 -295
- package/templates/hono/docs/library/hono/index.md +24 -122
- package/templates/hono/docs/library/hono/middleware.md +21 -188
- package/templates/hono/docs/library/hono/rpc.md +40 -341
- package/templates/hono/docs/library/hono/validation.md +35 -195
- package/templates/hono/docs/library/pino/index.md +42 -333
- package/templates/hono/docs/library/prisma/cloudflare-d1.md +64 -367
- package/templates/hono/docs/library/prisma/config.md +19 -260
- package/templates/hono/docs/library/prisma/index.md +64 -320
- package/templates/hono/docs/library/zod/index.md +53 -257
- package/templates/npx/CLAUDE.md +58 -276
- package/templates/npx/docs/references/patterns.md +160 -0
- package/templates/tanstack-start/CLAUDE.md +0 -4
- package/templates/tanstack-start/docs/architecture/architecture.md +44 -589
- package/templates/tanstack-start/docs/design/index.md +119 -12
- package/templates/tanstack-start/docs/guides/conventions.md +103 -0
- package/templates/tanstack-start/docs/guides/env-setup.md +34 -340
- package/templates/tanstack-start/docs/guides/getting-started.md +22 -209
- package/templates/tanstack-start/docs/guides/hooks.md +166 -0
- package/templates/tanstack-start/docs/guides/routes.md +166 -0
- package/templates/tanstack-start/docs/guides/services.md +143 -0
- package/templates/tanstack-start/docs/library/tanstack-query/index.md +18 -2
- package/templates/tanstack-start/docs/library/zod/index.md +16 -1
- package/templates/tanstack-start/docs/design/accessibility.md +0 -163
- package/templates/tanstack-start/docs/design/color.md +0 -93
- package/templates/tanstack-start/docs/design/spacing.md +0 -122
- package/templates/tanstack-start/docs/design/typography.md +0 -80
- package/templates/tanstack-start/docs/guides/best-practices.md +0 -950
- package/templates/tanstack-start/docs/guides/husky-lint-staged.md +0 -303
- package/templates/tanstack-start/docs/guides/prettier.md +0 -189
- package/templates/tanstack-start/docs/guides/project-templates.md +0 -710
- package/templates/tanstack-start/docs/library/tanstack-query/setup.md +0 -48
- package/templates/tanstack-start/docs/library/zod/basic-types.md +0 -74
|
@@ -1,159 +1,46 @@
|
|
|
1
|
-
# Nitro
|
|
1
|
+
# Nitro - Docker 배포
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
|
|
5
|
-
Docker를 사용하여 Hono + Nitro 애플리케이션을 컨테이너로 배포합니다.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 🚀 Quick Reference (복사용)
|
|
10
|
-
|
|
11
|
-
```dockerfile
|
|
12
|
-
# Dockerfile
|
|
13
|
-
FROM node:20-alpine AS base
|
|
14
|
-
|
|
15
|
-
FROM base AS deps
|
|
16
|
-
WORKDIR /app
|
|
17
|
-
COPY package.json yarn.lock ./
|
|
18
|
-
RUN yarn install --frozen-lockfile
|
|
19
|
-
|
|
20
|
-
FROM base AS builder
|
|
21
|
-
WORKDIR /app
|
|
22
|
-
COPY --from=deps /app/node_modules ./node_modules
|
|
23
|
-
COPY . .
|
|
24
|
-
RUN yarn build
|
|
25
|
-
|
|
26
|
-
FROM base AS runner
|
|
27
|
-
WORKDIR /app
|
|
28
|
-
RUN addgroup --system --gid 1001 nodejs && \
|
|
29
|
-
adduser --system --uid 1001 hono
|
|
30
|
-
COPY --from=builder --chown=hono:nodejs /app/.output ./.output
|
|
31
|
-
USER hono
|
|
32
|
-
EXPOSE 3000
|
|
33
|
-
ENV PORT=3000 NODE_ENV=production
|
|
34
|
-
CMD ["node", ".output/server/index.mjs"]
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
# 빌드 및 실행
|
|
39
|
-
docker build -t my-hono-app .
|
|
40
|
-
docker run -p 3000:3000 my-hono-app
|
|
41
|
-
```
|
|
3
|
+
> 컨테이너 배포
|
|
42
4
|
|
|
43
5
|
---
|
|
44
6
|
|
|
45
|
-
##
|
|
46
|
-
|
|
47
|
-
### nitro.config.ts
|
|
7
|
+
## nitro.config.ts
|
|
48
8
|
|
|
49
9
|
```typescript
|
|
50
|
-
// nitro.config.ts
|
|
51
|
-
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
52
|
-
// Docker 배포용 Nitro 설정
|
|
53
|
-
// Node.js 서버로 빌드됩니다
|
|
54
|
-
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
55
10
|
import { defineNitroConfig } from "nitro/config";
|
|
56
11
|
|
|
57
12
|
export default defineNitroConfig({
|
|
58
|
-
// Node.js 서버 preset
|
|
59
13
|
preset: "node",
|
|
60
|
-
|
|
61
|
-
// 호환성 날짜
|
|
62
14
|
compatibilityDate: "2024-09-19",
|
|
63
|
-
|
|
64
|
-
// 소스 디렉토리
|
|
65
|
-
srcDir: "src",
|
|
66
|
-
|
|
67
|
-
// 빌드 출력
|
|
68
|
-
output: {
|
|
69
|
-
dir: ".output",
|
|
70
|
-
},
|
|
71
|
-
|
|
72
|
-
// Node.js 설정
|
|
73
|
-
node: {
|
|
74
|
-
// 압축 활성화
|
|
75
|
-
compress: true,
|
|
76
|
-
},
|
|
77
15
|
});
|
|
78
16
|
```
|
|
79
17
|
|
|
80
18
|
---
|
|
81
19
|
|
|
82
|
-
## Dockerfile
|
|
83
|
-
|
|
84
|
-
### 멀티스테이지 빌드
|
|
20
|
+
## Dockerfile
|
|
85
21
|
|
|
86
22
|
```dockerfile
|
|
87
|
-
# Dockerfile
|
|
88
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
89
|
-
# Hono + Nitro 멀티스테이지 Docker 빌드
|
|
90
|
-
# 최적화된 프로덕션 이미지 생성
|
|
91
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
92
|
-
|
|
93
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
94
|
-
# Stage 1: 베이스 이미지
|
|
95
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
96
23
|
FROM node:20-alpine AS base
|
|
97
24
|
|
|
98
|
-
# libc6-compat: 일부 네이티브 모듈 호환성을 위해 필요
|
|
99
|
-
RUN apk add --no-cache libc6-compat
|
|
100
|
-
|
|
101
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
102
|
-
# Stage 2: 의존성 설치
|
|
103
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
104
25
|
FROM base AS deps
|
|
105
26
|
WORKDIR /app
|
|
106
|
-
|
|
107
|
-
# 패키지 매니저 파일 복사
|
|
108
27
|
COPY package.json yarn.lock ./
|
|
109
|
-
|
|
110
|
-
# yarn 의존성 설치
|
|
111
28
|
RUN yarn install --frozen-lockfile
|
|
112
29
|
|
|
113
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
114
|
-
# Stage 3: 빌드
|
|
115
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
116
30
|
FROM base AS builder
|
|
117
31
|
WORKDIR /app
|
|
118
|
-
|
|
119
|
-
# 의존성 복사
|
|
120
32
|
COPY --from=deps /app/node_modules ./node_modules
|
|
121
|
-
|
|
122
|
-
# 소스 코드 복사
|
|
123
33
|
COPY . .
|
|
124
|
-
|
|
125
|
-
# Nitro 빌드
|
|
126
34
|
RUN yarn build
|
|
127
35
|
|
|
128
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
129
|
-
# Stage 4: 프로덕션 러너
|
|
130
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
131
36
|
FROM base AS runner
|
|
132
37
|
WORKDIR /app
|
|
133
|
-
|
|
134
|
-
# 보안: 비-root 사용자 생성
|
|
135
38
|
RUN addgroup --system --gid 1001 nodejs && \
|
|
136
39
|
adduser --system --uid 1001 hono
|
|
137
|
-
|
|
138
|
-
# 빌드 결과물만 복사 (최소화된 이미지)
|
|
139
40
|
COPY --from=builder --chown=hono:nodejs /app/.output ./.output
|
|
140
|
-
|
|
141
|
-
# 비-root 사용자로 전환
|
|
142
41
|
USER hono
|
|
143
|
-
|
|
144
|
-
# 포트 설정
|
|
145
42
|
EXPOSE 3000
|
|
146
|
-
|
|
147
|
-
# 환경 변수
|
|
148
|
-
ENV PORT=3000
|
|
149
|
-
ENV NODE_ENV=production
|
|
150
|
-
ENV HOST=0.0.0.0
|
|
151
|
-
|
|
152
|
-
# 헬스체크
|
|
153
|
-
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
|
154
|
-
CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1
|
|
155
|
-
|
|
156
|
-
# 서버 실행
|
|
43
|
+
ENV PORT=3000 NODE_ENV=production HOST=0.0.0.0
|
|
157
44
|
CMD ["node", ".output/server/index.mjs"]
|
|
158
45
|
```
|
|
159
46
|
|
|
@@ -162,72 +49,41 @@ CMD ["node", ".output/server/index.mjs"]
|
|
|
162
49
|
## .dockerignore
|
|
163
50
|
|
|
164
51
|
```dockerignore
|
|
165
|
-
# .dockerignore
|
|
166
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
167
|
-
# Docker 빌드 시 제외할 파일
|
|
168
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
169
|
-
|
|
170
|
-
# 의존성
|
|
171
52
|
node_modules/
|
|
172
|
-
|
|
173
|
-
# 빌드 결과물
|
|
174
53
|
.output/
|
|
175
|
-
dist/
|
|
176
|
-
|
|
177
|
-
# 환경 파일
|
|
178
54
|
.env
|
|
179
55
|
.env.*
|
|
180
56
|
!.env.example
|
|
181
|
-
|
|
182
|
-
# Git
|
|
183
57
|
.git/
|
|
184
|
-
.gitignore
|
|
185
|
-
|
|
186
|
-
# IDE
|
|
187
|
-
.vscode/
|
|
188
|
-
.idea/
|
|
189
|
-
|
|
190
|
-
# 테스트
|
|
191
|
-
coverage/
|
|
192
58
|
*.test.ts
|
|
193
|
-
|
|
194
|
-
__tests__/
|
|
195
|
-
|
|
196
|
-
# 문서
|
|
59
|
+
coverage/
|
|
197
60
|
*.md
|
|
198
61
|
docs/
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 빌드 및 실행
|
|
199
67
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
docker-
|
|
203
|
-
.dockerignore
|
|
68
|
+
```bash
|
|
69
|
+
docker build -t my-hono-app .
|
|
70
|
+
docker run -p 3000:3000 my-hono-app
|
|
204
71
|
|
|
205
|
-
#
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
72
|
+
# 환경 변수
|
|
73
|
+
docker run -p 3000:3000 \
|
|
74
|
+
-e DATABASE_URL="postgresql://..." \
|
|
75
|
+
my-hono-app
|
|
209
76
|
```
|
|
210
77
|
|
|
211
78
|
---
|
|
212
79
|
|
|
213
80
|
## Docker Compose
|
|
214
81
|
|
|
215
|
-
### docker-compose.yml
|
|
216
|
-
|
|
217
82
|
```yaml
|
|
218
83
|
# docker-compose.yml
|
|
219
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
220
|
-
# Hono + Nitro 개발/프로덕션 환경 구성
|
|
221
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
222
|
-
|
|
223
84
|
services:
|
|
224
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
225
|
-
# Hono 애플리케이션
|
|
226
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
227
85
|
app:
|
|
228
|
-
build:
|
|
229
|
-
context: .
|
|
230
|
-
dockerfile: Dockerfile
|
|
86
|
+
build: .
|
|
231
87
|
ports:
|
|
232
88
|
- "3000:3000"
|
|
233
89
|
environment:
|
|
@@ -236,16 +92,7 @@ services:
|
|
|
236
92
|
depends_on:
|
|
237
93
|
db:
|
|
238
94
|
condition: service_healthy
|
|
239
|
-
|
|
240
|
-
healthcheck:
|
|
241
|
-
test: ["CMD", "wget", "--spider", "http://localhost:3000/health"]
|
|
242
|
-
interval: 30s
|
|
243
|
-
timeout: 10s
|
|
244
|
-
retries: 3
|
|
245
|
-
|
|
246
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
247
|
-
# PostgreSQL 데이터베이스
|
|
248
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
95
|
+
|
|
249
96
|
db:
|
|
250
97
|
image: postgres:16-alpine
|
|
251
98
|
environment:
|
|
@@ -260,139 +107,47 @@ services:
|
|
|
260
107
|
timeout: 5s
|
|
261
108
|
retries: 5
|
|
262
109
|
|
|
263
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
264
|
-
# Redis 캐시 (선택적)
|
|
265
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
266
|
-
redis:
|
|
267
|
-
image: redis:7-alpine
|
|
268
|
-
ports:
|
|
269
|
-
- "6379:6379"
|
|
270
|
-
volumes:
|
|
271
|
-
- redis_data:/data
|
|
272
|
-
command: redis-server --appendonly yes
|
|
273
|
-
|
|
274
110
|
volumes:
|
|
275
111
|
postgres_data:
|
|
276
|
-
redis_data:
|
|
277
112
|
```
|
|
278
113
|
|
|
279
|
-
|
|
114
|
+
```bash
|
|
115
|
+
docker compose up -d
|
|
116
|
+
docker compose logs -f app
|
|
117
|
+
docker compose down
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 개발용
|
|
280
123
|
|
|
281
124
|
```yaml
|
|
282
125
|
# docker-compose.dev.yml
|
|
283
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
284
|
-
# 개발 환경 전용 구성
|
|
285
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
286
|
-
|
|
287
126
|
services:
|
|
288
127
|
app:
|
|
289
128
|
build:
|
|
290
|
-
context: .
|
|
291
129
|
dockerfile: Dockerfile.dev
|
|
292
130
|
ports:
|
|
293
131
|
- "3000:3000"
|
|
294
132
|
volumes:
|
|
295
|
-
# 소스 코드 마운트 (Hot Reload)
|
|
296
133
|
- ./src:/app/src
|
|
297
|
-
- ./nitro.config.ts:/app/nitro.config.ts
|
|
298
134
|
environment:
|
|
299
135
|
- NODE_ENV=development
|
|
300
|
-
- DATABASE_URL=postgresql://postgres:password@db:5432/mydb
|
|
301
|
-
depends_on:
|
|
302
|
-
- db
|
|
303
|
-
|
|
304
|
-
db:
|
|
305
|
-
image: postgres:16-alpine
|
|
306
|
-
environment:
|
|
307
|
-
- POSTGRES_USER=postgres
|
|
308
|
-
- POSTGRES_PASSWORD=password
|
|
309
|
-
- POSTGRES_DB=mydb
|
|
310
|
-
ports:
|
|
311
|
-
- "5432:5432"
|
|
312
|
-
volumes:
|
|
313
|
-
- postgres_data:/var/lib/postgresql/data
|
|
314
|
-
|
|
315
|
-
volumes:
|
|
316
|
-
postgres_data:
|
|
317
136
|
```
|
|
318
137
|
|
|
319
|
-
### 개발용 Dockerfile
|
|
320
|
-
|
|
321
138
|
```dockerfile
|
|
322
139
|
# Dockerfile.dev
|
|
323
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
324
|
-
# 개발 환경용 Dockerfile
|
|
325
|
-
# Hot Reload 지원
|
|
326
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
327
|
-
|
|
328
140
|
FROM node:20-alpine
|
|
329
|
-
|
|
330
141
|
WORKDIR /app
|
|
331
|
-
|
|
332
|
-
# 패키지 파일 복사
|
|
333
142
|
COPY package.json yarn.lock ./
|
|
334
|
-
|
|
335
|
-
# yarn 의존성 설치
|
|
336
143
|
RUN yarn install
|
|
337
|
-
|
|
338
|
-
# 소스 코드는 볼륨으로 마운트됨
|
|
339
|
-
|
|
340
144
|
EXPOSE 3000
|
|
341
|
-
|
|
342
|
-
# 개발 서버 실행
|
|
343
145
|
CMD ["yarn", "dev"]
|
|
344
146
|
```
|
|
345
147
|
|
|
346
148
|
---
|
|
347
149
|
|
|
348
|
-
##
|
|
349
|
-
|
|
350
|
-
### 기본 명령어
|
|
351
|
-
|
|
352
|
-
```bash
|
|
353
|
-
# 이미지 빌드
|
|
354
|
-
docker build -t my-hono-app .
|
|
355
|
-
|
|
356
|
-
# 컨테이너 실행
|
|
357
|
-
docker run -p 3000:3000 my-hono-app
|
|
358
|
-
|
|
359
|
-
# 환경 변수와 함께 실행
|
|
360
|
-
docker run -p 3000:3000 \
|
|
361
|
-
-e DATABASE_URL="postgresql://user:pass@host:5432/db" \
|
|
362
|
-
-e API_SECRET="my-secret" \
|
|
363
|
-
my-hono-app
|
|
364
|
-
|
|
365
|
-
# 백그라운드 실행
|
|
366
|
-
docker run -d --name hono-app -p 3000:3000 my-hono-app
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
### Docker Compose 명령어
|
|
370
|
-
|
|
371
|
-
```bash
|
|
372
|
-
# 프로덕션 시작
|
|
373
|
-
docker compose up -d
|
|
374
|
-
|
|
375
|
-
# 개발 환경 시작
|
|
376
|
-
docker compose -f docker-compose.dev.yml up
|
|
377
|
-
|
|
378
|
-
# 로그 확인
|
|
379
|
-
docker compose logs -f app
|
|
380
|
-
|
|
381
|
-
# 컨테이너 재빌드
|
|
382
|
-
docker compose up -d --build
|
|
383
|
-
|
|
384
|
-
# 종료
|
|
385
|
-
docker compose down
|
|
386
|
-
|
|
387
|
-
# 볼륨 포함 종료 (데이터 삭제)
|
|
388
|
-
docker compose down -v
|
|
389
|
-
```
|
|
390
|
-
|
|
391
|
-
---
|
|
392
|
-
|
|
393
|
-
## CI/CD 통합
|
|
394
|
-
|
|
395
|
-
### GitHub Actions
|
|
150
|
+
## CI/CD
|
|
396
151
|
|
|
397
152
|
```yaml
|
|
398
153
|
# .github/workflows/docker.yml
|
|
@@ -401,106 +156,39 @@ name: Docker Build & Push
|
|
|
401
156
|
on:
|
|
402
157
|
push:
|
|
403
158
|
branches: [main]
|
|
404
|
-
pull_request:
|
|
405
|
-
branches: [main]
|
|
406
159
|
|
|
407
160
|
jobs:
|
|
408
161
|
build:
|
|
409
162
|
runs-on: ubuntu-latest
|
|
410
|
-
|
|
411
163
|
steps:
|
|
412
164
|
- uses: actions/checkout@v4
|
|
413
|
-
|
|
414
|
-
-
|
|
415
|
-
uses: docker/setup-buildx-action@v3
|
|
416
|
-
|
|
417
|
-
- name: Login to Container Registry
|
|
418
|
-
uses: docker/login-action@v3
|
|
165
|
+
- uses: docker/setup-buildx-action@v3
|
|
166
|
+
- uses: docker/login-action@v3
|
|
419
167
|
with:
|
|
420
168
|
registry: ghcr.io
|
|
421
169
|
username: ${{ github.actor }}
|
|
422
170
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
423
|
-
|
|
424
|
-
- name: Build and Push
|
|
425
|
-
uses: docker/build-push-action@v5
|
|
171
|
+
- uses: docker/build-push-action@v5
|
|
426
172
|
with:
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
tags: |
|
|
430
|
-
ghcr.io/${{ github.repository }}:latest
|
|
431
|
-
ghcr.io/${{ github.repository }}:${{ github.sha }}
|
|
173
|
+
push: true
|
|
174
|
+
tags: ghcr.io/${{ github.repository }}:latest
|
|
432
175
|
cache-from: type=gha
|
|
433
176
|
cache-to: type=gha,mode=max
|
|
434
177
|
```
|
|
435
178
|
|
|
436
179
|
---
|
|
437
180
|
|
|
438
|
-
## 최적화 팁
|
|
439
|
-
|
|
440
|
-
### 이미지 크기 최소화
|
|
441
|
-
|
|
442
|
-
```dockerfile
|
|
443
|
-
# Alpine 기반 이미지 사용
|
|
444
|
-
FROM node:20-alpine
|
|
445
|
-
|
|
446
|
-
# 불필요한 파일 제외 (.dockerignore 활용)
|
|
447
|
-
|
|
448
|
-
# 프로덕션 의존성만 설치
|
|
449
|
-
RUN yarn install --production
|
|
450
|
-
|
|
451
|
-
# 빌드 결과물만 최종 이미지에 포함
|
|
452
|
-
COPY --from=builder /app/.output ./.output
|
|
453
|
-
```
|
|
454
|
-
|
|
455
|
-
### 빌드 캐시 활용
|
|
456
|
-
|
|
457
|
-
```dockerfile
|
|
458
|
-
# 의존성 파일 먼저 복사 (캐시 활용)
|
|
459
|
-
COPY package.json yarn.lock ./
|
|
460
|
-
RUN yarn install --frozen-lockfile
|
|
461
|
-
|
|
462
|
-
# 소스 코드는 나중에 복사
|
|
463
|
-
COPY . .
|
|
464
|
-
RUN yarn build
|
|
465
|
-
```
|
|
466
|
-
|
|
467
|
-
### 보안 강화
|
|
468
|
-
|
|
469
|
-
```dockerfile
|
|
470
|
-
# 비-root 사용자 사용
|
|
471
|
-
RUN adduser --system --uid 1001 hono
|
|
472
|
-
USER hono
|
|
473
|
-
|
|
474
|
-
# 읽기 전용 파일 시스템
|
|
475
|
-
# docker run --read-only my-hono-app
|
|
476
|
-
|
|
477
|
-
# 취약점 스캔
|
|
478
|
-
# docker scan my-hono-app
|
|
479
|
-
```
|
|
480
|
-
|
|
481
|
-
---
|
|
482
|
-
|
|
483
181
|
## 문제 해결
|
|
484
182
|
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
|
488
|
-
|
|
489
|
-
|
|
|
490
|
-
| 빌드 실패 | node_modules 누락 | .dockerignore 확인 |
|
|
491
|
-
| 권한 오류 | root 사용자 문제 | 비-root 사용자 사용 |
|
|
492
|
-
| 메모리 부족 | 이미지 크기 과다 | 멀티스테이지 빌드 사용 |
|
|
493
|
-
|
|
494
|
-
### 디버깅
|
|
183
|
+
| 문제 | 해결 |
|
|
184
|
+
|------|------|
|
|
185
|
+
| 포트 연결 실패 | `HOST=0.0.0.0` 설정 |
|
|
186
|
+
| 권한 오류 | 비-root 사용자 |
|
|
187
|
+
| 메모리 부족 | 멀티스테이지 빌드 |
|
|
495
188
|
|
|
496
189
|
```bash
|
|
497
|
-
# 컨테이너 쉘 접속
|
|
498
190
|
docker exec -it hono-app sh
|
|
499
|
-
|
|
500
|
-
# 로그 확인
|
|
501
191
|
docker logs -f hono-app
|
|
502
|
-
|
|
503
|
-
# 리소스 사용량 확인
|
|
504
192
|
docker stats hono-app
|
|
505
193
|
```
|
|
506
194
|
|
|
@@ -508,7 +196,4 @@ docker stats hono-app
|
|
|
508
196
|
|
|
509
197
|
## 관련 문서
|
|
510
198
|
|
|
511
|
-
- [배포 가이드
|
|
512
|
-
- [Railway 배포](./railway.md)
|
|
513
|
-
- [Vercel 배포](./vercel.md)
|
|
514
|
-
- [Cloudflare 배포](./cloudflare.md)
|
|
199
|
+
- [배포 가이드](./index.md)
|