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

7.9 KiB
Raw Blame History

설정

설정값의 기본값은 config.js에 있습니다. 이 파일은 직접 고치지 말고 아래 방법을 쓰세요. 우선순위: 환경변수 > config.<NODE_ENV>.js > config.js

환경변수 (도커에서는 이 방법)

모든 설정은 PSITRANSFER_ 접두사와 대문자 스네이크 표기로 바꿀 수 있습니다. (defaultRetention → PSITRANSFER_DEFAULT_RETENTION)

export PSITRANSFER_PORT=8080
export PSITRANSFER_RETENTIONS='{"one-time":"1회 다운로드","86400":"1일"}'
export PSITRANSFER_QUICK_RETENTIONS=one-time,86400
node app.js

값의 형식은 기본값의 형식을 따릅니다. 숫자는 정수로, 목록(quickRetentions)은 쉼표로 구분하고, retentions는 JSON으로 적고, requireBucketPassword와 disableQrCode는 true/false로 적습니다.

설정 파일

config.<NODE_ENV>.js가 있으면 config.js 위에 덮어씁니다. NODE_ENV=dev node app.js는 config.dev.js를 사용합니다. 직접 만든 이름(config.custom.js)도 NODE_ENV=custom node app.js로 쓸 수 있습니다.

설정 목록

서버와 경로

설정 기본값 설명
uploadDir ./data 파일과 관리자 설정을 저장하는 폴더. 도커에서는 /data
settingsDir <uploadDir>/.settings 관리자 설정(이름, 로고)을 저장하는 폴더
baseUrl / 하위 경로로 서비스할 때 (/sharing)
uploadAppPath / 업로드 화면의 주소 (baseUrl 아래)
iface, port 0.0.0.0, 3000 수신 주소와 HTTP 포트 (port를 false로 두면 HTTP 끔)
sslPort, sslKeyFile, sslCertFile 직접 HTTPS를 쓸 때. 세 값을 모두 지정해야 켜집니다
forceHttps HTTPS로 강제 이동. true 또는 이동할 주소
trustProxy 리버스 프록시 뒤에서 실제 IP를 로그에 남길 때 (Express 문서)
accessLog :date[iso] ... morgan 형식. false면 로그 끔

업로드와 보관

설정 기본값 설명
retentions 1회, 1시간 ~ 8주 선택할 수 있는 보관 기간. 초: 이름 (one-time은 1회 다운로드). 화면에 보이는 이름은 언어 파일의 retentions가 우선합니다
quickRetentions one-time,86400,259200,432000,604800 버튼으로 보이는 보관 기간. 나머지는 "그 외" 목록에 들어갑니다
defaultRetention 604800 처음 선택돼 있는 보관 기간
requireBucketPassword true 업로드에 비밀번호를 필수로 합니다. 1회 다운로드는 예외입니다. 서버에서도 검사합니다
maxAge 75일 어떤 파일도 이 시간(초)이 지나면 삭제됩니다. 다운로드되지 않은 1회 다운로드 파일에도 적용됩니다
maxFileSize, maxBucketSize 제한 없음 파일 하나, 한 번에 올리는 전체의 최대 크기(바이트)
maxPreviewSize 2MB 텍스트 미리보기에서 읽는 최대 크기
mailTemplate mailto:?subject=... 이메일 버튼의 mailto: 주소. %%URL%%이 다운로드 링크로 바뀝니다
disableQrCode false QR 코드 버튼 숨기기
defaultLanguage ko 브라우저 언어를 알 수 없을 때 쓰는 언어

로그인과 관리자

설정 기본값 설명
uploadPass 없음 업로드 비밀번호. 없으면 누구나 올릴 수 있습니다
adminPass 없음 관리자 비밀번호. 없으면 /admin 페이지가 없습니다
tokenTtl 7일 로그인 유지 시간(초). 사용할 때마다 새로 7일이 됩니다
tokenSecret 로그인 토큰의 서명 키. 비워 두면 두 비밀번호에서 만들어집니다

이름과 로고 (기본값)

설정 기본값 설명
appName Dodo Transfer 서비스 이름
appOwner 아진산업(주) 전장선행개발팀 하단 저작권 표기의 소유자
appFromYear 2026 하단 저작권 표기의 시작 연도 (현재 연도가 더 크면 2026–2027처럼 표시)

