파이 코어팀이 Github, Dockerhub에 올린 내용을 한국어 전환하였으며, 오역이 있을 수 있으니 원본과 비교해서 보셔야 합니다.

Stellar Quickstart Docker Image

이 프로젝트는 docker를 사용하는 경우 stellar-core 및 horizon을 사설 인프라에 통합하는 간단한 방법을 제공합니다.

이 이미지는 대부분의 개발자에게 작동해야하는 유효성 검사를 거치지 않는 기본 임시 구성을 제공합니다. 이 이미지를 호스트 기반 볼륨 (아래 “사용”섹션에서 설명)과 함께 사용하여 컨테이너를 구성함으로써 운영자는 전체 구성 사용자 정의 및 데이터 지속성에 액세스 할 수 있습니다.

이미지는 다음 소프트웨어를 사용합니다.

Postgresql 9.6은 스텔라 코어와 수평선 데이터를 모두 저장하는 데 사용됩니다.

stellar-core

horizon

Supervisord는 위 서비스의 프로세스를 관리하는 데 사용됩니다.

Usage(용법)

이 프로젝트를 성공적으로 사용하려면 먼저 몇 가지 사항을 결정해야합니다.

먼저 컨테이너를 공개, 프로덕션 Stellar 네트워크 (pubnet이라고 함) 또는 테스트 네트워크 (테스트 넷이라고 함)에 포함할지 여부를 결정합니다. 비용 손실에 대해 걱정할 필요가 없으므로 소프트웨어를 개발하는 동안 사용하도록 권장합니다. 테스트 넷. 또한, 우리는 당신이 자신의 개인 스텔라 네트워크를 운영 할 수있는 독립형 네트워크 (독립형이라고 함)를 추가했습니다. 독립형 네트워크 모드에서는 선택적으로 –protocol-version {version} 매개 변수를 전달하여 특정 프로토콜 버전 (기본값은 최신 버전)을 실행할 수 있습니다. 컨테이너를 시작할 때 사용할 네트워크 (및 기본 구성 파일)를 결정하기 위해 명령 줄 플래그로 –pubnet, –testnet 또는 –standalone을 제공합니다.

다음으로 Docker 볼륨을 사용할지 여부를 결정해야합니다. 볼륨을 사용하지 않을 때 컨테이너가 임시 모드에 있다고 말합니다. 즉, 컨테이너 실행간에 아무것도 유지되지 않습니다. 영구 모드는 대안으로, 구성을 사용자 지정 (예 : 유효성 검사 시드 추가)해야하거나 충돌 또는 서버 다시 시작시 Stellar 네트워크에 대한 느린 캐치 업을 피하려는 경우에 사용해야합니다. . 개발 또는 테스트 환경 이외의 모든 것에 대해 영구 모드를 권장합니다.

마지막으로 노출 할 포트를 결정해야합니다. 이 이미지의 소프트웨어는 4 개의 포트에서 수신하며, 각 포트는 호스트 시스템이 연결된 네트워크에 노출하거나 노출하지 않을 수 있습니다. 포트를 노출하지 않는 컨테이너는 그다지 유용하지 않으므로 최소한 수평선 http 포트를 노출하는 것이 좋습니다. 노출 할 포트에 대한 결정에 대한 자세한 내용은 아래 “포트”섹션을 참조하십시오.

위의 질문을 결정한 후 컨테이너를 설정할 수 있습니다. 컨테이너를 실행할 모드에 따라 아래의 해당 섹션을 참조하십시오.

Background vs. Interactive containers 백그라운드 vs. 대화 형 컨테이너

Docker 컨테이너는 대화식으로 (-it 플래그 사용) 또는 분리 된 백그라운드 상태 (-d 플래그 사용)에서 실행할 수 있습니다. 아래의 많은 예제 명령은 디버깅을 돕기 위해 -it 플래그를 사용하지만 대부분의 경우 단순히 백그라운드에서 노드를 실행하기를 원할 것입니다. docker 사용에 익숙해 지려면 docker의 자습서를 사용하는 것이 좋습니다.

Ephemeral mode 임시 모드

