@mandujs/mcp 0.12.2 → 0.13.0
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/README.md +367 -367
- package/package.json +2 -2
- package/src/activity-monitor.ts +847 -847
- package/src/adapters/index.ts +20 -20
- package/src/adapters/monitor-adapter.ts +100 -100
- package/src/adapters/tool-adapter.ts +88 -88
- package/src/executor/error-handler.ts +250 -250
- package/src/executor/index.ts +22 -22
- package/src/executor/tool-executor.ts +148 -148
- package/src/hooks/config-watcher.ts +174 -174
- package/src/hooks/index.ts +23 -23
- package/src/hooks/mcp-hooks.ts +227 -227
- package/src/index.ts +106 -106
- package/src/logging/index.ts +15 -15
- package/src/logging/mcp-transport.ts +134 -134
- package/src/registry/index.ts +13 -13
- package/src/registry/mcp-tool-registry.ts +298 -298
- package/src/resources/skills/guides.ts +1136 -1136
- package/src/resources/skills/index.ts +12 -12
- package/src/resources/skills/loader.ts +218 -218
- package/src/resources/skills/mandu-composition/SKILL.md +91 -91
- package/src/resources/skills/mandu-composition/metadata.json +13 -13
- package/src/resources/skills/mandu-composition/rules/_sections.md +26 -26
- package/src/resources/skills/mandu-composition/rules/_template.md +77 -77
- package/src/resources/skills/mandu-composition/rules/comp-arch-avoid-boolean-props.md +146 -146
- package/src/resources/skills/mandu-composition/rules/comp-arch-compound-components.md +164 -164
- package/src/resources/skills/mandu-composition/rules/comp-island-event.md +161 -161
- package/src/resources/skills/mandu-composition/rules/comp-island-slot-split.md +167 -167
- package/src/resources/skills/mandu-composition/rules/comp-pattern-children.md +149 -149
- package/src/resources/skills/mandu-composition/rules/comp-state-context-interface.md +148 -148
- package/src/resources/skills/mandu-composition/rules/comp-state-lift-state.md +150 -150
- package/src/resources/skills/mandu-deployment/SKILL.md +92 -92
- package/src/resources/skills/mandu-deployment/_sections.md +41 -41
- package/src/resources/skills/mandu-deployment/_template.md +38 -38
- package/src/resources/skills/mandu-deployment/metadata.json +13 -13
- package/src/resources/skills/mandu-deployment/rules/deploy-build-bun.md +109 -109
- package/src/resources/skills/mandu-deployment/rules/deploy-build-output.md +115 -115
- package/src/resources/skills/mandu-deployment/rules/deploy-cicd-github.md +219 -219
- package/src/resources/skills/mandu-deployment/rules/deploy-docker-bun.md +150 -150
- package/src/resources/skills/mandu-deployment/rules/deploy-docker-compose.md +223 -223
- package/src/resources/skills/mandu-deployment/rules/deploy-platform-fly.md +152 -152
- package/src/resources/skills/mandu-deployment/rules/deploy-platform-render.md +179 -179
- package/src/resources/skills/mandu-deployment/rules/deploy-platform-supabase.md +323 -323
- package/src/resources/skills/mandu-deployment/rules/deploy-platform-vercel.md +140 -140
- package/src/resources/skills/mandu-fs-routes/SKILL.md +82 -82
- package/src/resources/skills/mandu-fs-routes/metadata.json +12 -12
- package/src/resources/skills/mandu-fs-routes/rules/_sections.md +36 -36
- package/src/resources/skills/mandu-fs-routes/rules/_template.md +69 -69
- package/src/resources/skills/mandu-fs-routes/rules/routes-api-methods.md +65 -65
- package/src/resources/skills/mandu-fs-routes/rules/routes-dynamic-param.md +93 -93
- package/src/resources/skills/mandu-fs-routes/rules/routes-naming-page.md +55 -55
- package/src/resources/skills/mandu-guard/SKILL.md +129 -129
- package/src/resources/skills/mandu-guard/metadata.json +12 -12
- package/src/resources/skills/mandu-guard/rules/_sections.md +36 -36
- package/src/resources/skills/mandu-guard/rules/_template.md +82 -82
- package/src/resources/skills/mandu-guard/rules/guard-config-rules.md +100 -100
- package/src/resources/skills/mandu-guard/rules/guard-layer-direction.md +76 -76
- package/src/resources/skills/mandu-guard/rules/guard-preset-mandu.md +81 -81
- package/src/resources/skills/mandu-guard/rules/guard-validate-import.md +80 -80
- package/src/resources/skills/mandu-hydration/SKILL.md +91 -91
- package/src/resources/skills/mandu-hydration/metadata.json +12 -12
- package/src/resources/skills/mandu-hydration/rules/_sections.md +31 -31
- package/src/resources/skills/mandu-hydration/rules/_template.md +72 -72
- package/src/resources/skills/mandu-hydration/rules/hydration-data-event.md +109 -109
- package/src/resources/skills/mandu-hydration/rules/hydration-directive-use-client.md +55 -55
- package/src/resources/skills/mandu-hydration/rules/hydration-island-setup.md +113 -113
- package/src/resources/skills/mandu-hydration/rules/hydration-priority-visible.md +68 -68
- package/src/resources/skills/mandu-performance/SKILL.md +85 -85
- package/src/resources/skills/mandu-performance/metadata.json +14 -14
- package/src/resources/skills/mandu-performance/rules/_sections.md +31 -31
- package/src/resources/skills/mandu-performance/rules/_template.md +64 -64
- package/src/resources/skills/mandu-performance/rules/perf-async-defer-await.md +103 -103
- package/src/resources/skills/mandu-performance/rules/perf-async-parallel.md +95 -95
- package/src/resources/skills/mandu-performance/rules/perf-bun-file.md +124 -124
- package/src/resources/skills/mandu-performance/rules/perf-bun-serve.md +125 -125
- package/src/resources/skills/mandu-performance/rules/perf-bundle-imports.md +80 -80
- package/src/resources/skills/mandu-performance/rules/perf-bundle-island-lazy.md +145 -145
- package/src/resources/skills/mandu-performance/rules/perf-cache-react.md +98 -98
- package/src/resources/skills/mandu-performance/rules/perf-render-transitions.md +154 -154
- package/src/resources/skills/mandu-security/SKILL.md +87 -87
- package/src/resources/skills/mandu-security/metadata.json +13 -13
- package/src/resources/skills/mandu-security/rules/_sections.md +31 -31
- package/src/resources/skills/mandu-security/rules/_template.md +74 -74
- package/src/resources/skills/mandu-security/rules/sec-auth-guard.md +127 -127
- package/src/resources/skills/mandu-security/rules/sec-env-management.md +133 -133
- package/src/resources/skills/mandu-security/rules/sec-input-validate.md +148 -148
- package/src/resources/skills/mandu-security/rules/sec-protect-csrf.md +146 -146
- package/src/resources/skills/mandu-security/rules/sec-protect-headers.md +138 -138
- package/src/resources/skills/mandu-slot/SKILL.md +85 -85
- package/src/resources/skills/mandu-slot/metadata.json +12 -12
- package/src/resources/skills/mandu-slot/rules/_sections.md +36 -36
- package/src/resources/skills/mandu-slot/rules/_template.md +63 -63
- package/src/resources/skills/mandu-slot/rules/slot-basic-structure.md +38 -38
- package/src/resources/skills/mandu-slot/rules/slot-ctx-response.md +56 -56
- package/src/resources/skills/mandu-slot/rules/slot-guard-auth.md +59 -59
- package/src/resources/skills/mandu-slot/rules/slot-http-methods.md +64 -64
- package/src/resources/skills/mandu-styling/SKILL.md +154 -154
- package/src/resources/skills/mandu-styling/_sections.md +43 -43
- package/src/resources/skills/mandu-styling/_template.md +32 -32
- package/src/resources/skills/mandu-styling/metadata.json +15 -15
- package/src/resources/skills/mandu-styling/rules/style-component-compound.md +235 -235
- package/src/resources/skills/mandu-styling/rules/style-component-slots.md +255 -255
- package/src/resources/skills/mandu-styling/rules/style-component-tokens.md +205 -205
- package/src/resources/skills/mandu-styling/rules/style-island-animations.md +272 -272
- package/src/resources/skills/mandu-styling/rules/style-island-scoping.md +167 -167
- package/src/resources/skills/mandu-styling/rules/style-island-variants.md +221 -221
- package/src/resources/skills/mandu-styling/rules/style-perf-critical.md +209 -209
- package/src/resources/skills/mandu-styling/rules/style-perf-purge.md +192 -192
- package/src/resources/skills/mandu-styling/rules/style-setup-modules.md +162 -162
- package/src/resources/skills/mandu-styling/rules/style-setup-panda.md +164 -164
- package/src/resources/skills/mandu-styling/rules/style-setup-tailwind.md +170 -170
- package/src/resources/skills/mandu-styling/rules/style-tailwind-v4-gotchas.md +179 -179
- package/src/resources/skills/mandu-styling/rules/style-theme-darkmode.md +229 -229
- package/src/resources/skills/mandu-testing/SKILL.md +99 -99
- package/src/resources/skills/mandu-testing/metadata.json +13 -13
- package/src/resources/skills/mandu-testing/rules/_sections.md +26 -26
- package/src/resources/skills/mandu-testing/rules/_template.md +65 -65
- package/src/resources/skills/mandu-testing/rules/test-component-island.md +195 -195
- package/src/resources/skills/mandu-testing/rules/test-e2e-playwright.md +196 -196
- package/src/resources/skills/mandu-testing/rules/test-mock-fetch.md +219 -219
- package/src/resources/skills/mandu-testing/rules/test-slot-unit.md +192 -192
- package/src/resources/skills/mandu-ui/SKILL.md +117 -117
- package/src/resources/skills/mandu-ui/_sections.md +23 -23
- package/src/resources/skills/mandu-ui/_template.md +32 -32
- package/src/resources/skills/mandu-ui/metadata.json +13 -13
- package/src/resources/skills/mandu-ui/rules/ui-accessibility-aria.md +232 -232
- package/src/resources/skills/mandu-ui/rules/ui-accessibility-focus.md +238 -238
- package/src/resources/skills/mandu-ui/rules/ui-composition-patterns.md +259 -259
- package/src/resources/skills/mandu-ui/rules/ui-island-integration.md +258 -258
- package/src/resources/skills/mandu-ui/rules/ui-radix-patterns.md +213 -213
- package/src/resources/skills/mandu-ui/rules/ui-shadcn-setup.md +209 -209
- package/src/resources/skills/recipes.ts +932 -932
- package/src/tools/generate.ts +7 -4
- package/src/tools/guard.ts +17 -4
- package/src/tools/hydration.ts +10 -10
- package/src/tools/project.ts +334 -334
- package/src/tools/runtime.ts +497 -497
- package/src/tools/seo.ts +417 -417
- package/src/tools/spec.ts +80 -159
- package/src/utils/project.ts +22 -12
- package/src/utils/withWarnings.ts +83 -83
|
@@ -1,152 +1,152 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Deploy to Fly.io
|
|
3
|
-
impact: MEDIUM
|
|
4
|
-
impactDescription: Edge deployment for global performance
|
|
5
|
-
tags: deployment, fly, edge, platform
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Deploy to Fly.io
|
|
9
|
-
|
|
10
|
-
**Impact: MEDIUM (Edge deployment for global performance)**
|
|
11
|
-
|
|
12
|
-
Fly.io를 사용하여 전 세계 엣지에서 Mandu 앱을 실행하세요.
|
|
13
|
-
|
|
14
|
-
**fly.toml 설정:**
|
|
15
|
-
|
|
16
|
-
```toml
|
|
17
|
-
app = "mandu-app"
|
|
18
|
-
primary_region = "nrt" # Tokyo
|
|
19
|
-
|
|
20
|
-
[build]
|
|
21
|
-
dockerfile = "Dockerfile"
|
|
22
|
-
|
|
23
|
-
[env]
|
|
24
|
-
NODE_ENV = "production"
|
|
25
|
-
BUN_ENV = "production"
|
|
26
|
-
|
|
27
|
-
[http_service]
|
|
28
|
-
internal_port = 3000
|
|
29
|
-
force_https = true
|
|
30
|
-
auto_stop_machines = true
|
|
31
|
-
auto_start_machines = true
|
|
32
|
-
min_machines_running = 1
|
|
33
|
-
|
|
34
|
-
[http_service.concurrency]
|
|
35
|
-
type = "requests"
|
|
36
|
-
hard_limit = 250
|
|
37
|
-
soft_limit = 200
|
|
38
|
-
|
|
39
|
-
[[vm]]
|
|
40
|
-
cpu_kind = "shared"
|
|
41
|
-
cpus = 1
|
|
42
|
-
memory_mb = 512
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
**Dockerfile:**
|
|
46
|
-
|
|
47
|
-
```dockerfile
|
|
48
|
-
FROM oven/bun:1.0-slim as builder
|
|
49
|
-
|
|
50
|
-
WORKDIR /app
|
|
51
|
-
COPY package.json bun.lockb ./
|
|
52
|
-
RUN bun install --frozen-lockfile
|
|
53
|
-
|
|
54
|
-
COPY . .
|
|
55
|
-
RUN bun run build
|
|
56
|
-
|
|
57
|
-
# Production image
|
|
58
|
-
FROM oven/bun:1.0-slim
|
|
59
|
-
|
|
60
|
-
WORKDIR /app
|
|
61
|
-
COPY --from=builder /app/dist ./dist
|
|
62
|
-
COPY --from=builder /app/node_modules ./node_modules
|
|
63
|
-
COPY package.json ./
|
|
64
|
-
|
|
65
|
-
EXPOSE 3000
|
|
66
|
-
USER bun
|
|
67
|
-
|
|
68
|
-
CMD ["bun", "run", "start"]
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
## 배포 명령어
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
# Fly CLI 설치
|
|
75
|
-
curl -L https://fly.io/install.sh | sh
|
|
76
|
-
|
|
77
|
-
# 로그인
|
|
78
|
-
fly auth login
|
|
79
|
-
|
|
80
|
-
# 앱 생성
|
|
81
|
-
fly launch --name mandu-app --region nrt
|
|
82
|
-
|
|
83
|
-
# 배포
|
|
84
|
-
fly deploy
|
|
85
|
-
|
|
86
|
-
# 스케일링
|
|
87
|
-
fly scale count 2 --region nrt,sin
|
|
88
|
-
|
|
89
|
-
# 로그 확인
|
|
90
|
-
fly logs
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## 멀티 리전 배포
|
|
94
|
-
|
|
95
|
-
```toml
|
|
96
|
-
# fly.toml
|
|
97
|
-
app = "mandu-app"
|
|
98
|
-
primary_region = "nrt"
|
|
99
|
-
|
|
100
|
-
# 여러 리전에 배포
|
|
101
|
-
[processes]
|
|
102
|
-
app = "bun run start"
|
|
103
|
-
|
|
104
|
-
[[vm]]
|
|
105
|
-
cpu_kind = "shared"
|
|
106
|
-
cpus = 1
|
|
107
|
-
memory_mb = 512
|
|
108
|
-
|
|
109
|
-
# 리전별 스케일링
|
|
110
|
-
# fly scale count app=2 --region nrt
|
|
111
|
-
# fly scale count app=1 --region sin
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## Secrets 관리
|
|
115
|
-
|
|
116
|
-
```bash
|
|
117
|
-
# Secret 설정
|
|
118
|
-
fly secrets set DATABASE_URL="postgresql://..."
|
|
119
|
-
fly secrets set SESSION_SECRET="..."
|
|
120
|
-
|
|
121
|
-
# Secret 목록
|
|
122
|
-
fly secrets list
|
|
123
|
-
|
|
124
|
-
# Secret 삭제
|
|
125
|
-
fly secrets unset OLD_SECRET
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
## 볼륨 (Persistent Storage)
|
|
129
|
-
|
|
130
|
-
```bash
|
|
131
|
-
# 볼륨 생성
|
|
132
|
-
fly volumes create mandu_data --region nrt --size 1
|
|
133
|
-
|
|
134
|
-
# fly.toml에 마운트
|
|
135
|
-
[mounts]
|
|
136
|
-
source = "mandu_data"
|
|
137
|
-
destination = "/data"
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
## 헬스체크
|
|
141
|
-
|
|
142
|
-
```toml
|
|
143
|
-
# fly.toml
|
|
144
|
-
[[services.http_checks]]
|
|
145
|
-
interval = "10s"
|
|
146
|
-
timeout = "2s"
|
|
147
|
-
grace_period = "5s"
|
|
148
|
-
method = "GET"
|
|
149
|
-
path = "/health"
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
Reference: [Fly.io Documentation](https://fly.io/docs/)
|
|
1
|
+
---
|
|
2
|
+
title: Deploy to Fly.io
|
|
3
|
+
impact: MEDIUM
|
|
4
|
+
impactDescription: Edge deployment for global performance
|
|
5
|
+
tags: deployment, fly, edge, platform
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Deploy to Fly.io
|
|
9
|
+
|
|
10
|
+
**Impact: MEDIUM (Edge deployment for global performance)**
|
|
11
|
+
|
|
12
|
+
Fly.io를 사용하여 전 세계 엣지에서 Mandu 앱을 실행하세요.
|
|
13
|
+
|
|
14
|
+
**fly.toml 설정:**
|
|
15
|
+
|
|
16
|
+
```toml
|
|
17
|
+
app = "mandu-app"
|
|
18
|
+
primary_region = "nrt" # Tokyo
|
|
19
|
+
|
|
20
|
+
[build]
|
|
21
|
+
dockerfile = "Dockerfile"
|
|
22
|
+
|
|
23
|
+
[env]
|
|
24
|
+
NODE_ENV = "production"
|
|
25
|
+
BUN_ENV = "production"
|
|
26
|
+
|
|
27
|
+
[http_service]
|
|
28
|
+
internal_port = 3000
|
|
29
|
+
force_https = true
|
|
30
|
+
auto_stop_machines = true
|
|
31
|
+
auto_start_machines = true
|
|
32
|
+
min_machines_running = 1
|
|
33
|
+
|
|
34
|
+
[http_service.concurrency]
|
|
35
|
+
type = "requests"
|
|
36
|
+
hard_limit = 250
|
|
37
|
+
soft_limit = 200
|
|
38
|
+
|
|
39
|
+
[[vm]]
|
|
40
|
+
cpu_kind = "shared"
|
|
41
|
+
cpus = 1
|
|
42
|
+
memory_mb = 512
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Dockerfile:**
|
|
46
|
+
|
|
47
|
+
```dockerfile
|
|
48
|
+
FROM oven/bun:1.0-slim as builder
|
|
49
|
+
|
|
50
|
+
WORKDIR /app
|
|
51
|
+
COPY package.json bun.lockb ./
|
|
52
|
+
RUN bun install --frozen-lockfile
|
|
53
|
+
|
|
54
|
+
COPY . .
|
|
55
|
+
RUN bun run build
|
|
56
|
+
|
|
57
|
+
# Production image
|
|
58
|
+
FROM oven/bun:1.0-slim
|
|
59
|
+
|
|
60
|
+
WORKDIR /app
|
|
61
|
+
COPY --from=builder /app/dist ./dist
|
|
62
|
+
COPY --from=builder /app/node_modules ./node_modules
|
|
63
|
+
COPY package.json ./
|
|
64
|
+
|
|
65
|
+
EXPOSE 3000
|
|
66
|
+
USER bun
|
|
67
|
+
|
|
68
|
+
CMD ["bun", "run", "start"]
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## 배포 명령어
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# Fly CLI 설치
|
|
75
|
+
curl -L https://fly.io/install.sh | sh
|
|
76
|
+
|
|
77
|
+
# 로그인
|
|
78
|
+
fly auth login
|
|
79
|
+
|
|
80
|
+
# 앱 생성
|
|
81
|
+
fly launch --name mandu-app --region nrt
|
|
82
|
+
|
|
83
|
+
# 배포
|
|
84
|
+
fly deploy
|
|
85
|
+
|
|
86
|
+
# 스케일링
|
|
87
|
+
fly scale count 2 --region nrt,sin
|
|
88
|
+
|
|
89
|
+
# 로그 확인
|
|
90
|
+
fly logs
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## 멀티 리전 배포
|
|
94
|
+
|
|
95
|
+
```toml
|
|
96
|
+
# fly.toml
|
|
97
|
+
app = "mandu-app"
|
|
98
|
+
primary_region = "nrt"
|
|
99
|
+
|
|
100
|
+
# 여러 리전에 배포
|
|
101
|
+
[processes]
|
|
102
|
+
app = "bun run start"
|
|
103
|
+
|
|
104
|
+
[[vm]]
|
|
105
|
+
cpu_kind = "shared"
|
|
106
|
+
cpus = 1
|
|
107
|
+
memory_mb = 512
|
|
108
|
+
|
|
109
|
+
# 리전별 스케일링
|
|
110
|
+
# fly scale count app=2 --region nrt
|
|
111
|
+
# fly scale count app=1 --region sin
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Secrets 관리
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# Secret 설정
|
|
118
|
+
fly secrets set DATABASE_URL="postgresql://..."
|
|
119
|
+
fly secrets set SESSION_SECRET="..."
|
|
120
|
+
|
|
121
|
+
# Secret 목록
|
|
122
|
+
fly secrets list
|
|
123
|
+
|
|
124
|
+
# Secret 삭제
|
|
125
|
+
fly secrets unset OLD_SECRET
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## 볼륨 (Persistent Storage)
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# 볼륨 생성
|
|
132
|
+
fly volumes create mandu_data --region nrt --size 1
|
|
133
|
+
|
|
134
|
+
# fly.toml에 마운트
|
|
135
|
+
[mounts]
|
|
136
|
+
source = "mandu_data"
|
|
137
|
+
destination = "/data"
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## 헬스체크
|
|
141
|
+
|
|
142
|
+
```toml
|
|
143
|
+
# fly.toml
|
|
144
|
+
[[services.http_checks]]
|
|
145
|
+
interval = "10s"
|
|
146
|
+
timeout = "2s"
|
|
147
|
+
grace_period = "5s"
|
|
148
|
+
method = "GET"
|
|
149
|
+
path = "/health"
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Reference: [Fly.io Documentation](https://fly.io/docs/)
|
|
@@ -1,179 +1,179 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Deploy to Render
|
|
3
|
-
impact: HIGH
|
|
4
|
-
impactDescription: Managed platform for production workloads
|
|
5
|
-
tags: deployment, render, platform, hosting
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Deploy to Render
|
|
9
|
-
|
|
10
|
-
**Impact: HIGH (Managed platform for production workloads)**
|
|
11
|
-
|
|
12
|
-
Render를 사용하여 Mandu 앱을 배포하세요. 자동 HTTPS, 스케일링, 무중단 배포를 지원합니다.
|
|
13
|
-
|
|
14
|
-
**render.yaml (Blueprint):**
|
|
15
|
-
|
|
16
|
-
```yaml
|
|
17
|
-
services:
|
|
18
|
-
- type: web
|
|
19
|
-
name: mandu-app
|
|
20
|
-
runtime: node
|
|
21
|
-
region: singapore # 또는 oregon, frankfurt 등
|
|
22
|
-
plan: starter # starter, standard, pro
|
|
23
|
-
|
|
24
|
-
buildCommand: |
|
|
25
|
-
curl -fsSL https://bun.sh/install | bash
|
|
26
|
-
export PATH="$HOME/.bun/bin:$PATH"
|
|
27
|
-
bun install --frozen-lockfile
|
|
28
|
-
bun run build
|
|
29
|
-
|
|
30
|
-
startCommand: |
|
|
31
|
-
export PATH="$HOME/.bun/bin:$PATH"
|
|
32
|
-
bun run start
|
|
33
|
-
|
|
34
|
-
healthCheckPath: /health
|
|
35
|
-
|
|
36
|
-
envVars:
|
|
37
|
-
- key: NODE_ENV
|
|
38
|
-
value: production
|
|
39
|
-
- key: BUN_ENV
|
|
40
|
-
value: production
|
|
41
|
-
- key: DATABASE_URL
|
|
42
|
-
fromDatabase:
|
|
43
|
-
name: mandu-db
|
|
44
|
-
property: connectionString
|
|
45
|
-
- key: SESSION_SECRET
|
|
46
|
-
generateValue: true
|
|
47
|
-
|
|
48
|
-
databases:
|
|
49
|
-
- name: mandu-db
|
|
50
|
-
plan: starter
|
|
51
|
-
databaseName: mandu
|
|
52
|
-
user: mandu
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
## 헬스체크 엔드포인트
|
|
56
|
-
|
|
57
|
-
```typescript
|
|
58
|
-
// app/health/slot.ts
|
|
59
|
-
import { Mandu } from "@mandujs/core";
|
|
60
|
-
|
|
61
|
-
export default Mandu.filling({
|
|
62
|
-
get: async (ctx) => {
|
|
63
|
-
// 데이터베이스 연결 확인
|
|
64
|
-
try {
|
|
65
|
-
await db.query("SELECT 1");
|
|
66
|
-
return ctx.ok({ status: "healthy", timestamp: new Date().toISOString() });
|
|
67
|
-
} catch (error) {
|
|
68
|
-
return ctx.fail("Database connection failed");
|
|
69
|
-
}
|
|
70
|
-
},
|
|
71
|
-
});
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## Render Native Runtime (Bun 직접 지원)
|
|
75
|
-
|
|
76
|
-
```yaml
|
|
77
|
-
# render.yaml - Bun 네이티브 (Beta)
|
|
78
|
-
services:
|
|
79
|
-
- type: web
|
|
80
|
-
name: mandu-app
|
|
81
|
-
runtime: docker
|
|
82
|
-
dockerfilePath: ./Dockerfile
|
|
83
|
-
|
|
84
|
-
envVars:
|
|
85
|
-
- key: NODE_ENV
|
|
86
|
-
value: production
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
```dockerfile
|
|
90
|
-
# Dockerfile
|
|
91
|
-
FROM oven/bun:1.0-slim
|
|
92
|
-
|
|
93
|
-
WORKDIR /app
|
|
94
|
-
|
|
95
|
-
COPY package.json bun.lockb ./
|
|
96
|
-
RUN bun install --frozen-lockfile --production
|
|
97
|
-
|
|
98
|
-
COPY . .
|
|
99
|
-
RUN bun run build
|
|
100
|
-
|
|
101
|
-
EXPOSE 3000
|
|
102
|
-
USER bun
|
|
103
|
-
|
|
104
|
-
CMD ["bun", "run", "start"]
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
## 환경별 배포
|
|
108
|
-
|
|
109
|
-
```yaml
|
|
110
|
-
# render.yaml - Preview Environments
|
|
111
|
-
previewsEnabled: true
|
|
112
|
-
previewsExpireAfterDays: 7
|
|
113
|
-
|
|
114
|
-
services:
|
|
115
|
-
- type: web
|
|
116
|
-
name: mandu-app
|
|
117
|
-
# ... 기본 설정
|
|
118
|
-
|
|
119
|
-
envVars:
|
|
120
|
-
- key: NODE_ENV
|
|
121
|
-
value: production
|
|
122
|
-
- key: API_URL
|
|
123
|
-
fromGroup: mandu-production # Production
|
|
124
|
-
|
|
125
|
-
previews:
|
|
126
|
-
generation: automatic
|
|
127
|
-
envVars:
|
|
128
|
-
- key: API_URL
|
|
129
|
-
fromGroup: mandu-staging # Preview는 staging 사용
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
## 자동 배포 설정
|
|
133
|
-
|
|
134
|
-
```yaml
|
|
135
|
-
# GitHub 연동 시 자동 배포
|
|
136
|
-
# render.yaml
|
|
137
|
-
services:
|
|
138
|
-
- type: web
|
|
139
|
-
name: mandu-app
|
|
140
|
-
repo: https://github.com/your-org/mandu-app
|
|
141
|
-
branch: main # main 브랜치 자동 배포
|
|
142
|
-
autoDeploy: true # push 시 자동 배포
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
## 스케일링 설정
|
|
146
|
-
|
|
147
|
-
```yaml
|
|
148
|
-
services:
|
|
149
|
-
- type: web
|
|
150
|
-
name: mandu-app
|
|
151
|
-
plan: standard
|
|
152
|
-
|
|
153
|
-
scaling:
|
|
154
|
-
minInstances: 1
|
|
155
|
-
maxInstances: 5
|
|
156
|
-
targetMemoryPercent: 80
|
|
157
|
-
targetCPUPercent: 70
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
## Render CLI
|
|
161
|
-
|
|
162
|
-
```bash
|
|
163
|
-
# CLI 설치
|
|
164
|
-
npm install -g @render/cli
|
|
165
|
-
|
|
166
|
-
# 로그인
|
|
167
|
-
render login
|
|
168
|
-
|
|
169
|
-
# 서비스 목록
|
|
170
|
-
render services list
|
|
171
|
-
|
|
172
|
-
# 수동 배포
|
|
173
|
-
render deploys create --service-id srv-xxx
|
|
174
|
-
|
|
175
|
-
# 로그 확인
|
|
176
|
-
render logs --service-id srv-xxx --tail
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
Reference: [Render Documentation](https://render.com/docs)
|
|
1
|
+
---
|
|
2
|
+
title: Deploy to Render
|
|
3
|
+
impact: HIGH
|
|
4
|
+
impactDescription: Managed platform for production workloads
|
|
5
|
+
tags: deployment, render, platform, hosting
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Deploy to Render
|
|
9
|
+
|
|
10
|
+
**Impact: HIGH (Managed platform for production workloads)**
|
|
11
|
+
|
|
12
|
+
Render를 사용하여 Mandu 앱을 배포하세요. 자동 HTTPS, 스케일링, 무중단 배포를 지원합니다.
|
|
13
|
+
|
|
14
|
+
**render.yaml (Blueprint):**
|
|
15
|
+
|
|
16
|
+
```yaml
|
|
17
|
+
services:
|
|
18
|
+
- type: web
|
|
19
|
+
name: mandu-app
|
|
20
|
+
runtime: node
|
|
21
|
+
region: singapore # 또는 oregon, frankfurt 등
|
|
22
|
+
plan: starter # starter, standard, pro
|
|
23
|
+
|
|
24
|
+
buildCommand: |
|
|
25
|
+
curl -fsSL https://bun.sh/install | bash
|
|
26
|
+
export PATH="$HOME/.bun/bin:$PATH"
|
|
27
|
+
bun install --frozen-lockfile
|
|
28
|
+
bun run build
|
|
29
|
+
|
|
30
|
+
startCommand: |
|
|
31
|
+
export PATH="$HOME/.bun/bin:$PATH"
|
|
32
|
+
bun run start
|
|
33
|
+
|
|
34
|
+
healthCheckPath: /health
|
|
35
|
+
|
|
36
|
+
envVars:
|
|
37
|
+
- key: NODE_ENV
|
|
38
|
+
value: production
|
|
39
|
+
- key: BUN_ENV
|
|
40
|
+
value: production
|
|
41
|
+
- key: DATABASE_URL
|
|
42
|
+
fromDatabase:
|
|
43
|
+
name: mandu-db
|
|
44
|
+
property: connectionString
|
|
45
|
+
- key: SESSION_SECRET
|
|
46
|
+
generateValue: true
|
|
47
|
+
|
|
48
|
+
databases:
|
|
49
|
+
- name: mandu-db
|
|
50
|
+
plan: starter
|
|
51
|
+
databaseName: mandu
|
|
52
|
+
user: mandu
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## 헬스체크 엔드포인트
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
// app/health/slot.ts
|
|
59
|
+
import { Mandu } from "@mandujs/core";
|
|
60
|
+
|
|
61
|
+
export default Mandu.filling({
|
|
62
|
+
get: async (ctx) => {
|
|
63
|
+
// 데이터베이스 연결 확인
|
|
64
|
+
try {
|
|
65
|
+
await db.query("SELECT 1");
|
|
66
|
+
return ctx.ok({ status: "healthy", timestamp: new Date().toISOString() });
|
|
67
|
+
} catch (error) {
|
|
68
|
+
return ctx.fail("Database connection failed");
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Render Native Runtime (Bun 직접 지원)
|
|
75
|
+
|
|
76
|
+
```yaml
|
|
77
|
+
# render.yaml - Bun 네이티브 (Beta)
|
|
78
|
+
services:
|
|
79
|
+
- type: web
|
|
80
|
+
name: mandu-app
|
|
81
|
+
runtime: docker
|
|
82
|
+
dockerfilePath: ./Dockerfile
|
|
83
|
+
|
|
84
|
+
envVars:
|
|
85
|
+
- key: NODE_ENV
|
|
86
|
+
value: production
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
```dockerfile
|
|
90
|
+
# Dockerfile
|
|
91
|
+
FROM oven/bun:1.0-slim
|
|
92
|
+
|
|
93
|
+
WORKDIR /app
|
|
94
|
+
|
|
95
|
+
COPY package.json bun.lockb ./
|
|
96
|
+
RUN bun install --frozen-lockfile --production
|
|
97
|
+
|
|
98
|
+
COPY . .
|
|
99
|
+
RUN bun run build
|
|
100
|
+
|
|
101
|
+
EXPOSE 3000
|
|
102
|
+
USER bun
|
|
103
|
+
|
|
104
|
+
CMD ["bun", "run", "start"]
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## 환경별 배포
|
|
108
|
+
|
|
109
|
+
```yaml
|
|
110
|
+
# render.yaml - Preview Environments
|
|
111
|
+
previewsEnabled: true
|
|
112
|
+
previewsExpireAfterDays: 7
|
|
113
|
+
|
|
114
|
+
services:
|
|
115
|
+
- type: web
|
|
116
|
+
name: mandu-app
|
|
117
|
+
# ... 기본 설정
|
|
118
|
+
|
|
119
|
+
envVars:
|
|
120
|
+
- key: NODE_ENV
|
|
121
|
+
value: production
|
|
122
|
+
- key: API_URL
|
|
123
|
+
fromGroup: mandu-production # Production
|
|
124
|
+
|
|
125
|
+
previews:
|
|
126
|
+
generation: automatic
|
|
127
|
+
envVars:
|
|
128
|
+
- key: API_URL
|
|
129
|
+
fromGroup: mandu-staging # Preview는 staging 사용
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## 자동 배포 설정
|
|
133
|
+
|
|
134
|
+
```yaml
|
|
135
|
+
# GitHub 연동 시 자동 배포
|
|
136
|
+
# render.yaml
|
|
137
|
+
services:
|
|
138
|
+
- type: web
|
|
139
|
+
name: mandu-app
|
|
140
|
+
repo: https://github.com/your-org/mandu-app
|
|
141
|
+
branch: main # main 브랜치 자동 배포
|
|
142
|
+
autoDeploy: true # push 시 자동 배포
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## 스케일링 설정
|
|
146
|
+
|
|
147
|
+
```yaml
|
|
148
|
+
services:
|
|
149
|
+
- type: web
|
|
150
|
+
name: mandu-app
|
|
151
|
+
plan: standard
|
|
152
|
+
|
|
153
|
+
scaling:
|
|
154
|
+
minInstances: 1
|
|
155
|
+
maxInstances: 5
|
|
156
|
+
targetMemoryPercent: 80
|
|
157
|
+
targetCPUPercent: 70
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Render CLI
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
# CLI 설치
|
|
164
|
+
npm install -g @render/cli
|
|
165
|
+
|
|
166
|
+
# 로그인
|
|
167
|
+
render login
|
|
168
|
+
|
|
169
|
+
# 서비스 목록
|
|
170
|
+
render services list
|
|
171
|
+
|
|
172
|
+
# 수동 배포
|
|
173
|
+
render deploys create --service-id srv-xxx
|
|
174
|
+
|
|
175
|
+
# 로그 확인
|
|
176
|
+
render logs --service-id srv-xxx --tail
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Reference: [Render Documentation](https://render.com/docs)
|