create-entity-server 0.7.11 → 0.7.12
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/package.json +1 -1
- package/template/entities/System/Storage/file_meta.json +6 -0
- package/template/scripts/api-key.ps1 +123 -123
- package/template/scripts/cleanup-history.ps1 +69 -69
- package/template/scripts/cli.ps1 +24 -24
- package/template/scripts/entity.ps1 +70 -70
- package/template/scripts/generate-env-keys.ps1 +125 -125
- package/template/scripts/normalize-entities.ps1 +87 -87
- package/template/scripts/rbac-role.ps1 +124 -124
- package/template/scripts/reset-all.ps1 +83 -83
- package/template/scripts/run.ps1 +248 -248
- package/template/scripts/sync.ps1 +145 -145
- package/template/scripts/update-server.ps1 +289 -289
package/template/scripts/run.ps1
CHANGED
|
@@ -1,248 +1,248 @@
|
|
|
1
|
-
# Entity Server - Run Script (Windows PowerShell)
|
|
2
|
-
param(
|
|
3
|
-
[Parameter(Position=0)]
|
|
4
|
-
[string]$Mode = ""
|
|
5
|
-
)
|
|
6
|
-
|
|
7
|
-
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
8
|
-
$ProjectRoot = Split-Path -Parent $ScriptDir
|
|
9
|
-
|
|
10
|
-
Set-Location $ProjectRoot
|
|
11
|
-
|
|
12
|
-
$ServerConfig = Join-Path $ProjectRoot "configs\server.json"
|
|
13
|
-
$DatabaseConfig = Join-Path $ProjectRoot "configs\database.json"
|
|
14
|
-
$RunDir = Join-Path $ProjectRoot ".run"
|
|
15
|
-
$PidFile = Join-Path $RunDir "entity-server.pid"
|
|
16
|
-
$StdoutLog = Join-Path $ProjectRoot "logs\server.out.log"
|
|
17
|
-
|
|
18
|
-
if (-not (Test-Path $RunDir)) { New-Item -ItemType Directory -Path $RunDir | Out-Null }
|
|
19
|
-
if (-not (Test-Path (Join-Path $ProjectRoot "logs"))) { New-Item -ItemType Directory -Path (Join-Path $ProjectRoot "logs") | Out-Null }
|
|
20
|
-
|
|
21
|
-
# Load language from .env
|
|
22
|
-
$Language = "ko"
|
|
23
|
-
$EnvFile = Join-Path $ProjectRoot ".env"
|
|
24
|
-
if (Test-Path $EnvFile) {
|
|
25
|
-
$LangLine = Get-Content $EnvFile | Where-Object { $_ -match '^LANGUAGE=' } | Select-Object -First 1
|
|
26
|
-
if ($LangLine) { $Language = $LangLine -replace '^LANGUAGE=', '' }
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function Is-Running {
|
|
30
|
-
if (-not (Test-Path $PidFile)) { return $false }
|
|
31
|
-
$pid = (Get-Content $PidFile -ErrorAction SilentlyContinue).Trim()
|
|
32
|
-
if (-not $pid) { return $false }
|
|
33
|
-
try {
|
|
34
|
-
$proc = Get-Process -Id ([int]$pid) -ErrorAction Stop
|
|
35
|
-
return $true
|
|
36
|
-
} catch { return $false }
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function Stop-Server {
|
|
40
|
-
if (-not (Test-Path $PidFile)) {
|
|
41
|
-
if ($Language -eq "en") { Write-Host "i Server is not running (pid file not found)." }
|
|
42
|
-
else { Write-Host "i 서버가 실행 중이 아닙니다 (pid 파일 없음)." }
|
|
43
|
-
return
|
|
44
|
-
}
|
|
45
|
-
$pid = (Get-Content $PidFile -ErrorAction SilentlyContinue).Trim()
|
|
46
|
-
if (-not $pid) {
|
|
47
|
-
Remove-Item $PidFile -Force
|
|
48
|
-
if ($Language -eq "en") { Write-Host "i Empty pid file removed." }
|
|
49
|
-
else { Write-Host "i 비어있는 pid 파일을 정리했습니다." }
|
|
50
|
-
return
|
|
51
|
-
}
|
|
52
|
-
try {
|
|
53
|
-
$proc = Get-Process -Id ([int]$pid) -ErrorAction Stop
|
|
54
|
-
$procInfo = "$($proc.Id) $($proc.UserName) $($proc.StartTime) $($proc.ProcessName)"
|
|
55
|
-
if ($Language -eq "en") {
|
|
56
|
-
Write-Host "Running process:"
|
|
57
|
-
Write-Host " PID ELAPSED COMMAND"
|
|
58
|
-
Write-Host " $procInfo"
|
|
59
|
-
Write-Host ""
|
|
60
|
-
$input = Read-Host "Stop this process? [y/N]"
|
|
61
|
-
} else {
|
|
62
|
-
Write-Host "실행 중인 프로세스:"
|
|
63
|
-
Write-Host " PID 실행시간 COMMAND"
|
|
64
|
-
Write-Host " $procInfo"
|
|
65
|
-
Write-Host ""
|
|
66
|
-
$input = Read-Host "이 프로세스를 중지할까요? [y/N]"
|
|
67
|
-
}
|
|
68
|
-
if ($input -notmatch '^[Yy](es)?$') {
|
|
69
|
-
if ($Language -eq "en") { Write-Host "Canceled." }
|
|
70
|
-
else { Write-Host "취소되었습니다." }
|
|
71
|
-
return
|
|
72
|
-
}
|
|
73
|
-
Stop-Process -Id ([int]$pid) -Force
|
|
74
|
-
Remove-Item $PidFile -Force
|
|
75
|
-
if ($Language -eq "en") { Write-Host "OK Server stopped (pid: $pid)" }
|
|
76
|
-
else { Write-Host "OK 서버가 중지되었습니다 (pid: $pid)" }
|
|
77
|
-
} catch {
|
|
78
|
-
Remove-Item $PidFile -Force -ErrorAction SilentlyContinue
|
|
79
|
-
if ($Language -eq "en") { Write-Host "i Stale pid file removed (process not found)." }
|
|
80
|
-
else { Write-Host "i 실행 중인 프로세스가 없어 stale pid 파일을 정리했습니다." }
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function Show-Status {
|
|
85
|
-
$ServerBin = Join-Path $ProjectRoot "bin\entity-server.exe"
|
|
86
|
-
if (-not (Test-Path $ServerBin)) {
|
|
87
|
-
$LegacyBin = Join-Path $ProjectRoot "entity-server.exe"
|
|
88
|
-
if (Test-Path $LegacyBin) { $ServerBin = $LegacyBin }
|
|
89
|
-
}
|
|
90
|
-
if (Is-Running) {
|
|
91
|
-
& $ServerBin banner-status RUNNING
|
|
92
|
-
if ($Language -eq "en") { Write-Host "Stop: .\run.ps1 stop" }
|
|
93
|
-
else { Write-Host "중지: .\run.ps1 stop" }
|
|
94
|
-
} else {
|
|
95
|
-
& $ServerBin banner-status STOPPED
|
|
96
|
-
if ($Language -eq "en") { Write-Host "Start: .\run.ps1 start" }
|
|
97
|
-
else { Write-Host "시작: .\run.ps1 start" }
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
if (-not $Mode) {
|
|
102
|
-
if ($Language -eq "en") {
|
|
103
|
-
Write-Host "Entity Server - Run Script"
|
|
104
|
-
Write-Host "=========================="
|
|
105
|
-
Write-Host ""
|
|
106
|
-
Write-Host "Force configs/server.json environment and configs/database.json default group, then start compiled server binary."
|
|
107
|
-
Write-Host ""
|
|
108
|
-
Write-Host "Usage: .\run.ps1 <mode>"
|
|
109
|
-
Write-Host ""
|
|
110
|
-
Write-Host "Modes:"
|
|
111
|
-
Write-Host " dev environment=development, database.default=development, then run binary"
|
|
112
|
-
Write-Host " start environment=production, database.default=production, then run in background"
|
|
113
|
-
Write-Host " stop stop background server started by this script"
|
|
114
|
-
Write-Host " status show server status"
|
|
115
|
-
Write-Host ""
|
|
116
|
-
Write-Host "Examples:"
|
|
117
|
-
Write-Host " .\run.ps1 dev"
|
|
118
|
-
Write-Host " .\run.ps1 start"
|
|
119
|
-
Write-Host " .\run.ps1 stop"
|
|
120
|
-
Write-Host " .\run.ps1 status"
|
|
121
|
-
} else {
|
|
122
|
-
Write-Host "Entity Server - 실행 스크립트"
|
|
123
|
-
Write-Host "==========================="
|
|
124
|
-
Write-Host ""
|
|
125
|
-
Write-Host "configs/server.json의 environment와 configs/database.json의 default를 강제 설정하고 바이너리를 실행합니다."
|
|
126
|
-
Write-Host ""
|
|
127
|
-
Write-Host "사용법: .\run.ps1 <모드>"
|
|
128
|
-
Write-Host ""
|
|
129
|
-
Write-Host "모드:"
|
|
130
|
-
Write-Host " dev environment=development, database.default=development 강제 후 바이너리 실행"
|
|
131
|
-
Write-Host " start environment=production, database.default=production 강제 후 백그라운드 실행"
|
|
132
|
-
Write-Host " stop run.ps1로 백그라운드 실행한 서버 중지"
|
|
133
|
-
Write-Host " status 서버 상태 조회"
|
|
134
|
-
Write-Host ""
|
|
135
|
-
Write-Host "예제:"
|
|
136
|
-
Write-Host " .\run.ps1 dev"
|
|
137
|
-
Write-Host " .\run.ps1 start"
|
|
138
|
-
Write-Host " .\run.ps1 stop"
|
|
139
|
-
Write-Host " .\run.ps1 status"
|
|
140
|
-
}
|
|
141
|
-
exit 0
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
if (-not (Test-Path $ServerConfig)) {
|
|
145
|
-
if ($Language -eq "en") { Write-Host "X configs/server.json not found" }
|
|
146
|
-
else { Write-Host "X configs/server.json 파일이 없습니다" }
|
|
147
|
-
exit 1
|
|
148
|
-
}
|
|
149
|
-
if (-not (Test-Path $DatabaseConfig)) {
|
|
150
|
-
if ($Language -eq "en") { Write-Host "X configs/database.json not found" }
|
|
151
|
-
else { Write-Host "X configs/database.json 파일이 없습니다" }
|
|
152
|
-
exit 1
|
|
153
|
-
}
|
|
154
|
-
$ServerBin = Join-Path $ProjectRoot "bin\entity-server.exe"
|
|
155
|
-
if (-not (Test-Path $ServerBin)) {
|
|
156
|
-
$LegacyBin = Join-Path $ProjectRoot "entity-server.exe"
|
|
157
|
-
if (Test-Path $LegacyBin) {
|
|
158
|
-
$ServerBin = $LegacyBin
|
|
159
|
-
} else {
|
|
160
|
-
if ($Language -eq "en") { Write-Host "X entity-server.exe not found (bin/entity-server.exe or .\entity-server.exe)" }
|
|
161
|
-
else { Write-Host "X entity-server.exe 파일이 없습니다 (bin/entity-server.exe 또는 .\entity-server.exe)" }
|
|
162
|
-
exit 1
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
function Update-JsonField {
|
|
167
|
-
param([string]$File, [string]$Key, [string]$Value)
|
|
168
|
-
$content = Get-Content $File -Raw
|
|
169
|
-
$content = $content -replace "(`"$Key`"\s*:\s*`")[^`"]+(`")", "`${1}$Value`${2}"
|
|
170
|
-
Set-Content $File $content -NoNewline
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
switch ($Mode) {
|
|
174
|
-
{ $_ -in @("dev", "development") } {
|
|
175
|
-
if (Is-Running) {
|
|
176
|
-
$pid = (Get-Content $PidFile).Trim()
|
|
177
|
-
if ($Language -eq "en") { Write-Host "X Server already running (pid: $pid). Stop first: .\run.ps1 stop" }
|
|
178
|
-
else { Write-Host "X 이미 서버가 실행 중입니다 (pid: $pid). 먼저 중지하세요: .\run.ps1 stop" }
|
|
179
|
-
exit 1
|
|
180
|
-
}
|
|
181
|
-
$dbContent = Get-Content $DatabaseConfig -Raw
|
|
182
|
-
if ($dbContent -notmatch '"development"\s*:') {
|
|
183
|
-
if ($Language -eq "en") { Write-Host "X database group 'development' not found in configs/database.json" }
|
|
184
|
-
else { Write-Host "X configs/database.json에 'development' 그룹이 없습니다" }
|
|
185
|
-
exit 1
|
|
186
|
-
}
|
|
187
|
-
Update-JsonField $ServerConfig "environment" "development"
|
|
188
|
-
Update-JsonField $DatabaseConfig "default" "development"
|
|
189
|
-
& $ServerBin
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
"start" {
|
|
193
|
-
if (Is-Running) {
|
|
194
|
-
$pid = (Get-Content $PidFile).Trim()
|
|
195
|
-
if ($Language -eq "en") { Write-Host "X Server already running (pid: $pid). Stop first: .\run.ps1 stop" }
|
|
196
|
-
else { Write-Host "X 이미 서버가 실행 중입니다 (pid: $pid). 먼저 중지하세요: .\run.ps1 stop" }
|
|
197
|
-
exit 1
|
|
198
|
-
}
|
|
199
|
-
$dbContent = Get-Content $DatabaseConfig -Raw
|
|
200
|
-
if ($dbContent -notmatch '"production"\s*:') {
|
|
201
|
-
if ($Language -eq "en") { Write-Host "X database group 'production' not found in configs/database.json" }
|
|
202
|
-
else { Write-Host "X configs/database.json에 'production' 그룹이 없습니다" }
|
|
203
|
-
exit 1
|
|
204
|
-
}
|
|
205
|
-
Update-JsonField $ServerConfig "environment" "production"
|
|
206
|
-
Update-JsonField $DatabaseConfig "default" "production"
|
|
207
|
-
& $ServerBin banner
|
|
208
|
-
$proc = Start-Process -FilePath $ServerBin -RedirectStandardOutput $StdoutLog -RedirectStandardError $StdoutLog -WindowStyle Hidden -PassThru
|
|
209
|
-
$proc.Id | Set-Content $PidFile
|
|
210
|
-
Start-Sleep -Milliseconds 300
|
|
211
|
-
try {
|
|
212
|
-
$check = Get-Process -Id $proc.Id -ErrorAction Stop
|
|
213
|
-
if ($Language -eq "en") {
|
|
214
|
-
Write-Host "OK Entity Server started in background (pid: $($proc.Id))"
|
|
215
|
-
Write-Host "Status: .\run.ps1 status"
|
|
216
|
-
} else {
|
|
217
|
-
Write-Host "OK Entity Server가 백그라운드에서 시작되었습니다 (pid: $($proc.Id))"
|
|
218
|
-
Write-Host "상태: .\run.ps1 status"
|
|
219
|
-
Write-Host "중지: .\run.ps1 stop"
|
|
220
|
-
}
|
|
221
|
-
} catch {
|
|
222
|
-
Remove-Item $PidFile -Force
|
|
223
|
-
if ($Language -eq "en") {
|
|
224
|
-
Write-Host "X Failed to start Entity Server in background"
|
|
225
|
-
Write-Host "Check logs: $StdoutLog"
|
|
226
|
-
} else {
|
|
227
|
-
Write-Host "X Entity Server 백그라운드 시작에 실패했습니다"
|
|
228
|
-
Write-Host "로그 확인: $StdoutLog"
|
|
229
|
-
}
|
|
230
|
-
exit 1
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
"stop" { Stop-Server }
|
|
235
|
-
|
|
236
|
-
"status" { Show-Status }
|
|
237
|
-
|
|
238
|
-
default {
|
|
239
|
-
if ($Language -eq "en") {
|
|
240
|
-
Write-Host "X Unknown mode: $Mode"
|
|
241
|
-
Write-Host "Run '.\run.ps1' for usage information"
|
|
242
|
-
} else {
|
|
243
|
-
Write-Host "X 알 수 없는 모드: $Mode"
|
|
244
|
-
Write-Host "'.\run.ps1'로 사용법을 확인하세요"
|
|
245
|
-
}
|
|
246
|
-
exit 1
|
|
247
|
-
}
|
|
248
|
-
}
|
|
1
|
+
# Entity Server - Run Script (Windows PowerShell)
|
|
2
|
+
param(
|
|
3
|
+
[Parameter(Position=0)]
|
|
4
|
+
[string]$Mode = ""
|
|
5
|
+
)
|
|
6
|
+
|
|
7
|
+
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
8
|
+
$ProjectRoot = Split-Path -Parent $ScriptDir
|
|
9
|
+
|
|
10
|
+
Set-Location $ProjectRoot
|
|
11
|
+
|
|
12
|
+
$ServerConfig = Join-Path $ProjectRoot "configs\server.json"
|
|
13
|
+
$DatabaseConfig = Join-Path $ProjectRoot "configs\database.json"
|
|
14
|
+
$RunDir = Join-Path $ProjectRoot ".run"
|
|
15
|
+
$PidFile = Join-Path $RunDir "entity-server.pid"
|
|
16
|
+
$StdoutLog = Join-Path $ProjectRoot "logs\server.out.log"
|
|
17
|
+
|
|
18
|
+
if (-not (Test-Path $RunDir)) { New-Item -ItemType Directory -Path $RunDir | Out-Null }
|
|
19
|
+
if (-not (Test-Path (Join-Path $ProjectRoot "logs"))) { New-Item -ItemType Directory -Path (Join-Path $ProjectRoot "logs") | Out-Null }
|
|
20
|
+
|
|
21
|
+
# Load language from .env
|
|
22
|
+
$Language = "ko"
|
|
23
|
+
$EnvFile = Join-Path $ProjectRoot ".env"
|
|
24
|
+
if (Test-Path $EnvFile) {
|
|
25
|
+
$LangLine = Get-Content $EnvFile | Where-Object { $_ -match '^LANGUAGE=' } | Select-Object -First 1
|
|
26
|
+
if ($LangLine) { $Language = $LangLine -replace '^LANGUAGE=', '' }
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function Is-Running {
|
|
30
|
+
if (-not (Test-Path $PidFile)) { return $false }
|
|
31
|
+
$pid = (Get-Content $PidFile -ErrorAction SilentlyContinue).Trim()
|
|
32
|
+
if (-not $pid) { return $false }
|
|
33
|
+
try {
|
|
34
|
+
$proc = Get-Process -Id ([int]$pid) -ErrorAction Stop
|
|
35
|
+
return $true
|
|
36
|
+
} catch { return $false }
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function Stop-Server {
|
|
40
|
+
if (-not (Test-Path $PidFile)) {
|
|
41
|
+
if ($Language -eq "en") { Write-Host "i Server is not running (pid file not found)." }
|
|
42
|
+
else { Write-Host "i 서버가 실행 중이 아닙니다 (pid 파일 없음)." }
|
|
43
|
+
return
|
|
44
|
+
}
|
|
45
|
+
$pid = (Get-Content $PidFile -ErrorAction SilentlyContinue).Trim()
|
|
46
|
+
if (-not $pid) {
|
|
47
|
+
Remove-Item $PidFile -Force
|
|
48
|
+
if ($Language -eq "en") { Write-Host "i Empty pid file removed." }
|
|
49
|
+
else { Write-Host "i 비어있는 pid 파일을 정리했습니다." }
|
|
50
|
+
return
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
$proc = Get-Process -Id ([int]$pid) -ErrorAction Stop
|
|
54
|
+
$procInfo = "$($proc.Id) $($proc.UserName) $($proc.StartTime) $($proc.ProcessName)"
|
|
55
|
+
if ($Language -eq "en") {
|
|
56
|
+
Write-Host "Running process:"
|
|
57
|
+
Write-Host " PID ELAPSED COMMAND"
|
|
58
|
+
Write-Host " $procInfo"
|
|
59
|
+
Write-Host ""
|
|
60
|
+
$input = Read-Host "Stop this process? [y/N]"
|
|
61
|
+
} else {
|
|
62
|
+
Write-Host "실행 중인 프로세스:"
|
|
63
|
+
Write-Host " PID 실행시간 COMMAND"
|
|
64
|
+
Write-Host " $procInfo"
|
|
65
|
+
Write-Host ""
|
|
66
|
+
$input = Read-Host "이 프로세스를 중지할까요? [y/N]"
|
|
67
|
+
}
|
|
68
|
+
if ($input -notmatch '^[Yy](es)?$') {
|
|
69
|
+
if ($Language -eq "en") { Write-Host "Canceled." }
|
|
70
|
+
else { Write-Host "취소되었습니다." }
|
|
71
|
+
return
|
|
72
|
+
}
|
|
73
|
+
Stop-Process -Id ([int]$pid) -Force
|
|
74
|
+
Remove-Item $PidFile -Force
|
|
75
|
+
if ($Language -eq "en") { Write-Host "OK Server stopped (pid: $pid)" }
|
|
76
|
+
else { Write-Host "OK 서버가 중지되었습니다 (pid: $pid)" }
|
|
77
|
+
} catch {
|
|
78
|
+
Remove-Item $PidFile -Force -ErrorAction SilentlyContinue
|
|
79
|
+
if ($Language -eq "en") { Write-Host "i Stale pid file removed (process not found)." }
|
|
80
|
+
else { Write-Host "i 실행 중인 프로세스가 없어 stale pid 파일을 정리했습니다." }
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function Show-Status {
|
|
85
|
+
$ServerBin = Join-Path $ProjectRoot "bin\entity-server.exe"
|
|
86
|
+
if (-not (Test-Path $ServerBin)) {
|
|
87
|
+
$LegacyBin = Join-Path $ProjectRoot "entity-server.exe"
|
|
88
|
+
if (Test-Path $LegacyBin) { $ServerBin = $LegacyBin }
|
|
89
|
+
}
|
|
90
|
+
if (Is-Running) {
|
|
91
|
+
& $ServerBin banner-status RUNNING
|
|
92
|
+
if ($Language -eq "en") { Write-Host "Stop: .\run.ps1 stop" }
|
|
93
|
+
else { Write-Host "중지: .\run.ps1 stop" }
|
|
94
|
+
} else {
|
|
95
|
+
& $ServerBin banner-status STOPPED
|
|
96
|
+
if ($Language -eq "en") { Write-Host "Start: .\run.ps1 start" }
|
|
97
|
+
else { Write-Host "시작: .\run.ps1 start" }
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (-not $Mode) {
|
|
102
|
+
if ($Language -eq "en") {
|
|
103
|
+
Write-Host "Entity Server - Run Script"
|
|
104
|
+
Write-Host "=========================="
|
|
105
|
+
Write-Host ""
|
|
106
|
+
Write-Host "Force configs/server.json environment and configs/database.json default group, then start compiled server binary."
|
|
107
|
+
Write-Host ""
|
|
108
|
+
Write-Host "Usage: .\run.ps1 <mode>"
|
|
109
|
+
Write-Host ""
|
|
110
|
+
Write-Host "Modes:"
|
|
111
|
+
Write-Host " dev environment=development, database.default=development, then run binary"
|
|
112
|
+
Write-Host " start environment=production, database.default=production, then run in background"
|
|
113
|
+
Write-Host " stop stop background server started by this script"
|
|
114
|
+
Write-Host " status show server status"
|
|
115
|
+
Write-Host ""
|
|
116
|
+
Write-Host "Examples:"
|
|
117
|
+
Write-Host " .\run.ps1 dev"
|
|
118
|
+
Write-Host " .\run.ps1 start"
|
|
119
|
+
Write-Host " .\run.ps1 stop"
|
|
120
|
+
Write-Host " .\run.ps1 status"
|
|
121
|
+
} else {
|
|
122
|
+
Write-Host "Entity Server - 실행 스크립트"
|
|
123
|
+
Write-Host "==========================="
|
|
124
|
+
Write-Host ""
|
|
125
|
+
Write-Host "configs/server.json의 environment와 configs/database.json의 default를 강제 설정하고 바이너리를 실행합니다."
|
|
126
|
+
Write-Host ""
|
|
127
|
+
Write-Host "사용법: .\run.ps1 <모드>"
|
|
128
|
+
Write-Host ""
|
|
129
|
+
Write-Host "모드:"
|
|
130
|
+
Write-Host " dev environment=development, database.default=development 강제 후 바이너리 실행"
|
|
131
|
+
Write-Host " start environment=production, database.default=production 강제 후 백그라운드 실행"
|
|
132
|
+
Write-Host " stop run.ps1로 백그라운드 실행한 서버 중지"
|
|
133
|
+
Write-Host " status 서버 상태 조회"
|
|
134
|
+
Write-Host ""
|
|
135
|
+
Write-Host "예제:"
|
|
136
|
+
Write-Host " .\run.ps1 dev"
|
|
137
|
+
Write-Host " .\run.ps1 start"
|
|
138
|
+
Write-Host " .\run.ps1 stop"
|
|
139
|
+
Write-Host " .\run.ps1 status"
|
|
140
|
+
}
|
|
141
|
+
exit 0
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if (-not (Test-Path $ServerConfig)) {
|
|
145
|
+
if ($Language -eq "en") { Write-Host "X configs/server.json not found" }
|
|
146
|
+
else { Write-Host "X configs/server.json 파일이 없습니다" }
|
|
147
|
+
exit 1
|
|
148
|
+
}
|
|
149
|
+
if (-not (Test-Path $DatabaseConfig)) {
|
|
150
|
+
if ($Language -eq "en") { Write-Host "X configs/database.json not found" }
|
|
151
|
+
else { Write-Host "X configs/database.json 파일이 없습니다" }
|
|
152
|
+
exit 1
|
|
153
|
+
}
|
|
154
|
+
$ServerBin = Join-Path $ProjectRoot "bin\entity-server.exe"
|
|
155
|
+
if (-not (Test-Path $ServerBin)) {
|
|
156
|
+
$LegacyBin = Join-Path $ProjectRoot "entity-server.exe"
|
|
157
|
+
if (Test-Path $LegacyBin) {
|
|
158
|
+
$ServerBin = $LegacyBin
|
|
159
|
+
} else {
|
|
160
|
+
if ($Language -eq "en") { Write-Host "X entity-server.exe not found (bin/entity-server.exe or .\entity-server.exe)" }
|
|
161
|
+
else { Write-Host "X entity-server.exe 파일이 없습니다 (bin/entity-server.exe 또는 .\entity-server.exe)" }
|
|
162
|
+
exit 1
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
function Update-JsonField {
|
|
167
|
+
param([string]$File, [string]$Key, [string]$Value)
|
|
168
|
+
$content = Get-Content $File -Raw
|
|
169
|
+
$content = $content -replace "(`"$Key`"\s*:\s*`")[^`"]+(`")", "`${1}$Value`${2}"
|
|
170
|
+
Set-Content $File $content -NoNewline
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
switch ($Mode) {
|
|
174
|
+
{ $_ -in @("dev", "development") } {
|
|
175
|
+
if (Is-Running) {
|
|
176
|
+
$pid = (Get-Content $PidFile).Trim()
|
|
177
|
+
if ($Language -eq "en") { Write-Host "X Server already running (pid: $pid). Stop first: .\run.ps1 stop" }
|
|
178
|
+
else { Write-Host "X 이미 서버가 실행 중입니다 (pid: $pid). 먼저 중지하세요: .\run.ps1 stop" }
|
|
179
|
+
exit 1
|
|
180
|
+
}
|
|
181
|
+
$dbContent = Get-Content $DatabaseConfig -Raw
|
|
182
|
+
if ($dbContent -notmatch '"development"\s*:') {
|
|
183
|
+
if ($Language -eq "en") { Write-Host "X database group 'development' not found in configs/database.json" }
|
|
184
|
+
else { Write-Host "X configs/database.json에 'development' 그룹이 없습니다" }
|
|
185
|
+
exit 1
|
|
186
|
+
}
|
|
187
|
+
Update-JsonField $ServerConfig "environment" "development"
|
|
188
|
+
Update-JsonField $DatabaseConfig "default" "development"
|
|
189
|
+
& $ServerBin
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
"start" {
|
|
193
|
+
if (Is-Running) {
|
|
194
|
+
$pid = (Get-Content $PidFile).Trim()
|
|
195
|
+
if ($Language -eq "en") { Write-Host "X Server already running (pid: $pid). Stop first: .\run.ps1 stop" }
|
|
196
|
+
else { Write-Host "X 이미 서버가 실행 중입니다 (pid: $pid). 먼저 중지하세요: .\run.ps1 stop" }
|
|
197
|
+
exit 1
|
|
198
|
+
}
|
|
199
|
+
$dbContent = Get-Content $DatabaseConfig -Raw
|
|
200
|
+
if ($dbContent -notmatch '"production"\s*:') {
|
|
201
|
+
if ($Language -eq "en") { Write-Host "X database group 'production' not found in configs/database.json" }
|
|
202
|
+
else { Write-Host "X configs/database.json에 'production' 그룹이 없습니다" }
|
|
203
|
+
exit 1
|
|
204
|
+
}
|
|
205
|
+
Update-JsonField $ServerConfig "environment" "production"
|
|
206
|
+
Update-JsonField $DatabaseConfig "default" "production"
|
|
207
|
+
& $ServerBin banner
|
|
208
|
+
$proc = Start-Process -FilePath $ServerBin -RedirectStandardOutput $StdoutLog -RedirectStandardError $StdoutLog -WindowStyle Hidden -PassThru
|
|
209
|
+
$proc.Id | Set-Content $PidFile
|
|
210
|
+
Start-Sleep -Milliseconds 300
|
|
211
|
+
try {
|
|
212
|
+
$check = Get-Process -Id $proc.Id -ErrorAction Stop
|
|
213
|
+
if ($Language -eq "en") {
|
|
214
|
+
Write-Host "OK Entity Server started in background (pid: $($proc.Id))"
|
|
215
|
+
Write-Host "Status: .\run.ps1 status"
|
|
216
|
+
} else {
|
|
217
|
+
Write-Host "OK Entity Server가 백그라운드에서 시작되었습니다 (pid: $($proc.Id))"
|
|
218
|
+
Write-Host "상태: .\run.ps1 status"
|
|
219
|
+
Write-Host "중지: .\run.ps1 stop"
|
|
220
|
+
}
|
|
221
|
+
} catch {
|
|
222
|
+
Remove-Item $PidFile -Force
|
|
223
|
+
if ($Language -eq "en") {
|
|
224
|
+
Write-Host "X Failed to start Entity Server in background"
|
|
225
|
+
Write-Host "Check logs: $StdoutLog"
|
|
226
|
+
} else {
|
|
227
|
+
Write-Host "X Entity Server 백그라운드 시작에 실패했습니다"
|
|
228
|
+
Write-Host "로그 확인: $StdoutLog"
|
|
229
|
+
}
|
|
230
|
+
exit 1
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
"stop" { Stop-Server }
|
|
235
|
+
|
|
236
|
+
"status" { Show-Status }
|
|
237
|
+
|
|
238
|
+
default {
|
|
239
|
+
if ($Language -eq "en") {
|
|
240
|
+
Write-Host "X Unknown mode: $Mode"
|
|
241
|
+
Write-Host "Run '.\run.ps1' for usage information"
|
|
242
|
+
} else {
|
|
243
|
+
Write-Host "X 알 수 없는 모드: $Mode"
|
|
244
|
+
Write-Host "'.\run.ps1'로 사용법을 확인하세요"
|
|
245
|
+
}
|
|
246
|
+
exit 1
|
|
247
|
+
}
|
|
248
|
+
}
|