개발 및 테스트 환경을 지원하기 위해 Ephermeral 모드가 제공됩니다. 임시 모드에서 컨테이너를 시작할 때마다 데이터베이스가 빈 상태로 시작되고 적절한 네트워크에 기본 구성 파일이 사용됩니다.

임시 노드를 시작하는 것은 간단합니다. docker run 명령을 만들어 적절한 이미지를 시작하지만 볼륨을 마운트하지 마십시오. docker 명령을 작성하려면 실행할 네트워크 이름과 사용 가능한 포트를 노출하는 플래그가 필요합니다 (포트 노출에 대한 자세한 내용은 아래의 “포트”섹션 참조). 따라서 수평선을 노출하면서 테스트 넷 노드를 시작하는 것은 다음과 같습니다.

$ docker run –rm -it -p “8000:8000” –name stellar stellar/quickstart –testnet

시작의 일부로 임시 모드 컨테이너는 postgresql 서비스를 보호하기 위해 임의의 암호를 생성하고이를 표준 출력으로 출력합니다. 이 암호 (postgresql 포트를 노출 한 경우)를 사용하여 실행중인 postgresql 데이터베이스에 액세스 할 수 있습니다 (아래 “데이터베이스 액세스”섹션 참조).

Persistent mode 영구 모드

임시 모드에 비해 지속 모드는 작동하기가 더 복잡하지만 더 강력합니다. 영구 모드는 실행중인 Docker 컨테이너에 노출되는 호스트 시스템의 디렉터리 인 마운트 된 호스트 볼륨을 사용하여 모든 데이터베이스 데이터와 서비스 실행에 사용되는 구성 파일을 저장합니다. 이를 통해 호스트 시스템에서 이러한 파일을 관리하고 수정할 수 있습니다.

영구 모드 컨테이너를 시작하는 것은 한 가지 예외를 제외하고 임시 모드와 동일합니다.

$ docker run –rm -it -p “8000:8000” -v “/home/scott/stellar:/opt/stellar” –name stellar stellar/quickstart –testnet

위의 예에서 -v 옵션은 docker에게 호스트 디렉토리 / home / scott / stellar을 / opt / stellar 경로의 컨테이너에 마운트하도록 지시합니다. 호스트 디렉토리를 원하는 위치로 사용자 정의 할 수 있습니다. 컨테이너를 시작할 때마다 동일한 값을 사용하기 만하면됩니다. 또한 참고 : 절대 디렉토리 경로가 필요합니다. 볼륨 마운트의 두 번째 부분 (/ opt / stellar)은 절대 변경하면 안됩니다. 이 특수 디렉토리는 컨테이너가 임시 또는 영구 모드로 시작해야하는지 확인하는 데 사용되는 호스트 시스템에서 마운트되었는지 확인합니다.

영구 모드 컨테이너를 처음 시작하면 시작 스크립트에서 마운트 된 볼륨이 비어 있음을 알 수 있습니다. 그러면 컨테이너의 초기 구성을 채우는 대화 형 초기화 프로세스가 트리거됩니다. 이 대화 형 초기화는 대부분의 경우 정상적인 작업 중에 컨테이너를 대화 형으로 실행하지 않고 백그라운드에서 실행하기를 원하기 때문에 설정 프로세스에 몇 가지 복잡성을 추가합니다. 영구 모드 노드를 설정하려면 다음 단계를 권장합니다.

  1. 처음에 컨테이너의 대화 형 세션을 실행하여 모든 서비스가 올바르게 시작되고 실행되는지 확인합니다.
  2. 대화 형 컨테이너를 종료합니다 (Ctrl-C 사용).
  3. 백그라운드에서 동일한 호스트 디렉터리를 사용하여 새 컨테이너를 시작합니다.

Customizing configurations 구성 사용자 지정

stellar-core와 horizon이 모두 사용하는 구성을 사용자 지정하려면 영구 모드를 사용해야합니다. 기본 구성은 영구 모드 컨테이너를 처음 시작할 때 데이터 디렉터리에 복사됩니다. 아래 다이어그램을 사용하여 사용자 정의 할 수있는 다양한 구성 파일에 대해 알아보십시오.

