> For the complete documentation index, see [llms.txt](https://docs-kr.verifyvasp.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs-kr.verifyvasp.com/getting-started/install-and-run-enclave-server.md).

# Enclave 설치 및 실행

## 시스템 요구 사항

* 시스템/인프라 구성도

![](/files/dna0nnO882LH2caPJr3P)

* Enclave Server
  * CPU : 최소 2, 권장 4G
  * 메모리 : 최소 2G, 권장 4G
  * 스토리지 : 최소 8G, 권장 16G (도커, 컨테이너 포함)

## Enclave 서버 설치

* Enclave docker 이미지 다운로드

  * Enclave docker 이미지는 Private Registry에 있어, 관리자에게 Docker Hub Credential ID를 전달하여 권한을 받을 수 있습니다.
  * **<corporate-kr@verifyvasp.com>**&#xC73C;로 **Docker Hub ID를 전달**하여 주시면 다운로드 권한을 드리겠습니다.
  * 다운로드

  ```bash
  $ docker pull verifyvasp/enclave:v1.5.7
  ```

## Enclave 서버 환경 변수

| 환경 변수 명                                    | 기본 값       | 설명                                                                                                                                                                                                                                                                                                                 |
| ------------------------------------------ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| VEGA\_SERVER\_PORT                         | 21117      | Enclave 서버의 포트 번호.                                                                                                                                                                                                                                                                                                 |
| VEGA\_ENCLAVE\_PUBLIC\_ENDPOINT            |            | <p>VV central 서버에서 접근할 수 있는 enclave 서버의 공개 엔드포인트 URL. 반드시 HTTPS 프로토콜 사용해야 한다.</p><p>예) “<https://api.vasp.com/enclave”></p>                                                                                                                                                                                        |
| VEGA\_ALLIANCE\_ACCESS\_KEY                |            | accessKey part of the API-Key                                                                                                                                                                                                                                                                                      |
| VEGA\_ALLIANCE\_SECRET\_KEY                |            | secretKey part of the API-Key                                                                                                                                                                                                                                                                                      |
| VEGA\_DATABASE\_CLIENT                     | mysql2     | <p>데이터베이스의 종류.</p><p>데이터베이스 클라이언트에 맞는 값을 기입하면 된다. pg, mysql, mysql2, oracledb, mssql 값을 사용할 수 있다.</p>                                                                                                                                                                                                              |
| VEGA\_DATABASE\_USERNAME                   |            | Database user name                                                                                                                                                                                                                                                                                                 |
| VEGA\_DATABASE\_PASSWORD                   |            | Database password                                                                                                                                                                                                                                                                                                  |
| VEGA\_DATABASE\_HOST                       |            | Address to access database                                                                                                                                                                                                                                                                                         |
| VEGA\_DATABASE\_PORT                       | 3306       | Port number to access database                                                                                                                                                                                                                                                                                     |
| VEGA\_DATABASE\_DB                         | verifyvasp | Database name that enclave server uses                                                                                                                                                                                                                                                                             |
| VEGA\_DATABASE\_SEARCH\_PATH               | enclave    | Custom schema name for PostgreSQL                                                                                                                                                                                                                                                                                  |
| VEGA\_DATABASE\_POOL\_MIN                  | 0          | Minimum value of database connection pool                                                                                                                                                                                                                                                                          |
| VEGA\_DATABASE\_POOL\_MAX                  | 5          | Maximum value of database connection pool                                                                                                                                                                                                                                                                          |
| VEGA\_DATABASE\_SSL                        |            | 데이터베이스의 ssl 연결을 사용할지 여부 (true or false)                                                                                                                                                                                                                                                                            |
| VEGA\_DATABASE\_SSL\_CA                    |            | 서버 인증서를 검증하기 위한 인증기관(CA)의 인증서 파일 경로                                                                                                                                                                                                                                                                                |
| VEGA\_DATABASE\_SSL\_KEY                   |            | ssl 연결에 사용할 클라이언트 인증서 개인키 파일 경로                                                                                                                                                                                                                                                                                    |
| VEGA\_DATABASE\_SSL\_CERT                  |            | ssl 연결에 사용할 클라이언트 공개 인증서 파일 경로                                                                                                                                                                                                                                                                                     |
| VEGA\_DATABASE\_SSL\_CAPATH                |            | ca 인증서들이 저장되어 있는 디렉토리 경로                                                                                                                                                                                                                                                                                           |
| VEGA\_DATABASE\_SSL\_CIPHER                |            | 클라이언트와 서버간 사용할 수 있는 암호화 알고리즘을 지정                                                                                                                                                                                                                                                                                   |
| VEGA\_DATABASE\_SSL\_REJECT\_UNAUTHORIZED  |            | 서버의 인증서가 신뢰되지 않더라도 ssl 연결을 허용할지 여부 (true or false) pool                                                                                                                                                                                                                                                            |
| VEGA\_VERIFICATION\_API\_PATH              |            | 사용자 검증 API 엔드포인트 URL.                                                                                                                                                                                                                                                                                              |
| VEGA\_VERIFICATION\_ACCOUNT\_API\_PATH     |            | 사용자 계정 (지갑 주소 및 수취인 이름) 검증 API 엔드포인트 URL.                                                                                                                                                                                                                                                                          |
| VEGA\_VERIFICATION\_TRANSACTION\_API\_PATH |            | 트랜잭션 처리 상태 조회 API 엔드포인트 URL.                                                                                                                                                                                                                                                                                       |
| VEGA\_VERIFICATION\_CALLBACK\_API\_PATH    |            | 비동기 처리 결과를 받을 Callback API 엔드포인트 URL.                                                                                                                                                                                                                                                                              |
| VEGA\_VERIFICATION\_AUTHORIZATION\_TOKEN   |            | VASP 백엔드로 API를 호출할 때 사용할 인증 토큰. Enclave 서버가 VASP 백엔드로 API를 호출할 때, 헤더로 인증 토큰을 전달한다.                                                                                                                                                                                                                                 |
| VEGA\_VERIFICATION\_AUTHORIZATION\_KEY     |            | VASP 백엔드로 API를 호출할 때 인증 토큰을 전달할 헤더 키값. 설정하지 않으면 `Authorization` 헤더를 통해 인증 토큰을 전달한다.                                                                                                                                                                                                                                |
| VEGA\_API\_ENDPOINT                        |            | VerifyVASP central API server address. 앞서 말했듯이, 두 가지 환경을 제공하는데 목적에 맞게 사용하면 된다. 프로덕션 환경의 경우, `https://api-kr.vega-protocol.com`로 기입한다. 스테이징 환경의 경우, `https://api-kr.vega-protocol.xyz`로 기입하면 된다.                                                                                                                    |
| VEGA\_LOG\_LEVEL                           | info       | <p>Enclave 서버의 로그 레벨을 정할 수 있다.</p><p>none, error, warn, info, debug 값을 사용할 수 있다.</p>                                                                                                                                                                                                                               |
| VEGA\_PUBLIC\_KEY\_TTL                     | 1800000    | 종단 간 암호화에 사용할 상대방 VASP의 public key을 얼마나 오랫동안 캐싱 할 것인지 설정할 수 있다. 단위는 밀리초.                                                                                                                                                                                                                                           |
| VEGA\_ENCRYPTION\_KEY\_BASE64              |            | <p>개인정보 암호화에 사용할 암호화 키</p><p>아래 VEGA\_DECRYPT\_API\_ENDPOINT를 입력하지 않으면, VEGA\_ENCRYPTION\_KEY\_BASE64 환경 변수에 설정된 값이 그대로 데이터베이스의 암호화 키로 사용된다. (권장하지 않음) VEGA\_DECRYPT\_API\_ENDPOINT가 설정되어 있으면, VEGA\_ENCRYPTION\_KEY\_BASE64 환경 변숫값을 request body의 inputKey로 설정하여 해당 API를 호출하고 응답으로 받은 outputKey를 암호화 키로 사용한다.</p> |
| VEGA\_DECRYPT\_API\_ENDPOINT               |            | VEGA\_ENCRYPTION\_KEY\_BASE64에 설정된 암호화 키를 한 번 더 복호화 하기 위해 설정하는 외부 서비스 엔드포인트. HSM과 같은 암호화에 관련된 외부 서비스를 사용하기 위해 설정한다                                                                                                                                                                                                 |
| VEGA\_CHAINALYSIS\_SANCTION\_API\_KEY      |            | Chainalysis sanction API 연동 기능을 이용하여 상대방 지갑 주소를 screening 하고자 할 때, Chainalysis Sanction API Key를 설정한다.                                                                                                                                                                                                             |
| VEGA\_CHAINALYSIS\_KYT\_API\_KEY           |            | Chainalysis KYT API 연동 기능을 이용하여 상대방 지갑 주소나 자산 전송 트랜잭션의 위험 평가를 수행하고자 할 때, Chainalysis KYT API Key를 설정한다.                                                                                                                                                                                                            |
| VEGA\_REFINITIV\_WCO\_API\_KEY             |            | Refinitiv World Check One API 연동 기능을 이용하여 거래 상대방에 대한 위험 평가를 수행하고자 할 때, Refinitiv World Check One API Key를 설정한다.                                                                                                                                                                                                    |
| VEGA\_REFINITIV\_WCO\_API\_SECRET          |            | Refinitiv World Check One API 연동 기능을 이용하여 거래 상대방에 대한 위험 평가를 수행하고자 할 때, Refinitiv World Check One API Key 와 함께 발급된 Secret을 설정한다.                                                                                                                                                                                    |
| VEGA\_REFINITIV\_WCO\_GROUP\_ID            |            | Refinitiv World Check One API 연동 기능을 이용하여 거래 상대방에 대한 위험 평가를 수행하고자 할 때, Refinitiv console sit에서 생성한 group ID를 설정한다. 연동 기능을 통해 수행한 모든 screening case는 해당 그룹에 속한다.                                                                                                                                                    |

