LainyZine: 프로그래머 가이드 🐣

Digital Ocean 서버를 만들고 삭제하는 방법(doctl)

Digital Ocean은 서버 호스팅을 제공하는 Virtual Private Server(VPS) 서비스의 하나입니다.

이 서비스를 사용하면 손쉽게 서버를 실행할 수 있으며, 가장 저렴한 서버의 경우 월 $5 정도 비용으로 사용할 수 있습니다. 또한 클라우드 서비스로 시간 단위로 요금이 계산 된다는 장점이 있습니다. Digital Ocean은 계속해서 서비스를 확장하고 있으며 다양한 서버 타입과 서비스들을 제공하고 있으니 더 자세한 내용은 다음 페이지를 참고해주세요.

Digital Ocean의 공식 웹사이트

Digital Ocean은 공식 CLI 도구 doctl을 사용해서 서버를 생성하고 삭제하는 것도 가능합니다. 이 글에서는 doctl을 설치하고 서버를 생성 및 삭제하는 방법을 소개합니다.

주의: Digital Ocean은 유료 서비스이므로 서버(droplet)을 생성하면 비용이 발생할 수 있습니다. 불필요한 비용이 발생하지 않도록 사용하지 않는 서버는 반드시 종료해주세요.

Digital Ocean CLI 도구 doctl 설치하는 방법

먼저 운영체제 별로 doctl 설치하는 방법을 소개합니다.

macOS에서 doctl 명령어 설치하는 방법

macOS에서는 Homebrew를 사용해 손쉽게 doctl을 설치할 수 있습니다.

$ brew install doctl

doctl version 명령어로 설치가 잘 되었는지 확인해봅니다.

$ doctl version
doctl version 1.61.0-release
Git commit hash: c46d9619

Linux에서 doctl 명령어 설치하는 방법

Ubuntu에서는 snap 패키지 매니저로 doctl을 설치할 수 있습니다.

$ sudo snap install doctl

그 외의 리눅스에서는 릴리스 페이지에서 바이너리를 다운로드 받아 doctl을 설치할 수 있습니다. 릴리스 페이지에서 doctl-x.xx.0-linux-amd64.tar.gz 형식의 파일을 다운로드 받아 압축을 풀고 /usr/local/bin 디렉터리에 복사해줍니다.

$ cd /tmp
$ wget https://github.com/digitalocean/doctl/releases/download/v1.61.0/doctl-1.61.0-linux-amd64.tar.gz
$ tar xf ~/doctl-1.61.0-linux-amd64.tar.gz
$ sudo mv ~/doctl /usr/local/bin

doctl version 명령어로 설치가 잘 되었는지 확인해봅니다.

$ doctl version
doctl version 1.61.0-release
Git commit hash: c46d9619

Windows 10에서 doctl 명령어 설치하는 방법

윈도우에서는 릴리스 페이지의 바이너리를 다운로드 받아 설치합니다. 파워셸에서 다음 내용을 실행해 압축 파일을 다운로드 받고, 압축을 풀어줍니다.

$ Invoke-WebRequest https://github.com/digitalocean/doctl/releases/download/v1.61.0/doctl-1.61.0-windows-amd64.zip -OutFile ~\doctl-1.61.0-windows-amd64.zip
$ Expand-Archive -Path ~\doctl-1.61.0-windows-amd64.zip

파워셸을 관리자 모드로 실행해 다음 내용을 실행합니다.

$ New-Item -ItemType Directory $env:ProgramFiles\doctl\
$ Move-Item -Path ~\doctl-1.60.0-windows-amd64\doctl.exe -Destination $env:ProgramFiles\doctl\

$ [Environment]::SetEnvironmentVariable(
    "Path",
    [Environment]::GetEnvironmentVariable("Path",
    [EnvironmentVariableTarget]::Machine) + ";$env:ProgramFiles\doctl\",
    [EnvironmentVariableTarget]::Machine)

$ $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")

doctl이 잘 설치되었는지 확인해봅니다.

$ doctl version
doctl version 1.61.0-release
Git commit hash: c46d961

