본문으로 건너뛰기

배포 및 구성

이전 기사에서는 Logto를 빠르게 시작하는 방법의 기본 사항을 다루었습니다. 이 기사는 Logto를 프로덕션 환경에 배포하기 위한 모범 사례와 자세한 구성 단계를 중점적으로 다룹니다.

환경 변수​

우리는 데모 (docker-compose.yml)에서 생성된 환경 변수 프리셋을 사용합니다. 이를 자신의 것으로 교체하고 여러 Logto 인스턴스 간에 일관성을 유지해야 합니다.

환경 변수를 직접 설정하거나 Logto 프로젝트 루트에 .env 파일을 넣을 수 있습니다. Docker로 테스트 중이라면, /etc/logto에 생성된 이미지의 .env를 확인하세요.

필수 요소​

  • DB_URL Logto 데이터베이스를 위한 Postgres DSN.
  • PORT Logto가 수신하는 포트. 기본값 3001.
  • ENDPOINT 프로덕션을 위해 사용자 지정 도메인으로 URL을 지정할 수 있습니다 (예: ENDPOINT=https://logto.domain.com). 이는 OIDC 발급자 식별자의 값에도 영향을 미칩니다.

관리 콘솔 활성화

  • ADMIN_PORT Logto 관리 콘솔이 수신하는 포트. 기본값 3002.
  • ADMIN_ENDPOINT 프로덕션을 위해 사용자 지정 도메인으로 URL을 지정할 수 있습니다 (예: ADMIN_ENDPOINT=https://admin.domain.com). 이는 관리 콘솔 리디렉션 URI의 값에도 영향을 미칩니다.

관리 콘솔 비활성화

  • ADMIN_DISABLE_LOCALHOST 관리 콘솔의 포트를 닫으려면 1 또는 true로 설정하세요. ADMIN_ENDPOINT가 설정되지 않은 경우, 관리 콘솔을 완전히 비활성화합니다.

환경 변수에 대한 자세한 내용은 구성을 참조하세요.

HTTPS​

Node.js를 사용하여 HTTPS를 직접 제공하거나 Node.js 앞에 HTTPS 프록시 / 밸런서를 설정할 수 있습니다. 자세한 내용은 HTTPS 활성화를 참조하세요.

리버스 프록시​

서버에서 Nginx 또는 Apache와 같은 리버스 프록시를 사용하려면, 프록시 패스 설정에서 3001 및 3002 포트를 별도로 매핑해야 합니다. Nginx를 사용한다고 가정하고, Logto 인증 엔드포인트가 포트 3001에서 실행 중이며, Logto 관리 콘솔이 포트 3002에서 실행 중이라면, nginx.conf에 다음 구성을 추가하세요:

server {
listen 443 ssl;
server_name <your_endpoint_url>; // 예: auth.your-domain.com
...

location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;

proxy_pass http://127.0.0.1:3001;
}

ssl_certificate <path-to-your-certificate-for-auth-endpoint>;
ssl_certificate_key <path-to-your-certificate-key-for-auth-endpoint>
...
}

그런 다음 관리 콘솔에 대한 유사한 구성을 추가하세요:

server {
listen 443 ssl;
server_name <your_admin_endpoint_url>; // 예: admin.your-domain.com
...

location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;

proxy_pass http://127.0.0.1:3002;
}

ssl_certificate <path-to-your-certificate-for-admin-endpoint>;
ssl_certificate_key <path-to-your-certificate-key-for-admin-endpoint>
...
}

최신 변경 사항을 반영하기 위해 Nginx 구성을 다시 로드하세요:

nginx -s reload

모든 설정이 완료되었습니다. 브라우저를 열고 https://admin.your-domain.com을 방문하면 Logto 환영 페이지를 볼 수 있습니다.

컨테이너화​

프로덕션을 위해 Docker를 사용하여 Logto를 컨테이너화할 수 있습니다. 프로젝트의 루트 디렉토리에서 Dockerfile을 찾을 수 있습니다. Logto의 여러 인스턴스를 실행하려면, 예를 들어 Kubernetes 클러스터에 Logto를 배포하려면 추가적인 단계가 필요합니다.

공유 커넥터 폴더​

기본적으로 Logto는 core 폴더의 루트 디렉토리에 connectors 폴더를 생성합니다. 여러 Logto 인스턴스 간에 폴더를 공유하는 것을 권장합니다. packages/core/connectors 폴더를 컨테이너에 마운트하고 npm run cli connector add -- --official을 실행하여 커넥터를 배포해야 합니다.

Kubernetes에 대한 최소 예제 배포가 있습니다:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: logto
namespace: default
spec:
template:
spec:
volumes:
- name: connectors
emptyDir: {}
initContainers:
- image: ghcr.io/logto-io/logto
command:
- /bin/sh
args:
- '-c'
- 'npm run cli connector add -- --official'
name: init
volumeMounts:
- name: connectors
mountPath: /etc/logto/packages/core/connectors
containers:
- image: ghcr.io/logto-io/logto
name: logto
volumeMounts:
- name: connectors
mountPath: /etc/logto/packages/core/connectors

이 예제에서는 빈 디렉토리를 볼륨으로 생성하고 이를 컨테이너에 마운트합니다. 그런 다음 초기 컨테이너에서 npm run cli connector add -- --official을 실행하여 커넥터를 다운로드합니다. 마지막으로, 모든 컨테이너는 이미 내부에 있는 공식 커넥터와 함께 동일한 커넥터 폴더를 공유하게 됩니다.

노트:

이것은 예제 yaml입니다. Logto를 실행하려면 환경 변수를 적절히 설정해야 합니다.

프로덕션에서는 "빈 디렉토리" 볼륨을 영구 볼륨으로 교체하고, "초기" 작업을 자신의 방식으로 수행할 수 있습니다. 당신이 무엇을 하고 있는지 알고 있다면!

데이터베이스 변경​

커넥터와 유사하게, 데이터베이스 변경은 단일 인스턴스에서 실행해야 합니다. 작업을 사용하여 변경 스크립트를 실행할 수 있습니다.

비상호작용으로 변경이 실행될 때 CI=true 환경 변수가 필요합니다.

apiVersion: batch/v1
kind: Job
metadata:
name: alteration
spec:
template:
spec:
containers:
- name: alteration
image: ghcr.io/logto-io/logto
imagePullPolicy: Always
env:
- name: CI
value: 'true'
- name: DB_URL
value: postgresql://user:password@localhost:5432/logto
command:
- /bin/sh
args:
- '-c'
- 'npm run alteration deploy latest'
restartPolicy: Never

변경 명령에 대한 자세한 내용은 데이터베이스 변경을 참조하세요.