## Enclave 실행 방법

### 환경 변수를 파일에 적어 실행하는 방법.

* 환경 변수를 파일에 적어 실행합니다. (e.g. stg\_env)

```jsx
;Enclave 서버
VEGA_SERVER_PORT=21117
VEGA_ENCLAVE_PUBLIC_ENDPOINT=<Enclave Server endpoint URL>

;API Keys
VEGA_ALLIANCE_ACCESS_KEY=<issued accessKey>
VEGA_ALLIANCE_SECRET_KEY=<issued secretKey>

;DB Client
VEGA_DATABASE_CLIENT=mysql2
VEGA_DATABASE_USERNAME=vasp
VEGA_DATABASE_PASSWORD=1234
VEGA_DATABASE_HOST=<database endpoint URL>
VEGA_DATABASE_PORT=3306
VEGA_DATABASE_DB=vega
VEGA_DATABASE_POOL_MIN=0
VEGA_DATABASE_POOL_MAX=5

;VASP API
VEGA_VERIFICATION_API_PATH=<VerifyUser API endpoint URL>
VEGA_VERIFICATION_ACCOUNT_API_PATH=<VerifyAccount API endpoint URL>
VEGA_VERIFICATION_TRANSACTION_API_PATH=<Transaction processing state querying API endpoint URL>
VEGA_VERIFICATION_CALLBACK_API_PATH=<Callback API endpoint URL>
VEGA_VERIFICATION_AUTHORIZATION_TOKEN=<Auth Token>
VEGA_VERIFICATION_AUTHORIZATION_KEY=<Auth Token Header Key>

;VerifyVASP Central Server URL
VEGA_API_ENDPOINT=https://api-kr.vega-protocol.xyz

;Log
VEGA_LOG_LEVEL=info

;DB Encryption Key
VEGA_DECRYPT_API_ENDPOINT=<HSM URL>
VEGA_ENCRYPTION_KEY_BASE64=<Public Key on base64>

;Caching
VEGA_PUBLIC_KEY_TTL=1800000

;Risk Assessment
VEGA_CHAINALYSIS_SANCTION_API_KEY=<Chainalysis Public Sanction API Key>
VEGA_CHAINALYSIS_KYT_API_KEY=<Chainalysis KYT API Key>
VEGA_REFINITIV_WCO_API_KEY=<Refinitiv World Check One API Key>
VEGA_REFINITIV_WCO_API_SECRET=<Refinitiv World Check One API Secret>
VEGA_REFINITIV_WCO_GROUP_ID=<Refinitiv World Check One Group ID>
```

