three.js 를 사용하여 만든 야추 다이스를 나만의 도메인에 배포해보고 싶었다.
그래서 일단 인스턴스를 만들고 Domain 구매를 진행하였다.
고정 IP 이다. 뭐 로드 밸런서를 사용하면 해당 ELB 의 고유 IP 를 가지고 사용하니 상관없지만 나는 개인 프로젝트를 하나하나 올리는 용도로 사용하고 서브 도메인 별로 인스턴스를 부여하니 고정 IP 가 필요했다.
여기서 AWS 의 굉장함 섬세함을 느꼈다. Oracle Cloud 는 굉장히 불편했기 때문이다..
참고로 Elastic IP 를 부여받고 사용하지 않으면 패널티 형태로 과금을 부여한다고 한다. 계정 당 총 5 개까지는 공짜다.
따라서 기본으로 설정이 되어있을 텐데 만약 인스턴스 삭제 후 고정 IP 가 살아있는지 확인해주면 좋다.
아래 명령어들을 실행하여 설치 후 정상 구동 확인 후 sites-enabled
폴더로 넘어간 다음 conf 파일을 수정하면 된다.
apt install nginx
nginx -v
sudo service nginx status
cd etc/nginx/sites-enabled
nano default
server {
listen 80;
listen [::]:80;
# server_name my-project.sbcode.net; 추후 도메인 구입 후 활성화
root /var/www/<my-project>;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
service nginx restart
내 이름으로 도메인을 하나 구매하였다. 후보군들은 여러 개 있었다.
현재는 포폴용으로 운용할 계획이라 가장 중요시 여긴 것은 가격적인 측면을 가장 중요하게 봤다. 그리고 가장 싼 홈페이지는 Namecheap 이었다. 여기는 부가서비스까지 해서 1년에 2만 2천원 이었다. 그래서 NameCheap 으로 진행하였다.
그래서 구매 후 A Record
를 등록하여 Host 에는 서브 도메인을, Value 에는 본인의 인스턴스의 공인 IP 를 집어넣으면 된다.
DNS 설정에서 사용할 수 있는 여러 레코드 유형이 있다
DNS 설정 변경 후, 전 세계의 DNS 서버에 변경 사항이 반영되기까지 최대 24~48시간이 걸릴 수 있다.
이를 DNS Propagation이라고 한다.
그리고 이를 확인하는 방법이 있는데
nslookup myapp.example.com
https://dnschecker.org 에 들어가서 아래 처럼 확인해보면 된다.
DNS 레코드가 캐시되는 시간이다.
일반적으로 300초(5분)~86400초(1일)로 설정한다.
공인 IP 주소가 동적으로 변경될 경우 이를 자동으로 업데이트하는 서비스이다.
이거면 앞서 Elastic IP 를 사용할 필요가 없다.
여러 A 레코드(IP)를 등록해 트래픽을 분산하는 방법이다.
앞서 언급했듯 대표적으로 AWS 의 ELB 서비스가 있다.
이제 인스턴스에 DIST 파일을 전송해보자. 앞서 포스팅한 smb 나 sftp 를 사용하여 터미널로 데이터를 옮겨도 되지만 GUI 를 통해서 편하게 옮길 수 있도록 하자.
이때, nginx 에 작업한다면 root 에 작업해야해서 권한문제가 발생할 수 있다.
이때 간편한 방법으로는 2 가지가 있다.
만약 프로젝트 하나만 올릴 시에는 홈 디렉토리에 올린 후 명령어를 통해 이동시키면 된다.
sudo mv /home/ubuntu/dist/* /var/www/<ur-project-name>
sudo chmod -R 775 /var/www/<ur-project-name>
sudo chown -R ubuntu:ubuntu /var/www/<ur-project-name>
이제 마지막으로 를 등록하여 접속 후 certbot 에서 하라는 대로 하면 된다.
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
설치한 certbot 에 ln
으로 링크를 생성하는데 -s
옵션으로 심볼릭 링크를 생성하는 명령어이다.
sudo certbot --nginx
그럼 최종적으로 아래 사진 처럼 잘 설치가 된다.
macOS와 Linux에서는 기본적으로 OpenSSH 클라이언트를 사용하여 .ppk
파일을 pem
파일로 변환한 뒤 접속해야한다.
PuTTYgen
이 필요하다. (macOS/Linux에서는 putty-tools 패키지를 설치해야 할 수도 있음.)
puttygen my-key.ppk -O private-openssh -o my-key.pem
이렇게 하면 my-key.pem 파일이 생성되는데 이를 권한을 제한해야한다.
chmod 400 my-key.pem
그리고 이 키를 가지고 접근하면 된다.
ssh -i "my-key.pem" ec2-user@<Public_IP>