이 값들은 기본값입니다. 관리자 페이지의 설정 탭에서 바꾼 값이 있으면 그것이 우선합니다.

로그인 방식

업로드 비밀번호를 설정하면 처음 접속할 때 로그인 화면이 나옵니다.

  • 로그인하면 서버가 서명된 토큰을 발급하고, 브라우저가 이를 보관합니다. 비밀번호 자체는 저장하지 않습니다.
  • 토큰은 페이지에 접속할 때마다 갱신되어 7일(tokenTtl) 동안 유지됩니다.
  • 서버에는 로그인 상태가 저장되지 않습니다. 그래서 컨테이너를 다시 시작하거나 다시 만들어도 로그인이 유지됩니다.
  • uploadPass나 adminPass를 바꾸면 이전에 발급된 토큰이 모두 무효가 됩니다. 비밀번호를 바꿔도 로그인을 유지하려면 tokenSecret을 지정하세요.
  • 스크립트(curl)를 위해 x-passwd: <업로드 비밀번호> 헤더도 계속 받습니다.

비밀번호 규칙

  • 보관 기간이 1회 다운로드가 아니면 비밀번호가 필수입니다 (requireBucketPassword).
  • 업로드할 때 "인증된 사용자는 비밀번호 없이 다운로드" 를 켜 두면(기본), 업로드 로그인 상태인 브라우저는 다운로드 링크를 열 때 비밀번호를 묻지 않습니다. 로그인하지 않은 사람(외부 수신자)은 비밀번호를 입력해야 합니다. 업로드 비밀번호가 없는 환경에서는 이 선택지가 나타나지 않습니다.

관리자 페이지

adminPass를 설정하면 <BASE_URL>/admin에서 다음을 할 수 있습니다.

  • 파일 관리: 올라온 파일 조회, 검색, 정렬, 미리보기, 다운로드(파일, zip, tar.gz), 삭제(파일, bucket 단위). 관리자 다운로드는 1회 다운로드 파일을 소모하지 않고 다운로드 횟수에도 집계되지 않습니다. 파일을 삭제하면 받는 사람 화면에서도 바로 사라집니다.
  • 설정: 서비스 이름, 로고(PNG, SVG, WebP, 1MB 이하), 하단 저작권 표기. 저장하면 모든 화면에 바로 적용됩니다.

설정은 settingsDir(기본 /data/.settings)에 저장됩니다. 로고를 처음 상태로 되돌리려면 설정 탭의 "기본 로고로 되돌리기"를 누르세요. 아진산업 로고 파일은 docs/brand/ajin-logo.png에 있습니다.

SSL

nginx에서 SSL을 처리하는 것을 권장합니다. nginx-ssl-example.conf를 참고하세요. 직접 처리하려면 sslPort, sslKeyFile, sslCertFile을 모두 지정합니다. 테스트용 인증서는 openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout cert.key -out cert.pem으로 만듭니다.

웹훅

다른 시스템과 연동하려면 이벤트가 생길 때 POST 요청을 받을 주소를 지정합니다.

fileUploadedWebhook

파일 하나의 업로드가 끝날 때마다 호출됩니다. 비밀번호는 보내지 않고 _password: true로 표시합니다.

{
  "metadata": {
    "sid": "6055ab792b6c",
    "retention": "3600",
    "_password": true,
    "name": "test.png",
    "comment": "파일 코멘트",
    "type": "image/png",
    "key": "135a3814-df46-4e23-b061-03bdda13425c",
    "createdAt": "1589276618052"
  },
  "date": 1589276619385
}

여러 파일을 한 번에 올리면 파일마다 호출됩니다 (sid는 같고 key가 다릅니다). 파일 주소는 https://<호스트>/<BASE_URL>files/<sid>++<key>입니다.

fileDownloadedWebhook

받는 사람이 파일(또는 전체 받기)을 다운로드할 때 호출됩니다. 미리보기와 관리자 다운로드는 호출하지 않습니다.

{
  "fid": "6055ab792b6c",
  "file": "test.png",
  "date": 1589276619415
}