* 실행

```bash
$ docker run -d -p 21117:21117 --env-file=<환경 변수 파일 이름> --name=enclave verifyvasp/enclave:v1.5.7
```

### 환경 변수를 커맨드 명령어 직접 입력하여 실행하는 방법.

```bash
$ docker run -d -p 21117:21117 \\\\
-e VEGA_SERVER_PORT=21117 \\\\
-e VEGA_ENCLAVE_PUBLIC_ENDPOINT=<Enclave Server endpoint URL> \\\\
-e VEGA_ALLIANCE_ACCESS_KEY=<issued accessKey> \\\\
-e VEGA_ALLIANCE_SECRET_KEY=<issued secretKey> \\\\
-e VEGA_DATABASE_USERNAME=vasp \\\\
-e VEGA_DATABASE_PASSWORD=1234 \\\\
-e VEGA_DATABASE_HOST=<database endpoint URL> \\\\
-e VEGA_DATABASE_PORT=3306 \\\\
-e VEGA_DATABASE_DB=vega \\\\
-e VEGA_VERIFICATION_API_PATH=<VerifyUser API endpoint URL> \\\\
-e VEGA_VERIFICATION_ACCOUNT_API_PATH=<VerifyAccount API endpoint URL> \\\\
-e VEGA_VERIFICATION_TRANSACTION_API_PATH=<Transaction processing state querying API endpoint URL> \\\\
-e VEGA_VERIFICATION_CALLBACK_API_PATH=<Callback API endpoint URL> \\\\
-e VEGA_VERIFICATION_AUTHORIZATION_TOKEN=<Auth Token> \\\\
-e VEGA_VERIFICATION_AUTHORIZATION_KEY=<Auth Token Header Key> \\\\
-e VEGA_API_ENDPOINT=https://api-kr.vega-protocol.xyz \\\\
-e VEGA_LOG_LEVEL=info \\\\
-e VEGA_PUBLIC_KEY_TTL=1800000 \\\\
-e VEGA_DECRYPT_API_ENDPOINT=<HSM URL> \\\\
-e VEGA_ENCRYPTION_KEY_BASE64=<Public Key on base64> \\\\
-e VEGA_CHAINALYSIS_SANCTION_API_KEY=<Chainalysis Public Sanction API Key> \\\\
-e VEGA_CHAINALYSIS_KYT_API_KEY=<Chainalysis KYT API Key> \\\\
-e VEGA_REFINITIV_WCO_API_KEY=<Refinitiv World Check One API Key> \\\\
-e VEGA_REFINITIV_WCO_API_SECRET=<Refinitiv World Check One API Secret> \\\\
-e VEGA_REFINITIV_WCO_GROUP_ID=<Refinitiv World Check One Group ID> \\\\
verifyvasp/enclave:v1.5.7
```

## Enclave 서버 기동

### Enclave 서버 기동 및 기동 여부 확인

* enclave 서버가 완전히 잘 떴는지 확인하는 방법
  * docker log를 봤을 때 “Listening port at 21117” 와 같이 설정한 포트 번호로 listening 하고 있다는 메시지가 보여야 합니다.
  * (단, 뒤이어 다른 에러 로그가 없어야 합니다.)

### Enclave 서버 헬스 체크

* \<enclave endpoint>/healthcheck 경로로 GET 호출합니다.
* VV central 서버에서 주기적으로 (5\~10) 초에 한번 각 VASP enclave 서버의 health를 체크하고 있습니다.

### Enclave 서버 재기동

* Enclave docker가 동작을 멈추면 재기동 해야 합니다.
* 또는, Enclave docker log에 다음과 같은 로그가 찍히면 재기동 해야 합니다.
  * “Unhandled Rejection detect: \<error message>”
  * “Uncaught Exception detect: \<error message>”
