콘텐츠로 이동

셀프 호스팅 Chorus 운영하기

이 가이드는 배포를 마친 셀프 호스팅 Chorus의 운영을 다룹니다. 첫 사용자 로그인, 인증 구성, 안전한 업그레이드, 그리고 HTTPS 환경에서 중요한 쿠키와 리버스 프록시 설정을 설명합니다. 배포를 구축하는 방법은 프로덕션 배포 또는 Docker로 배포를 참고하세요.

새 배포에는 아직 계정이 없습니다. DEFAULT_USER와 DEFAULT_PASSWORD를 설정해 싱글 사인온을 우회하는 내장 이메일/비밀번호 로그인을 활성화합니다.

Terminal window
DEFAULT_USER='admin@example.com' \
DEFAULT_PASSWORD='choose-a-strong-password'

두 변수가 모두 설정되면 로그인 페이지에 이메일/비밀번호 폼이 나타납니다. 첫 로그인에 성공하면 Chorus가 그 이메일로 사용자와 해당 워크스페이스를 자동으로 생성하므로, 로그인하기 위해 따로 설정할 것이 없습니다.

내장 로그인은 부트스트랩 메커니즘이지 영구적인 계정 시스템이 아닙니다. 실제 계정이 생기면(또는 싱글 사인온을 구성하면) DEFAULT_USER와 DEFAULT_PASSWORD를 모두 해제하고 Chorus를 재시작해 내장 로그인을 끄세요. 두 변수를 제거하면 내장 이메일/비밀번호 폼이 더 이상 나타나지 않고, 대신 구성한 ID 제공자를 통해 로그인합니다.

배포 수준에서 구성되는 인증에는 두 종류가 있습니다.

/admin 슈퍼 관리자 패널은 데이터베이스 계정이 아니라 환경 변수에서 부트스트랩됩니다.

변수설명
SUPER_ADMIN_EMAIL/admin 패널에 접근할 수 있는 슈퍼 관리자 계정의 이메일.
SUPER_ADMIN_PASSWORD_HASH슈퍼 관리자 비밀번호의 bcrypt 해시(평문이 아님).

해시를 생성해 SUPER_ADMIN_PASSWORD_HASH로 전달합니다.

Terminal window
node -e "console.log(require('bcryptjs').hashSync('your-password', 10))"

싱글 사인온은 환경 변수로 구성하지 않습니다. 슈퍼 관리자가 /admin 패널에서 워크스페이스별로 OIDC를 구성하며, 그 설정은 데이터베이스에 저장됩니다. 각 워크스페이스는 자체 발급자(issuer) URL과 클라이언트 ID를 가지며, 둘 다 설정하면 그 워크스페이스에서 SSO가 켜집니다. Chorus는 PKCE를 사용하며 클라이언트 시크릿(client secret)을 요구하지 않습니다. 배포 수준의 부트스트랩은 슈퍼 관리자가 로그인할 수 있게 하는 역할만 하며, 이후 슈퍼 관리자가 관리 패널에서 워크스페이스별로 SSO를 구성합니다. 배포 계층에서 시크릿을 따로 준비할 필요는 없습니다.

마이그레이션 실행과 안전한 업그레이드

섹션 제목: “마이그레이션 실행과 안전한 업그레이드”

Chorus는 시작 시 보류 중인 데이터베이스 마이그레이션을 자동으로 적용합니다(prisma migrate deploy). 마이그레이션을 직접 실행할 필요가 없습니다. 새 버전을 시작하면 웹 애플리케이션이 요청을 처리하기 전에 아직 적용되지 않은 마이그레이션이 모두 적용됩니다.

업그레이드하려면:

  1. 먼저 데이터베이스를 백업하세요. 외부 PostgreSQL이면 데이터베이스 백업을 만들고, 내장 또는 볼륨 기반 데이터베이스면 데이터 볼륨을 백업합니다.
  2. 새 버전을 가져옵니다. npm 패키지는 npm update -g @chorus-aidlc/chorus, Docker 배포는 새 컨테이너 이미지를 가져옵니다(pull).
  3. Chorus를 재시작합니다. 마이그레이션은 부팅 시 자동으로 적용되고, 그런 다음 앱이 시작됩니다.

0.19.1에는 nullable 컬럼 하나만 추가하는 마이그레이션이 포함되어 있으므로 기존 데이터는 변경되지 않습니다. 에이전트 데몬을 실행하는 chorus CLI를 업그레이드하기 전에 Chorus 서버를 먼저 업그레이드하세요. 이전 버전의 데몬도 새 서버에서 계속 동작하며, 아이디어 생성 요청과 리서치 요청을 기존에 처리할 수 있는 형식으로 받습니다. 새 요청 형식을 긴급히 되돌려야 한다면 CHORUS_DEDICATED_OPERATION_WRITES=false를 설정하고 서버를 재시작하세요. 새 요청은 이전 형식을 사용하고, 이미 대기열에 있는 요청도 그대로 전달됩니다. CLI는 필요하면 따로 롤백하세요. 0.19.1이 만든 요청이 아직 대기 중이거나 실행 중인 동안에는 서버를 0.19.1보다 오래된 버전으로 롤백하지 말고, 새 컬럼도 제거하지 마세요.

0.18.1 업그레이드 시 세션 비밀 키

섹션 제목: “0.18.1 업그레이드 시 세션 비밀 키”

데이터베이스와 함께 서명 비밀 키도 백업하고, 키를 바꾸지 말고 유지하세요. 자동 생성된 키를 유지하려면 외부 PostgreSQL을 사용하더라도 Docker에 영구적인 /app/data 볼륨이 필요합니다. npm 런처는 기본적으로 ~/.chorus-data/.secret을 사용합니다. 이전에 공개 자리 표시자를 사용했다면 키가 새 값으로 바뀌므로 내장 이메일/비밀번호 로그인 사용자와 슈퍼 관리자가 다시 로그인해야 합니다. 명시적으로 설정한 안전한 키는 그대로 유지됩니다. CDK 재배포에서는 같은 nextAuthSecret을 지정하세요. 생략하면 synth마다 새 값이 생성됩니다. API 키와 OIDC 토큰은 이 교체의 영향을 받지 않습니다. Docker 배포 가이드의 세션 비밀 키를 참고하세요.

Chorus가 TLS 종료나 리버스 프록시 뒤에서 실행될 때 중요한 설정이 두 가지 있습니다.

변수설정 값경우
COOKIE_SECUREtrue사이트가 HTTPS로 제공됩니다(TLS를 종료하는 프록시 뒤 포함). 보안 쿠키는 암호화된 연결에서만 전송됩니다.
COOKIE_SECUREfalse신뢰할 수 있는 내부 HTTP 전용 네트워크에서만 사용합니다. 이 경우 쿠키가 암호화되지 않은 HTTP로 전송되므로, 공용 인터넷에서는 절대 사용하지 마세요.
NEXTAUTH_URL외부 공개 기본 URLChorus가 리버스 프록시 뒤에서 실행됩니다. 리디렉션과 링크가 올바르게 해석되도록 외부에서 보이는 주소(예: https://chorus.example.com)로 설정합니다.