doctl 사용을 위한 API 토큰 만들기

doctl을 사용하기 위해서는 먼저 Digital Ocean 사이트에서 API Token을 생성해야합니다. 먼저 Digital Ocean 사이트에 접속합니다.

Digital Ocean의 Application & API 메뉴

왼쪽 사이트 바의 스크롤을 내려보면 API 메뉴를 찾을 수 있습니다. 이를 클릭하거나 아래 주소로 직접 이동합니다.

새로운 토큰을 등록합니다

Generate New Token 버튼을 클릭하고, 토큰 이름을 입력합니다. 서버(Droplet)를 생성할 것이므로, Read와 추가적으로 Write 권한 모두 체크해줍니다. Generate Token 버튼을 클릭합니다.

이 토큰은 CLI 도구에서 사용합니다

토큰이 생성되었습니다. 토큰은 생성 시점에만 확인할 수 있으므로 안전한 곳에 저장해둡니다. 토큰을 클릭하면 복사됩니다.

이제 이 토큰을 doctl 명령어에 등록해야합니다.

doctl에 토큰 셋업하는 방법

doctl auth init 명령어로 토큰을 셋업할 수 있습니다. context로 여러 계정을 사용할 수 있습니다. context는 로컬 환경에서만 사용하는 이름이므로 적절한 이름을 붙여 토큰 등록을 진행합니다.

$ doctl auth init --context lainyzine
Please authenticate doctl for use with your DigitalOcean account. You can generate a token in the control panel at https://cloud.digitalocean.com/account/api/tokens

Enter your access token:
Validating token... OK

doctl auth list 해보면 default 컨텍스트를 사용중입니다.

$ doctl auth list
default (current)
lainyzine

doctl auth switch 명령어로 토큰을 등록한 lainyzine 컨텍스트로 변경해줍니다.

$ doctl auth switch --context lainyzine
Now using context [lainyzine] by default

$ doctl auth list
default
lainyzine (current)

이제 lainyzine 컨텍스트가 사용중입니다.

doctl로 Digital Ocean 서버(droplet) 생성하는 방법

Digital Ocean에서는 서버를 droplet이라고 부릅니다. droplet을 생성하기에 앞서 서버에서 사용할 SSH 키를 등록해야합니다. 등록에 앞서 이미 등록되어있는 키가 있는지 확인해봅니다.

$ doctl compute ssh-key list
ID          Name         FingerPrint

등록되어있는 키가 있고, 로컬에 개인키를 가지고 있다면 그 키를 사용해도 무방합니다. 등록되어있지 않거나 키를 가지고 있지 않다면 키를 등록해주어야합니다. 로컬에 이미 ~/.ssh/id_ed25519 키를 가지고 있고, 이 키를 Digital Ocean 서버에 접속하기 위해서 사용하려면 다음 명령어를 실행해줍니다.

$ doctl compute ssh-key import lainyzine --public-key-file ~/.ssh/id_ed25519.pub
ID          Name         FingerPrint
30557310    lainyzine    a9:00:61:12:68:5c:2e:5d:c5:53:47:c5:77:f0:b6:8d

키가 정상적으로 등록되면, 키 목록과 FingerPrint가 출력됩니다. 서버를 생성할 때 이 FingerPrint를 사용하니 복사해주세요.

먼저 서버를 생성하는 명령어를 실행해보겠습니다.

$ doctl compute droplet create \
  --region sgp1 \
  --image ubuntu-21-04-x64 \
  --size s-1vcpu-1gb \
  --ssh-keys a9:00:61:12:68:5c:2e:5d:c5:53:47:c5:77:f0:b6:8d \
  lainyzine

옵션이 많죠? 옵션에서 사용할 수 있는 값에 대해서는 뒤에서 좀 더 자세히 알아보겠습니다. 우선 ssh-keys 옵션에 앞서 등록한 SSH 키의 FingerPrint를 넣어줍니다. 마지막 lainyzine은 서버(droplet)의 이름입니다. 이렇게 실행하면 서버를 실행해볼 수 있습니다.

