불과 몇년 전만 해도 호스팅 이라는 것으로 운영체제를 대신 돌려주고 사용하도록 했습니다.
요즘은 클라우드 서버라는 이름으로 더 많은 기능들을 포함하여 떠오르고 있는데요, 대표적으로
AWS
GCP
Azure
가 있습니다.
AWS
와 Azure
도 정말 좋지만 저는 평생 무료를 찾아 해매던 중 GCP
가 제한된 리소스에 한정해서 사용하면 평생 무료로 사용할 수 있다고 합니다!
열심히 만든 자신만의 웹페이지나 서버 프로그램을 24시간 돌려 실제 서비스화 하고 싶은 분들이나
윈도우 환경이 아닌 리눅스 환경에서 개발을 해야하는 분들께 매우 좋은 서비스일 것입니다.
클라우드 서비스는 정말 무궁무진하여 여기서 전부 다룰 수 없고 관심이 있으시면 찾아보시는걸 추천드립니다!
대략적으로 어떻게 진행되고 무엇을 할 수 있는지 알아보도록 하겠습니다.
구글이 공식적으로 알려주는 무료 한정 셋팅을 통해 24시간 구동될 수 있는 가상머신을 만들 것입니다.
운영체제는 Ubuntu 20.04
를 사용할 것입니다.
GCP
의 VM 인스턴스는 기본적으로 인스턴스가 껏다 켜질 때 마다 외부IP가 동적으로 바뀌게 되며 접속하려할 때 마다 새로운 IP로 접속해야하는 번거로움이 있습니다.
외부IP를 정적으로 고정시킬 수는 없나?
가능합니다. 다만, 무료 등급에서 지원하지 않으므로 일정 금액을 매달 지불해야 합니다.
하지만, 도메인을 통해 무료 등급에서 서버에 항상 같은 주소로 접근할 수 있는 방법이 있습니다.
도메인 구매 방법 https://velog.io/@chch1213/build-home-server-5
아니 결국 도메인을 구매하면 모든걸 무료로 하는게 아니지 않냐?
그렇지 않습니다. 일반적으로
.kr
과.com
으로 끝나는 흔히 보던 도메인들은 1년에 만 원정도 지불해야 하지만.cf
와 같이 흔히 볼 수 없는 최상위 도메인주소로는 무료로 가입할 수 있는 곳이 구글링 하다보면 있습니다.자신만의 서버를 가지고 싶지만 절대 돈을 낼 수 없다 하시는 분들을 비인기 도메인을 찾아 가입하시면 되지만
도메인 만큼은.kr
나.com
처럼 의미있는 서버 주소를 하는것을 추천드립니다.
GCP
의 VM 인스턴스는 아이디 비밀번호로 접근하는 것이 불가능 합니다.
따라서 개인키, 공개키 쌍을 만들어 GCP에 저장해두면 VM 인스턴스에 PuTTY와 같은 프로그램으로 아무런 입력없이 원할하게 접근이 가능합니다.
Visual Studio Code
의 Remote - SSH
라는 확장 프로그램을 통해 프로그램을 데스크톱에서 실행되고 있지만 실제 코드들을 GCP
VM 인스턴스에서 수정되고 있는 효과를 볼 수 있습니다.
이렇게 모두 끝나고 나면 NodeJS
, Java Spring boot
, C
, C++
, C#
, Phython
등 여러가지 서비스들을 사용할 수 있고 무엇보다 서버는 항상 24시간 구동되어 있으며 자신이 개발하고 싶을 때 VS Code
만 실행하여 GUI
환경으로 편리하게 개발할 수 있다는 장점이 너무 좋습니다.
우선 아래 링크를 통해 Google Cloud Platform
에 접속하여 무료로 시작하기
를 클릭하고 아래 화면처럼 대시보드 까지 진입해보세요.
중간에 카드정보 입력란이 있었는데 결제 될까봐 너무 염려하지 마시고 입력하세요!
주의
구글 클라우드는 처음 시작하면 30만원 정도의 평가판 크레딧을 주며 6개월동안 사용하게 해줍니다.
이는 구글 클라우드 모든 서비스를 사용할 수 있는 크레딧이므로 아깝다 생각하시면 잘 생각하시고 시작하시길 바랍니다.저는 어짜피 평생 무료 아니면 의미 없다 생각해서 막 이것저것 사용해 보았습니다.
이제 생성할 VM 인스턴스의 성능을 설정할 수 있는데 이 때, 무료 등급에 해당하는 성능을 입력해야 평생 무료로 사용할 수 있습니다.
아래는 GCP
문서 페이지 인데 무료 등급에 대해 나와있습니다.
https://cloud.google.com/free/docs/gcp-free-tier?hl=ko
저희가 중요하게 봐야할 것은
f1-micro
인스턴스 1개/월us-west1
us-central1
us-east1
입니다.
이 자료는 2021년 6월 25일
기준으로 언제든지 달라질 수 있으므로 잘 확인하시길 바랍니다.
이것은 토대로 VM 인스턴스를 생성해봅시다.
이름
리눅스 프롬프트로 보여질 이름입니다.리전
무료 등급으로 사용하려면 3개의 리전중 1개를 택해야 합니다.영역
아무거나 선택해도 됩니다. 무료 등급에 영향을 미치지 않습니다.머신 구성: 시리즈
f1-micro 를 고르기 위해 N1을 선택해야합니다.머신 구성: 머신 유형
f1-micro를 선택하세요. 무료 등급에 해당하는 성능 입니다.부팅 디스크
운영체제의 용량을 최소화 하기위해 Minimal
버전을 선택하였고 무료 등급에 해당하는 HDD
는 표준 영구 디스크를 선택해야 하며 용량은 30GB가 최대입니다.방화벽
웹 개발을 하시는 분들은 HTTP(80)
과 HTTPS(443)
을 기본적으로 사용할 수 있도록 해주기 위해 2개의 체크박스를 선택해주시면 되겠습니다.VPC 네트워크
메뉴의 방화벽
에 들어가시면 설정하실 수 있습니다.생성이 끝나셨다면 아래에 만들기
버튼을 클릭하여 VM 인스턴스를 생성해주세요.
아래와 같이 생성된 것을 볼 수 있습니다.
이제 여러분만의 개인 서버가 만들어졌고 실행되고 있습니다!
Cloudflare
에 가입한 후 사이트 추가
버튼을 눌러줍니다.
자신이 가지고 있는 도메인을 입력해주세요.
저는 호스팅 케이알에서 ygh.kr
이란 도메인을 구매했고 Cloudflare
에 등록했습니다.
요금제 선택은 무료로 하면 됩니다.
클라우드 서버에 연결하여 사용할 서브 도메인들을 입력해줍니다.
우선 이름
란에 @를 넣어 루트 도메인부터 등록합시다.
IP 주소
는 나중에 쉘 스크립트가 알아서 바꿔줄 것이니 아무거나 입력하시면 됩니다.
추가적으로 사용할 도메인을 입력한 후 계속
버튼을 클릭하세요.
이제 도메인을 구입한 사이트에서 자신의 도메인의 네임서버를 Cloudflare
의 네임서버로 지정해줘야합니다.
Cloudflare
의 DNS
탭에서 이름 서버 2개를 복사한 후
자신의 도메인이 있는 사이트에서 해당 도메인의 네임서버를 변경해줍시다.
이제 Cloudflare
의 대시보드로 돌아가서 등록한 도메인이 이름 서버 업데이트가 될 때 까지 기다립니다.
다시 Cloudflare
로 돌아와서 개요
탭에서 아래로 내린 뒤 API 토큰 가져오기
를 클릭하세요.
Global API Key
보기를 클릭하고 Catpcha
로 사람인걸 인증합니다.
아래에 나온 API 키
를 복사 하세요!
조금 이따 DDNS
쉘 스크립트 작성에 필요합니다.
VM 인스턴스로 돌아와서 SSH
연결합니다.
편집기를 설치하고 DDNS
쉘 스크립트를 작성합시다.
sudo apt update && sudo apt install -y vim
아래 내용 중 일부를 변경한 후 전부 복사해서 붙여넣으면 됩니다.
[이메일 주소]
Cloudflare에 회원가입한 이메일 (ex. chchch1213@naver.com
)[복사한 API 키]
아까 복사해 둔 API 키[도메인 주소]
Cloudflare에 등록한 도메인 (ex. ygh.kr
)[서브 도메인 주소]
A 레코드로 등록할 도메인 (ex. ygh.kr,www.ygh.kr
)출처
이 스크립트는 varins.com 에서 인용해 온것입니다.
https://varins.com/library/server/dynamic-dns-cloudflare/
sudo vim /usr/local/etc/ddns.sh
#!/bin/bash
### CloudFlare A Recoard Updater by varins.com
### A_Record : Separate the contents with commas (,)
### Proxied : true or false
### TTL : Between 120 and 2147483647 seconds, or 1 for automatic
### To force updating, run with -f
Login_Email=[이메일 주소]
Global_API_Key=[복사한 API 키]
Domain=[도메인 주소]
A_Record=[서브 도메인 주소]
Proxied=false
TTL=1
### v1.0.9 Published on 17 June 2020
[ ! -f /var/tmp/ip.txt ] && touch /var/tmp/ip.txt
CIP=$(curl -s "https://ipv4.icanhazip.com/")
PIP=$(cat /var/tmp/ip.txt)
echo -e "CloudFlare A Recoard Updater v1.0.9"
echo -e "Current IP: $CIP"
echo -e "Previous IP: $PIP"
if [ "$CIP" == "$PIP" ] && [[ $1 != "-f" ]]; then
echo "No need to update"; exit 0
elif [[ $1 == "-f" ]]; then
echo "Force updating A recoard......"
elif [ "$CIP" != "$PIP" ]; then
echo "Updating A recoard......"
fi
echo $CIP > /var/tmp/ip.txt
V4="https://api.cloudflare.com/client/v4/zones"
H1="-HX-Auth-Email:$Login_Email"
H2="-HX-Auth-Key:$Global_API_Key"
H3="-HContent-Type:application/json"
ZN=$(curl -s -X GET "$V4?name=$Domain" \
$H1 $H2 $H3 | grep -Po '(?<="id":")[^"]*' | head -1)
string=$A_Record
IFS=',' ARARY=(${string})
function AID() {
for AREC in "${ARARY[@]}"
do
(curl -s -X GET "$V4/$ZN/dns_records?name=$AREC" \
$H1 $H2 $H3 | grep -Po '(?<="id":")[^"]*' | head -1)
done
}
IFS=$'\n' AIDARY=($(AID))
ATOTAL=${#ARARY[*]}
for ((i=0; i<$ATOTAL; i++))
do
(curl -s -X PUT "$V4/$ZN/dns_records/${AIDARY[$i]}" $H1 $H2 $H3 \
--data "{\"type\":\"A\",\"name\":\"${ARARY[$i]}\",\"content\":\"$CIP\",\"proxied\":$Proxied,\"ttl\":$TTL}" \
| grep -Po '(?<="name":")[^"]*|(?<="content":")[^"]*|(?<=Z"},)[^}]*|(?<="success":false,)[^$]*|(?<=\s\s)[^$]*' | xargs)
done
vim
으로 접속한 화면에서 Ctrl + V
을 눌러 붙여넣기를 하고 :
키를 누른 뒤 wq
를 입력하고 편집에서 빠져나오면 됩니다.
이제 쉘 스크립트를 실행하여 작동이 되는지 확인합니다.
sudo chmod +x /usr/local/etc/ddns.sh
sudo /usr/local/etc/ddns.sh -f
success:true
멘트가 보이면 정상작동한 것입니다.
만약, 실패하였을 경우 API키를 확인해 본다던지 네임서버를 확인해보는 등 순차적으로 문제가 생긴부분을 찾아보시길 바랍니다.
VM 인스턴스는 종료되었다가 다시 켜질 때 외부 IP
가 변경됩니다.
따라서, 운영체제가 켜졌을 때 최초 한 번 쉘 스크립트를 실행하도록 cron
을 사용해서 등록해보겠습니다.
sudo apt install -y cron
sudo crontab -e
아래 내용을 제일 마지막줄에 입력한 후 마찬가지로 키 :
를 클릭한 후 wq
를 입력해서 빠져나오시면 됩니다.
@reboot /usr/local/etc/ddns.sh
Powershell
이 지원을 하지만 PuTTY keygen을 사용하도록 하겠습니다.
윈도우에서 자신의 홈디렉토리에 .ssh
라는 폴더를 만든 뒤 puttygen.exe
를 다운로드한 후 실행해 주세요.
puttygen.exe 다운로드
아래 경로로 들어가서
Download PuTTY
>puttygen.exe
클릭
https://www.putty.org/
Generate
버튼을 누른 뒤 마우스를 막 움직여 줍니다.
랜덤하게 움직인 마우스 위치를 통해
key
값이 생성됩니다.
만든 개인 키를 저장해 줍니다.
이 때 저장하는 것은 다음에 puttygen.exe
로 불러오기 위함과 putty.exe
에서 사용하는 개인키 입니다.
저장한 이 ppk
확장자의 개인키는 Save private key
버튼 위의 Load
버튼을 눌러서 불러오면 같은 화면을 보실 수 있습니다.
이제 PuTTY
가 아닌 VS Code
, SSHFS
등에 사용되기 위한 OpenSSH
용 개인키를 저장합시다.
따로 확장자를 지정해주지 않고 id_rsa
라는 이름으로 저장합니다.
이제 GCP
에 공개키를 저장해주기 위해 내용을 복사합니다.
GCP
에서 Compute Engine
> 메타데이터
에 들어갑니다.
SSH키
탭에 가서 항목 추가
버튼을 누른 뒤 아까 puttygen.exe
에서 복사한 공개키를 붙여넣습니다.
이 때, puttygen.exe
에서 key comment
로 지정해준 값이 마지막에 보일텐데 자신의 구글 ID와 동일하게 맞춰주셔야 합니다.
이제 자신의 VM 인스턴스에 연결되어 있는 SSH 웹 창을 끝 뒤 다시 연결함으로써 SSH 키를자동으로 전송되도록 해줍시다.
잘 전송 되었는지 아래 명령어로 확인해봅시다.
cat .ssh/authorized_keys
이로써 SSH Key
를 통하여 VM 인스턴스에 접근할 수 있는 환경이 만들어 졌습니다.
설치해주세요.
사용자 이름과 서버 주소를 통해 SSH
연결 명령어를 입력해주세요.
연결 정보에 관한 파일을 저장해두어야 하는데 경로는 Key
파일과 같은 위치인 .ssh
폴더로 지정해줍시다.
폴더+
모양을 눌러서 연결을 해봅시다!
연결할 서버의 지문이 이러이러 한데 연결하고 저장해 둘 것이냐 물어보는 것입니다.
Continue
를 선택해줍니다.
축하합니다! 아래와 같은 화면이 보이신다면 서버와 연결이 정상적으로 끝났고 개발 환경 셋팅이 끝났습니다.
마지막으로 웹서버가 잘 돌아가는지 테스트만 해보도록 하겠습니다.
아래 쪽에 보이는 터미널은 SSH로 연결했을 때 사용하는 터미널과 동일하게 사용 가능합니다.
웹서버인 nginx
를 설치하고 상태를 확인한 뒤 http://[도메인 주소]
로 접속해보면 잘 접속 된 것을 확인할 수 있습니다.
sudo apt install -y nginx
systemctl status nginx
gcc
, g++
, gdb
를 이용해서 C
나 C++
도 개발할 수 있고
Docker
확장을 설치하여 보다 편리하게 도커 이미지와 컨테이너를 제작할 수 있습니다.
NodeJs
, Npm
, pm2
, reactJs
, VueJs
등등 정말 많은 편리할 기능들이 있기 때문에 최고의 IDE VS Code
와 함께 코딩하여 실력을 쌓아가 봅시다!
여기까지 따라오느라 정말 수고 많으셨습니다!
이제 자신만의 멋진 서버를 만들어보세요
:)
좋은 글 감사합니다!