feat: install.sh 원클릭 설치 스크립트 + Dockerfile 추가 (main.cjs 실제 파일 포함)
- Dockerfile: triliumnext/notes:latest에 번역+패치된 main.cjs를 구워 넣어 별도 bind-mount 없이 한국어 내장 이미지를 만듦 - install.sh: curl | bash 한 줄로 clone + build + up까지 처리 - 기존 bind-mount 방식은 docker-compose.bind-mount.yml.example로 유지 - 실제 빌드/실행/언어전환/컨테이너완전재생성까지 전부 테스트 완료
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
FROM triliumnext/notes:latest
|
||||
|
||||
COPY main.cjs /usr/src/app/main.cjs
|
||||
COPY translation.json /usr/src/app/public/translations/ko/translation.json
|
||||
COPY server.json /usr/src/app/assets/translations/ko/server.json
|
||||
@@ -9,35 +9,62 @@
|
||||
|
||||
## 포함된 파일
|
||||
|
||||
- `install.sh` — **원클릭 설치 스크립트**. 명령어 한 줄로 저장소를 내려받고, 한국어가
|
||||
내장된 이미지를 빌드해서 바로 실행시킵니다.
|
||||
- `Dockerfile` — `triliumnext/notes:latest` 위에 번역 파일과 패치된 `main.cjs`를
|
||||
구워 넣어서, 별도 bind-mount 없이 한국어가 기본 내장된 이미지를 만듭니다.
|
||||
- `docker-compose.yml` — 위 `Dockerfile`로 빌드해서 바로 띄우는 compose 파일
|
||||
(`install.sh`가 내부적으로 이걸 사용합니다).
|
||||
- `translation.json` — 클라이언트(브라우저) UI 문자열, 1,712개 키, 100% 번역 완료.
|
||||
- `server.json` — 서버 문자열, 283개 키, 100% 번역 완료.
|
||||
- `main.cjs` — **이미 패치가 적용된, 바로 쓸 수 있는 서버 번들** (`triliumnext/notes:latest`,
|
||||
빌드일 2025-06-07, appVersion 0.95.0 기준). 아래 설치 방법 2번을 직접 실행할 필요 없이
|
||||
이 파일로 바로 bind-mount 하면 됩니다.
|
||||
빌드일 2025-06-07, appVersion 0.95.0 기준).
|
||||
- `patch_main_cjs.js` — 위 `main.cjs`를 만들어낸 패치 스크립트. 다른 버전의 이미지를 쓰거나
|
||||
이미지가 업데이트된 경우, 이 스크립트를 새 원본 `main.cjs`에 다시 돌려서 직접 패치된
|
||||
파일을 만들어야 합니다 (왜 이게 필요한지는 스크립트 상단 주석 참고).
|
||||
- `docker-compose.yml.example` — 아래 설치 방법을 그대로 반영한 예시 compose 파일.
|
||||
- `docker-compose.bind-mount.yml.example` — 이미 떠 있는 공식 이미지 컨테이너에 파일만
|
||||
bind-mount로 추가하고 싶을 때 쓰는 예시 (이미지를 새로 빌드하지 않는 방식).
|
||||
|
||||
`triliumnext/notes:latest` (빌드일 2025-06-07, appVersion 0.95.0) 기준으로 테스트했습니다.
|
||||
`main.cjs` 안의 변수명은 전부 난독화(minify)되어 있고 **빌드마다 이름이 바뀔 수 있습니다** —
|
||||
`patch_main_cjs.js`를 새 이미지에 돌렸을 때 `[skip]`이 출력되면, 스크립트가 찾는 문자열
|
||||
패턴이 그 빌드에서 바뀐 것이니 새 빌드에서 같은 패턴을 다시 찾아 스크립트를 갱신해야 합니다.
|
||||
|
||||
## 설치 방법 (빠른 길 — 이미지 버전이 같다면)
|
||||
## 설치 방법 — 명령어 한 줄 (추천)
|
||||
|
||||
이 저장소의 `main.cjs`는 이미 패치가 끝난 파일입니다. `triliumnext/notes:latest`
|
||||
(appVersion 0.95.0, 빌드일 2025-06-07)를 그대로 쓴다면 아래 1, 3번만 하면 됩니다.
|
||||
Docker와 Docker Compose 플러그인만 설치되어 있으면 됩니다:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://gitea.itosm.co.kr/syskiller/triliumnext-korean-patch/raw/branch/main/install.sh | bash
|
||||
```
|
||||
|
||||
기본적으로 `./trilium-korean` 폴더에 저장소를 내려받고, 한국어가 내장된 이미지를 빌드해서
|
||||
`http://localhost:8082`로 띄웁니다. 포트를 바꾸고 싶으면:
|
||||
|
||||
```bash
|
||||
TRILIUM_KO_PORT=9000 curl -fsSL https://gitea.itosm.co.kr/syskiller/triliumnext-korean-patch/raw/branch/main/install.sh | bash
|
||||
```
|
||||
|
||||
설치가 끝나면 브라우저로 접속해서 초기 비밀번호를 설정한 뒤, **옵션 → 언어 및 지역**에서
|
||||
"한국어"를 선택하고 페이지를 새로고침하면 됩니다 (본문 텍스트까지 전부 한국어로 바뀌려면
|
||||
새로고침이 한 번 필요합니다 — 앱 자체의 동작이며 이 패치의 문제는 아닙니다).
|
||||
|
||||
업데이트하려면 같은 명령어를 같은 폴더에서 다시 실행하면 됩니다.
|
||||
|
||||
## 설치 방법 — 이미 떠 있는 컨테이너에 추가하고 싶은 경우
|
||||
|
||||
이미지를 새로 빌드하지 않고, 이미 쓰고 있는 공식 `triliumnext/notes` 컨테이너에 파일만
|
||||
얹고 싶다면:
|
||||
|
||||
1. **번역 파일 + `main.cjs`를 `docker-compose.yml`에 bind-mount로 등록**
|
||||
(`docker cp`로만 넣지 말 것 — 아래 "문제 4" 참고):
|
||||
- `main.cjs` → `/usr/src/app/main.cjs`
|
||||
- `translation.json` → `/usr/src/app/public/translations/ko/translation.json`
|
||||
- `server.json` → `/usr/src/app/assets/translations/ko/server.json`
|
||||
2. `docker-compose.yml.example`을 참고해서 그대로 적용, 컨테이너 시작.
|
||||
3. 앱 안에서 **옵션 → 언어 및 지역**에서 "한국어" 선택.
|
||||
2. `docker-compose.bind-mount.yml.example`을 참고해서 그대로 적용, 컨테이너 재시작.
|
||||
3. 앱 안에서 **옵션 → 언어 및 지역**에서 "한국어" 선택 후 새로고침.
|
||||
|
||||
## 설치 방법 (다른 이미지 버전을 쓰는 경우)
|
||||
## 설치 방법 — 다른 이미지 버전을 쓰는 경우 (직접 패치)
|
||||
|
||||
이미지 버전이 다르면 `main.cjs`의 난독화된 변수명/위치가 달라 이 저장소의 `main.cjs`가
|
||||
그대로 안 맞을 수 있습니다. 이 경우 직접 패치해야 합니다:
|
||||
@@ -54,7 +81,7 @@
|
||||
`[skip]`이 출력되면 스크립트가 찾는 문자열 패턴이 그 빌드에서 바뀐 것이니, 새 빌드에서
|
||||
같은 패턴을 다시 찾아 스크립트를 갱신해야 합니다 (아래 "빌드마다 달라짐" 참고).
|
||||
3. **패치된 `main.cjs`를 `docker-compose.yml`에서 원본 위치에 bind-mount** —
|
||||
`docker-compose.yml.example` 참고:
|
||||
`docker-compose.bind-mount.yml.example` 참고:
|
||||
```yaml
|
||||
services:
|
||||
trilium:
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
services:
|
||||
trilium:
|
||||
image: triliumnext/notes:latest
|
||||
container_name: trilium
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- '127.0.0.1:18082:8080'
|
||||
environment:
|
||||
- TZ=Asia/Seoul
|
||||
volumes:
|
||||
- ./data:/home/node/trilium-data
|
||||
- ./main.cjs:/usr/src/app/main.cjs:ro
|
||||
- ./translation.json:/usr/src/app/public/translations/ko/translation.json:ro
|
||||
- ./server.json:/usr/src/app/assets/translations/ko/server.json:ro
|
||||
@@ -0,0 +1,11 @@
|
||||
services:
|
||||
trilium:
|
||||
build: .
|
||||
container_name: trilium-ko
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- '8082:8080'
|
||||
environment:
|
||||
- TZ=Asia/Seoul
|
||||
volumes:
|
||||
- ./data:/home/node/trilium-data
|
||||
Executable
+46
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env bash
|
||||
# TriliumNext Notes 한국어 패치 — 원클릭 설치 스크립트
|
||||
#
|
||||
# 사용법:
|
||||
# curl -fsSL https://gitea.itosm.co.kr/syskiller/triliumnext-korean-patch/raw/branch/main/install.sh | bash
|
||||
# 또는 저장소를 직접 clone 한 뒤:
|
||||
# ./install.sh [설치 폴더 이름, 기본값: trilium-korean]
|
||||
set -euo pipefail
|
||||
|
||||
REPO_URL="https://gitea.itosm.co.kr/syskiller/triliumnext-korean-patch.git"
|
||||
INSTALL_DIR="${1:-trilium-korean}"
|
||||
PORT="${TRILIUM_KO_PORT:-8082}"
|
||||
|
||||
if ! command -v docker >/dev/null 2>&1; then
|
||||
echo "Docker가 설치되어 있지 않습니다. https://docs.docker.com/get-docker/ 를 먼저 설치하세요." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! docker compose version >/dev/null 2>&1; then
|
||||
echo "Docker Compose 플러그인이 필요합니다 (docker compose, 하이픈 없는 버전)." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -d "$INSTALL_DIR/.git" ]; then
|
||||
echo "이미 설치되어 있습니다. 최신 패치로 업데이트합니다: $INSTALL_DIR"
|
||||
git -C "$INSTALL_DIR" pull --ff-only
|
||||
else
|
||||
echo "저장소를 내려받습니다: $INSTALL_DIR"
|
||||
git clone --depth 1 "$REPO_URL" "$INSTALL_DIR"
|
||||
fi
|
||||
|
||||
cd "$INSTALL_DIR"
|
||||
|
||||
if [ "$PORT" != "8082" ]; then
|
||||
sed -i.bak "s/'8082:8080'/'${PORT}:8080'/" docker-compose.yml
|
||||
fi
|
||||
|
||||
echo "이미지를 빌드하고 컨테이너를 시작합니다 (최초 실행 시 몇 분 걸릴 수 있습니다)..."
|
||||
docker compose up -d --build
|
||||
|
||||
echo
|
||||
echo "설치 완료! http://localhost:${PORT} 로 접속하세요."
|
||||
echo "처음 접속하면 초기 설정(마스터 비밀번호) 화면이 뜹니다."
|
||||
echo "설정이 끝나면 옵션 → 언어 및 지역에서 '한국어'를 선택하세요."
|
||||
echo
|
||||
echo "업데이트하려면 이 스크립트를 같은 폴더 이름으로 다시 실행하면 됩니다: $INSTALL_DIR"
|
||||
Reference in New Issue
Block a user