다음 명령어를 실행해보면 서버 목록을 확인할 수 있습니다. 처음에는 Public IPv4 값이 없을 수도 있습니다. 서버 초기화에는 시간이 조금 걸립니다. 이 값이 나올 때까지 기다립니다.

$ doctl compute droplet list
ID           Name         Public IPv4       Private IPv4    Public IPv6    Memory    VCPUs    Disk    Region    Image               VPC UUID                                Status    Tags    Features              Volumes
250231551    lainyzine    -    10.104.0.2                     1024      1        25      sgp1      Ubuntu 21.04 x64    85e7a708-8ce7-43cf-abb4-62a3206fe482    new               private_networking

웹사이트에서도 서버가 생성된 것을 확인할 수 있습니다.

Digital Ocean의 서버 상세 페이지

서버 초기화를 기다리는 동안 서버 실행 옵션에 대해서 한 번 알아보겠습니다.

서버 실행 옵션에 대해서 알아보기: region, image, size

서버를 생성하기 위해 앞서 실행한 명령어를 다시 한 번 살펴보겠습니다.

$ doctl compute droplet create \
  --region sgp1 \
  --image ubuntu-21-04-x64 \
  --size s-1vcpu-1gb \
  --ssh-keys a9:00:61:12:68:5c:2e:5d:c5:53:47:c5:77:f0:b6:8d \
  lainyzine

Digital Ocean 서버(droplet)을 생성할 때 지정할 수 있는 모든 옵션에 대해서는 doctl compute droplet create --help 명령어로 확인할 수 있습니다. 그 중에서 필수적으로 지정해야하는 옵션이 region, image, size 입니다.

먼저 region은 서버가 실행되는 위치를 지정합니다. 현재 Digital Ocean에서는 7개 리전에서 서버를 생성할 수 있습니다. 사용 가능한 값은 doctl compute region list 명령어를 실행해 확인할 수 있습니다. 서버를 생성할 때 사용한 값은 sgp1로 싱가폴 1번 리전을 의미하며, 뉴욕 1번 리전을 사용하고 싶다면 nyc1을 지정해줍니다.

$ doctl compute region list
Slug    Name               Available
nyc1    New York 1         true
sfo1    San Francisco 1    false
nyc2    New York 2         false
ams2    Amsterdam 2        false
sgp1    Singapore 1        true
lon1    London 1           true
nyc3    New York 3         true
ams3    Amsterdam 3        true
fra1    Frankfurt 1        true
tor1    Toronto 1          true
sfo2    San Francisco 2    true
blr1    Bangalore 1        true
sfo3    San Francisco 3    true

다음으로 size에는 서버의 크기를 지정합니다. s-1vcpu-1gb은 1 vpu, 1GB 메모리를 가진 가상 서버로 디지털 오션에서 가장 저렴한 서버입니다. doctl compute size list 명령어를 실행해보면 사용가능한 모든 서버 사이즈 옵션을 확인할 수 있습니다. 다른 서버 사이즈를 사용하고 싶다면 해당 서버의 slug를 size 값의 옵션으로 지정해주면 됩니다.

$ doctl compute size list
Slug                  Memory    VCPUs    Disk    Price Monthly    Price Hourly
s-1vcpu-1gb           1024      1        25      5.00             0.007440
s-1vcpu-1gb-amd       1024      1        25      6.00             0.008930
s-1vcpu-1gb-intel     1024      1        25      6.00             0.008930
s-1vcpu-2gb           2048      1        50      10.00            0.014880
s-1vcpu-2gb-amd       2048      1        50      12.00            0.017860
s-1vcpu-2gb-intel     2048      1        50      12.00            0.017860
...

마지막으로 서버 실행에 사용할 이미지를 지정해야합니다. 별도로 저장해둔 이미지가 없다면 --pubilc 옵션을 붙여서 Digital Ocean에서 제공하는 이미지 목록을 확인할 수 있습니다. 기본 리눅스 OS는 물론 Wordpress, Ghost 등 애플리케이션이 설치된 이미지도 제공하고 있습니다.