/opt/stellar

|– core

|    `– etc

|           `– stellar-core.cfg # Stellar core config

|– horizon

|    `– etc

|           `– horizon.env # A shell script that exports horizon’s config

|– postgresql

|    `– etc

|           |– postgresql.conf # Postgresql root configuration file

|           |– pg_hba.conf # Postgresql client configuration file

|           `– pg_ident.conf # Postgresql user mapping file

`– supervisor

`– etc

|            `– supervisord.conf # Supervisord root configuration

이러한 파일을 편집하기 전에 컨테이너를 중지 한 다음 사용자 지정을 완료 한 후 컨테이너를 다시 시작하는 것이 좋습니다.

참고 : 이러한 파일을 편집 할 때주의하십시오. 잘못된 편집으로이 컨테이너 내에서 시작된 서비스를 중단 할 수 있습니다. 앞으로 이러한 서비스를 유지 관리 할 책임이 있으므로 사용자 지정하기 전에 각 서비스의 작업 관리에 대해 배우는 것이 좋습니다.

Regarding user accounts(사용자 계정에 관하여)

Docker 컨테이너와 호스트 볼륨 간의 UID 관리는 복잡 할 수 있습니다. 현재이 이미지는 미리 설정된 UID : 10011001을 사용하여 호스트 시스템과 충돌하지 않는 UID를 만들려고합니다. 현재이 값을 사용자 지정할 수있는 방법은 없습니다. 호스트 볼륨에서 생성 된 모든 데이터는 10011001이 소유합니다.이 UID 값이 인프라에 적합하지 않은 경우이 프로젝트를 포크하고 찾기 / 바꾸기 작업을 수행하여 UID를 변경하는 것이 좋습니다. 충분한 사용자가 요청하면 향후이 스토리를 개선 할 수 있습니다.

Port(포트)

Port Service Description
5432 postgresql database access port
8000 horizon main http port
11625 stellar-core peer node port
11626 stellar-core main http port

Security Considerations 보안 고려 사항

실행중인 컨테이너에서 사용하는 네트워크 포트를 노출하면 잠재적 인 위험이 따릅니다. 별 네트워크의 특성으로 인해 많은 공격을 예방할 수 있지만 빠른 시작 컨테이너 내에서 실행되는 postgresql 서버에 대한 보호 된 액세스를 유지하는 것이 매우 중요합니다. 이 DB에 대한 쓰기 액세스 권한을 얻은 공격자는 별의 네트워크에 대한 귀하의보기를 손상시켜 잠재적으로 가짜 거래, 계정 등을 삽입 할 수 있습니다.

 

수평선 http 포트를 여는 것이 안전합니다. Horizon은 인터넷 연결 인터페이스에서 수신하도록 설계되었으며 포트에서 권한있는 작업을 제공하지 않습니다.

 

stellar-core 용 HTTP 포트는 자체 보안을 제공하지 않으므로 신뢰할 수있는 네트워크에만 노출되어야합니다. 포트에 요청을 할 수있는 공격자는 캐치 업을 강제하거나 로깅 수준을 변경하는 등의 관리 명령을 수행 할 수 있으며,이 중 다수는 작업을 중단하거나 서비스를 거부하는 데 사용될 수 있습니다.

그러나 stellar-core의 피어 포트는 노출 될 수 있으며 이상적으로는 인터넷에서 라우팅 할 수 있습니다. 이렇게하면 외부 피어가 노드에 대한 연결을 시작하여 오버레이 네트워크의 연결을 개선 할 수 있습니다. 그러나 컨테이너가 피어에 대한 나가는 연결도 설정하므로 이는 필요하지 않습니다.

Accessing and debugging a running container(실행중인 컨테이너 액세스 및 디버깅)

서비스 중 하나를 디버그하거나 로그를 검토하거나 다른 관리 작업을 수행하기 위해 실행중인 컨테이너를 검사해야 할 때가 있습니다. 실행중인 컨테이너 내에서 새로운 대화 형 셸을 시작하여 이를 수행합니다.

$ docker exec -it stellar /bin/bash

위의 명령은 stellar라는 이름으로 컨테이너를 시작했다고 가정합니다. 다른 경우 선택한 이름으로 해당 이름을 바꿉니다. 실행되면 컨테이너 내에서 루트로 실행되는 대화 형 셸이 열립니다.

Restarting services 서비스 다시 시작

빠른 시작 컨테이너 내의 서비스는 supervisord를 사용하여 관리되며 관리자의 셸을 사용하여 실행중인 서비스와 상호 작용하는 것이 좋습니다. 수퍼바이저 셸을 시작하려면 컨테이너에 대한 대화 형 셸을 연 다음 supervisorctl을 실행합니다. 그러면 다음과 같은 명령 프롬프트가 표시됩니다.

horizon RUNNING pid 143, uptime 0:01:12
postgresql RUNNING pid 126, uptime 0:01:13
stellar-core RUNNING pid 125, uptime 0:01:13
supervisor>

 

이 프롬프트에서 감독 명령을 실행할 수 있습니다.

 

# restart horizon

supervisor> restart horizon

 

# stop stellar-core

supervisor> stop stellar-core

 

help 명령을 사용하여 사용 가능한 명령에 대해 자세히 알아볼 수 있습니다.

Viewing logs 로그보기

로그는 컨테이너의 / var / log / supervisor / 경로에서 찾을 수 있습니다. supervisord가 관리하는 프로세스의 stdout 및 stderr 모두에 대해 파일이 보관됩니다. 또한 supervisorctl에서 제공하는 tail 명령을 사용할 수 있습니다.

Accessing databases 데이터베이스 액세스

이 프로젝트의 요점은 자체 인프라 내에서 스텔라의 소프트웨어를 더 쉽게 실행하여 소프트웨어가 스텔라 네트워크와 더 쉽게 통합 될 수 있도록하는 것입니다. 대부분의 경우 Horizon의 REST API와 통합 할 수 있지만 종종 Horizon 또는 stellar-core가 제공하는 데이터베이스에 직접 액세스하기를 원할 것입니다. 이를 통해 별 네트워크 데이터에 대한 사용자 지정 SQL 쿼리를 만들 수 있습니다.

이 이미지는 두 개의 postgres 데이터베이스, 즉 stellar-core의 데이터를위한 코어와 horizon의 데이터를위한 수평선을 관리합니다. postgresql 클라이언트 또는 라이브러리와 연결할 때 사용할 사용자 이름은 별입니다. 사용할 암호는 컨테이너가 실행중인 모드에 따라 다릅니다. 영구 모드는 사용자가 제공 한 암호를 사용하고 임시 모드는 암호를 생성하고 컨테이너 시작시 콘솔에 인쇄합니다.

Example launch commands(예제 실행 명령)

다음은 활성화 된 옵션을 설명하기 위해 주석이 달린 빠른 시작 컨테이너를 시작할 수있는 다양한 방법 목록입니다. 또한 docker 명령을 배우고 익숙해지는 것이 좋습니다.

백그라운드에서 임시 pubnet 노드를 시작합니다.

 

$ docker run -d -p “8000:8000” –name stellar stellar/quickstart –pubnet

 

포 그라운드에서 임시 테스트 넷 노드를 시작하여 모든 포트를 노출합니다.

$ docker run –rm -it \

-p “8000:8000” \

-p “11626:11626” \

-p “11625:11625” \

–name stellar \

stellar/quickstart –testnet

 

호스트 디렉토리 / str을 사용하여 새 영구 노드를 설정합니다.

$ docker run -it –rm \

-v “/str:/opt/stellar” \

–name stellar \

stellar/quickstart –pubnet

 

이미 초기화 된 호스트 디렉터리에 대한 백그라운드 영구 컨테이너를 시작합니다.

$ docker run -d \

-v “/str:/opt/stellar” \

-p “8000:8000” \

–name stellar \

stellar/quickstart –pubnet

Troubleshooting(문제 해결)

문제가 무엇인지 알려주세요! 이슈를 열거 나 공개 슬랙 채널에 참여하세요.

Leave a Reply