config: 사이트 도메인·서버 설정을 .env 로 중앙화 + 설치기 자동 종료 복구

- dotenv 도입, src/shared/env.ts 추가
  - loadEnv() 가 프로젝트 루트 .env 를 로드 (override=false: 쉘 env 우선)
  - getSiteBaseUrl() / getManifestUrl() 헬퍼
- 서버/설치기/리소스팩설치기 진입점에서 loadEnv() 호출
- 설치기 두 종의 기본 MANIFEST_URL 을 SITE_BASE_URL 기반으로 변경
  (운영 도메인을 한 곳에서만 바꾸면 됨)
- .env.example 템플릿 + .gitignore 에 .env 추가
- README / docs/admin-site.md 에 환경변수 표·사용법 추가
- installer/renderer.js: 4단계 완료 후 자동 종료 다시 활성화
This commit is contained in:
2026-05-13 02:55:58 +09:00
parent 894a86a117
commit 69ed4ad744
11 changed files with 117 additions and 10 deletions

33
src/shared/env.ts Normal file
View File

@@ -0,0 +1,33 @@
import path from 'node:path'
import fs from 'node:fs'
import dotenv from 'dotenv'
import { projectRoot } from './paths.js'
/**
* 프로젝트 루트의 `.env` 를 읽어 `process.env` 에 주입.
*
* - 이미 설정된 환경변수는 덮어쓰지 않음(쉘에서 넘긴 값이 우선).
* - 파일이 없으면 조용히 통과 — 운영 환경에서는 시스템 env 만으로도 동작해야 함.
* - 서버/설치기/리소스팩설치기 진입점에서 한 번씩 호출.
*/
export function loadEnv(): void {
const envPath = path.join(projectRoot, '.env')
if (!fs.existsSync(envPath)) return
dotenv.config({ path: envPath, override: false, quiet: true })
}
/**
* 사이트 베이스 URL. 관리 사이트가 호스팅되는 외부 주소(설치기가 manifest 를
* 받아가는 도메인). 기본값은 로컬 개발용 `http://127.0.0.1:3000`.
*/
export function getSiteBaseUrl(): string {
const raw = (process.env.SITE_BASE_URL ?? 'http://127.0.0.1:3000').trim()
return raw.replace(/\/+$/, '')
}
/** 사이트 베이스 URL + `/manifest.json`. `MANIFEST_URL` 가 따로 지정되면 그 값을 우선. */
export function getManifestUrl(): string {
const explicit = process.env.MANIFEST_URL?.trim()
if (explicit) return explicit
return `${getSiteBaseUrl()}/manifest.json`
}