$ doctl compute image list --public
ID          Name                                                             Type        Distribution    Slug                                         Public    Min Disk
69452245    11.4 zfs x64                                                     snapshot    FreeBSD         freebsd-11-x64-zfs                           true      15
69500386    11.4 ufs x64                                                     snapshot    FreeBSD         freebsd-11-x64-ufs                           true      15
...

이미지가 많기 때문에 grep을 사용해 이미지를 검색하는 것을 추천합니다. 예를 들어 ubuntu가 들어간 이미지를 검색하려면 다음 명령어를 실행합니다. 이때 대소문자를 구분하지 않으려면 grep-i 옵션을 사용합니다.

$ doctl compute image list --public | grep ubuntu
84780478    20.04 (LTS) x64                                                  snapshot    Ubuntu          ubuntu-20-04-x64                             true      15
85779928    18.04 (LTS) x64                                                  snapshot    Ubuntu          ubuntu-18-04-x64                             true      15
85781040    21.04 x64                                                        snapshot    Ubuntu          ubuntu-21-04-x64                             true      15
85785636    20.10 x64                                                        snapshot    Ubuntu          ubuntu-20-10-x64                             true      15

예를 들어 토론토 1번 리전에 우분투에 워드프레스가 설치된 이미지를 1 vcpu, 2GB 메모리 서버로 실행하고 싶다면 다음과 같이 실행합니다.

$ doctl compute droplet create \
  --region tor1 \
  --image wordpress-20-04 \
  --size s-1vcpu-2gb-intel \
  --ssh-keys <SSH_KEY_FINGERPRINT> \
  <DROPLET_NAME>

Ubuntu 서버에 접속하는 방법

doctl compute droplet list 명령어로 앞서 실행한 서버의 상태를 확인해봅니다.

$ doctl compute droplet list
ID           Name         Public IPv4       Private IPv4    Public IPv6    Memory    VCPUs    Disk    Region    Image               VPC UUID                                Status    Tags    Features              Volumes
250231551    lainyzine    178.128.113.62    10.104.0.2                     1024      1        25      sgp1      Ubuntu 21.04 x64    85e7a708-8ce7-43cf-abb4-62a3206fe482    new               private_networking

서버는 ssh 명령어로 접속합니다. 처음 접속하려고 하면 정말 접속할 건지 물어보는데 yes를 입력합니다.

$ ssh root@178.128.113.62
The authenticity of host '178.128.113.62 (178.128.113.62)' can't be established.
ECDSA key fingerprint is SHA256:u3cwoF6nUdVaGgAVZjKBKzpUy99g9adWTR3JceNVcXY.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

...
root@lainyzine:~#

서버에 성공적으로 접속하였습니다.

서버 접속에 실패하는 경우 아래 내용을 참고해보세요.

ssh 명령을 실행해도 반응이 없다면, 아직 서버가 초기화중일 수 있습니다. 조금 더 기다렸다가 다시 접속을 시도해봅니다.

인증에 실패하는 경우 SSH 키가 제대로 등록되지 않았거나, SSH 키가 제대로 셋업되어있지 않을 수 있습니다. 이 경우는 -i 옵션을 사용해 로컬에 있는 개인키의 정확한 위치를 지정해봅니다.

$ ssh -i ~/.ssh/id_ed25519 root@128.199.91.27

서버 삭제하는 방법

사용하지 않는 서버는 꼭 삭제해주세요. 다음 명령어로 서버를 삭제할 수 있습니다. lainyzine 위치에는 서버 이름을 지정해줍니다. 서버 이름을 모른다면 doctl compute droplet list을 실행해서 확인해줍니다.

$ doctl compute droplet delete lainyzine

서버를 삭제하고 doctl compute droplet list를 실행해보면 서버가 없는 것을 확인할 수 있습니다.

$ doctl compute droplet list
ID    Name    Public IPv4    Private IPv4    Public IPv6    Memory    VCPUs    Disk    Region    Image    VPC UUID    Status    Tags    Features    Volumes

추천 문서

LainyZine은 쿠팡 파트너스 활동에 따른 수수료를 제공받습니다.