Skip to content

Hetzner, Vultr, Linode에 Potato 배포하기

potato deploy로 Potato 주석 연구를 월 약 €6부터 Hetzner, Vultr, Linode 가상 머신에 올립니다. HTTPS와 재시작해도 남는 디스크를 쓸 수 있습니다.

potato deploy up --provider hetzner는 주석 연구를 월 약 €6에 Hetzner Cloud 가상 머신에 올립니다. 이는 Potato의 유료 VM 대상 가운데 가장 낮은 기본 가격입니다. --provider vultr와 --provider linode는 같은 일을 Vultr와 Akamai의 Linode에서 각각 월 $10와 $12에 합니다. 셋 모두 재시작해도 디스크가 남는 평범한 가상 머신이므로, 백업 서비스 없이도 연구를 몇 주 동안 실행할 수 있습니다. Potato는 세 곳을 모두 같은 방식으로 구성합니다. 포트 22, 80, 443만 여는 방화벽, Docker, Let's Encrypt 인증서를 쓰는 Caddy 웹 서버를 갖추고, Potato를 시스템 서비스로 실행합니다. 이 페이지의 내용을 따르려면 Potato 2.10 이상과, 이미 potato start로 실행해 본 설정이 필요합니다.

세 곳 중에서 고르기

세 곳은 가격, 메모리, 청구 통화, 그리고 머신이 기본으로 실행되는 위치가 다릅니다. 아래 표는 --size를 넘기지 않을 때 Potato가 만드는 크기를, Potato가 출력하는 월 가격과 함께 보여 줍니다.

--provider hetzner--provider vultr--provider linode
기본 크기cx23, vCPU 2개, 4 GBvc2-1c-2gb, vCPU 1개, 2 GBg6-standard-1, vCPU 1개, 2 GB
월 가격약 €6, IPv4 주소 포함$10$12
기본 위치nbg1, 뉘른베르크ewr, 뉴저지us-east, 뉴어크
토큰 변수HCLOUD_TOKENVULTR_API_KEYLINODE_TOKEN

가격 대비 메모리는 Hetzner가 가장 많고, Potato는 항목 집합을 메모리에 두므로, 적은 예산으로 큰 코퍼스를 다룰 때는 Hetzner가 알맞습니다. Hetzner는 독일 회사가 유로로 청구하는데, 일부 기관의 구매 규정은 이를 허용하지 않습니다. Vultr와 Linode는 미국 달러로 청구합니다.

API 토큰 만들기

각 공급자는 콘솔에서 만들어 환경에 설정하는 API 토큰으로 인증합니다.

  • Hetzner. Hetzner Cloud 콘솔에서 프로젝트의 Security 섹션을 열고 읽기와 쓰기 권한이 있는 API 토큰을 만듭니다.
  • Vultr. Vultr 대시보드에서 API 키를 만들고 내 컴퓨터의 IP 주소를 키의 접근 제어 목록에 추가합니다. 그렇지 않으면 Vultr는 모든 요청을 거부합니다.
  • Linode. Linodes, Firewalls, Volumes에 대한 읽기와 쓰기 권한이 있는 개인 액세스 토큰을 만듭니다.

deploy extra를 설치하고, 토큰을 export한 뒤, Potato가 그 토큰을 쓸 수 있는지 확인하십시오.

bash
pip install 'potato-annotation[deploy]'
export HCLOUD_TOKEN=...
potato deploy providers --verify

로그인할 수 있는 사람 정하기

potato deploy는 로그인 설정을 바꾸지 않으며, 머신의 주소는 공개되어 있습니다. 설정이 누구나 가입할 수 있게 되어 있으면, 아래 드라이 런이 경고 D003 "Anyone who finds the URL can register and annotate."(URL을 찾은 사람은 누구나 가입해 주석을 달 수 있습니다)를 출력합니다. 크라우드소싱 연구에서는 보통 공개 가입이 의도한 설정입니다. 이름이 정해진 주석자라면 배포하기 전에 allow_all_users: false와 함께 user_config.users 아래에 명단을 적거나(비밀번호 관리), Google, GitHub, 소속 기관 계정으로 로그인하게 하십시오(SSO 및 OAuth 인증).

계획 확인과 배포

드라이 런에는 계정이 필요 없고 아무것도 만들지 않습니다. 모든 단계, 예상 비용, 그리고 설정 가운데 위험한 항목을 출력합니다.

bash
potato deploy up myproject/config.yaml --provider hetzner --dry-run
potato deploy up myproject/config.yaml --provider hetzner

두 번째 명령은 계획을 확인하면 배포합니다. 마지막에 머신 IP의 https:// 주소인 URL과, 설정 옆에 있는 관리자 키 파일 .potato/secrets.json의 경로를 출력합니다. 관리자 키로 /admin의 관리자 대시보드를 열 수 있습니다. 설정을 수정한 뒤 up을 다시 실행하면 새 버전이 같은 머신에 업로드됩니다. 연구가 진행되는 동안에는 세 공급자 모두에서 potato deploy logs myproject/config.yaml -f로 서버 로그를 계속 따라가며 볼 수 있습니다.

--region과 --size는 위치와 머신을 바꾸고, --volume-gb는 작업 데이터를 담을 별도 디스크를 추가합니다. Hetzner는 cx 머신을 유럽 위치에서만 판매하므로, 미국 위치인 ash와 hil에 배포하려면 --size로 cpx 유형을 넘겨야 합니다. 고른 위치에서 그 유형을 판매하지 않으면, Potato는 아무것도 만들기 전에 멈추고 그 유형을 판매하는 위치를 나열합니다.

도메인 이름 없이 받는 인증서

도메인 이름이 없으면 Let's Encrypt는 머신의 IP 주소에 대해 인증서를 발급합니다. 유효 기간은 약 6일이며 자동으로 갱신됩니다. 갱신에 실패하면 potato deploy status가 이를 보고하므로, 연구를 지켜보는 사람 없이 운영한다면 며칠마다 확인하십시오. 내 도메인을 쓰려면 DNS A 레코드를 머신의 IP로 지정하고 --domain annotate.example.edu를 붙여 다시 배포하십시오. Let's Encrypt 계정은 git config user.email의 주소를 연락처로 쓰며, --acme-email로 다른 주소를 지정할 수 있습니다.

공급자별 세부 사항

Linode는 SSH 키를 제공하더라도 머신을 만들 때 root 비밀번호를 요구합니다. Potato는 비밀번호를 생성해 .potato/secrets.json에 저장하고 SSH 비밀번호 로그인을 끄므로, 그 비밀번호로는 로그인할 수 없습니다. Vultr에서는 --volume-gb로 추가한 별도 디스크가 머신이 시작된 뒤에 연결되며, 설정 과정은 장치가 나타날 때까지 기다렸다가 포맷하고 마운트합니다.

연구 마무리하기

주석은 머신의 디스크에 있으며, 이 디스크는 머신과 함께 삭제됩니다. 먼저 내 컴퓨터로 pull해 내용을 확인한 다음 서버를 삭제하십시오.

bash
potato deploy pull myproject/config.yaml
potato deploy destroy myproject/config.yaml

pull은 배포가 수집한 모든 것을 새 potato-pull-<name>-<timestamp> 디렉터리에 기록하고, 데이터베이스는 SQLite의 백업 명령으로 복사합니다. destroy는 한 번도 pull하지 않은 배포에서는 실행되지 않습니다.

더 읽을거리