DodoTransfer/docs/deployment-docker.md
2026-11-05 10:28:10 +09:00

67 lines
2.6 KiB
Markdown

# Docker로 배포하기
도커 사용을 권장합니다. 이미지는 이 저장소의 `Dockerfile`로 빌드하며, 프론트엔드 빌드도 이미지 빌드 안에서
함께 이루어집니다. 서버에 Node.js를 따로 설치할 필요가 없습니다.
## 빠른 시작
```bash
git clone https://git.dodo-lab.kr/blue2rai/DodoTransfer.git
cd DodoTransfer
cp .env.example .env # 두 비밀번호를 정해서 .env에 적습니다
docker compose -f compose.example.yaml up -d --build
```
[compose.example.yaml](../compose.example.yaml)은 이 프로젝트의 운영 예시입니다.
서버 환경에 맞게 복사해서 고쳐 쓰세요. 중요한 부분은 다음과 같습니다.
| 항목 | 설명 |
|---|---|
| `user: "1000:1000"` | 데이터 폴더 소유자의 uid/gid와 같아야 합니다. |
| `ports: "127.0.0.1:3377:3000"` | 외부에 직접 열지 않고 같은 서버의 nginx만 접근하게 합니다. |
| `env_file: .env` | 비밀번호는 compose 파일이 아니라 `.env`에 둡니다 (`.env`는 git에 올라가지 않습니다). |
| `volumes: /data` | 업로드한 파일과 관리자 설정(이름, 로고)이 모두 여기에 저장됩니다. 컨테이너를 다시 만들어도 유지됩니다. |
## 하위 경로(`/sharing`)로 서비스하기
`PSITRANSFER_BASE_URL: "/sharing"`으로 설정하면 모든 주소가 `/sharing/` 아래로 옮겨갑니다.
nginx는 경로를 그대로 넘기면 됩니다 (경로를 잘라내지 않습니다).
```nginx
location /sharing/ {
proxy_pass http://127.0.0.1:3377;
proxy_http_version 1.1;
proxy_buffering off;
proxy_request_buffering off;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 10m; # 파일은 5MB 조각으로 올라갑니다
}
```
## 상태 확인
이미지에는 `HEALTHCHECK`가 들어 있습니다. 로그인이 필요 없는 `<BASE_URL>/healthz`가 `ok`로 답하면
정상입니다.
```bash
docker compose -f compose.example.yaml ps # STATUS가 healthy
curl http://127.0.0.1:3377/sharing/healthz # ok
```
## 업데이트
```bash
git pull
docker compose -f compose.example.yaml up -d --build
```
데이터(`/data`)는 그대로 유지됩니다. 이전 PsiTransfer가 저장한 파일과 비밀번호도 그대로 사용할 수 있습니다.
(이전에 올린 파일에는 썸네일이 없어서 아이콘으로 표시됩니다.)
## 환경변수
모든 설정은 `PSITRANSFER_` 접두사의 환경변수로 바꿀 수 있습니다. 목록은 [configuration.md](configuration.md)를
참고하세요.