Skip to main content
이 프로젝트는 Next.js 15(App Router), React 19, Tailwind CSS를 기반으로 하며 TypeScript로 작성되었습니다. 개발을 시작하기 전에 빠른 시작에 따라 로컬 구성을 마치세요.

자주 쓰는 명령

변경 사항을 커밋하기 전에 테스트, 코드 검사, 타입 검사, 프로덕션 빌드를 차례로 실행하는 것을 권장합니다.

테스트

npm test는 tests/api.test.ts와 tests/i18n.test.ts를 실행합니다. api.test.ts가 나머지 테스트 파일을 가져오므로 명령 하나로 모든 테스트를 실행할 수 있습니다. 디버깅할 때는 tsx로 특정 파일만 실행할 수도 있습니다.

프로젝트 구조

화면 문구 추가

문구는 app/i18n/messages.ts에 정의되어 있습니다. 간체 중국어 원문이 키이고, 나머지 세 언어가 값입니다.
app/i18n/messages.ts
컴포넌트에서는 t("历史记录")로 사용합니다. 문구를 새로 추가할 때는 zh-TW, en, ko 세 가지 번역을 모두 제공하세요. i18n.test.ts가 완전성을 검사합니다.

지속적 통합

.github/workflows/docker.yml은 모든 브랜치에 푸시할 때, v* 태그를 푸시할 때, Pull Request를 제출할 때, 수동으로 실행할 때 동작합니다.
1

검증

Node.js 22로 npm ci, npm test, npm run lint, npm run build를 차례로 실행합니다.
2

이미지 빌드

검증을 통과하면 Docker 이미지를 빌드합니다. 일반 브랜치와 Pull Request에서는 이미지가 빌드되는지 확인하기 위해 linux/amd64만 빌드합니다.
3

이미지 게시

기본 브랜치, howendev/dev 브랜치 또는 임의의 태그에 푸시하면 linux/amd64와 linux/arm64를 함께 빌드하고, Docker Hub secrets가 설정되어 있으면 멀티 아키텍처 이미지를 푸시합니다.

이미지 태그

Docker Hub secrets

GitHub 저장소에서 Settings → Secrets and variables → Actions를 열고 다음을 추가하세요. 두 secrets를 설정하지 않으면 워크플로는 이미지를 빌드만 하고 푸시하지 않으며 경고를 하나 출력합니다.
런타임 비밀 값을 Docker 이미지에 넣지 마세요. DEEPSEEK_API_KEY, GEMINI_API_KEY, CODE, Umami 구성은 컨테이너를 실행할 때 .env.production이나 -e 매개변수로 주입해야 합니다.

Docker 이미지

Dockerfile은 node:22-alpine 기반 멀티 스테이지 빌드이며 Next.js standalone 출력을 사용합니다.
  • 실행 단계에서는 root가 아닌 사용자 nextjs로 실행합니다.
  • 기본적으로 0.0.0.0:3002에서 수신합니다.
  • 이미지에는 LICENSE, NOTICE, LICENSING.md, LICENSES/ 라이선스 파일이 포함됩니다.

기여

Issue와 Pull Request를 환영합니다. 새 기여에는 AGPL-3.0-only와 호환되는 라이선스를 사용하고, 가져온 서드 파티 코드의 고지를 유지하세요. 자세한 내용은 라이선스를 참고하세요.