kangjeongwoo.com

강정우·3일 전
0

네트워크

목록 보기
33/33
post-thumbnail

kangjeongwoo.com

three.js 를 사용하여 만든 야추 다이스를 나만의 도메인에 배포해보고 싶었다.
그래서 일단 인스턴스를 만들고 Domain 구매를 진행하였다.

1. 인스턴스 설정 (Elastic IP)

고정 IP 이다. 뭐 로드 밸런서를 사용하면 해당 ELB 의 고유 IP 를 가지고 사용하니 상관없지만 나는 개인 프로젝트를 하나하나 올리는 용도로 사용하고 서브 도메인 별로 인스턴스를 부여하니 고정 IP 가 필요했다.

여기서 AWS 의 굉장함 섬세함을 느꼈다. Oracle Cloud 는 굉장히 불편했기 때문이다..

참고로 Elastic IP 를 부여받고 사용하지 않으면 패널티 형태로 과금을 부여한다고 한다. 계정 당 총 5 개까지는 공짜다.
따라서 기본으로 설정이 되어있을 텐데 만약 인스턴스 삭제 후 고정 IP 가 살아있는지 확인해주면 좋다.

nginx 파일 수정

아래 명령어들을 실행하여 설치 후 정상 구동 확인 후 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

2. Domain 구매

내 이름으로 도메인을 하나 구매하였다. 후보군들은 여러 개 있었다.

1. GoDaddy

  • 가격대: .com 도메인 연간 약 20,000원.
  • 장점:
    다양한 도메인 확장자 제공 (.com, .net, .org 등)
    사용자 친화적인 인터페이스
    다양한 부가 서비스 (호스팅, 이메일 등)
  • 단점:
    갱신 비용이 초기에 비해 높음 (최초 2만원 이었다가 갱신할 때 4만원이 넘음)

2. Namecheap

  • 가격대: .com 도메인 연간 약 15,000원.
  • 장점:
    저렴한 가격
    무료 WHOIS 보호 서비스 제공
    사용자 친화적인 대시보드
  • 단점:
    특정 도메인 확장자는 가격이 비쌈 근데 어차피 안 씀

3. Bluehost

  • 가격대: .com 도메인 연간 약 15,000원
  • 장점:
    호스팅과 도메인을 함께 구매할 수 있어 편리함
    24/7 고객 지원
  • 단점:
    단독 도메인 구매 시 가격이 다소 비쌈
    초보자에게는 복잡할 수 있음

현재는 포폴용으로 운용할 계획이라 가장 중요시 여긴 것은 가격적인 측면을 가장 중요하게 봤다. 그리고 가장 싼 홈페이지는 Namecheap 이었다. 여기는 부가서비스까지 해서 1년에 2만 2천원 이었다. 그래서 NameCheap 으로 진행하였다.


그래서 구매 후 A Record 를 등록하여 Host 에는 서브 도메인을, Value 에는 본인의 인스턴스의 공인 IP 를 집어넣으면 된다.

DNS 레코드의 종류

DNS 설정에서 사용할 수 있는 여러 레코드 유형이 있다

1) A Record (Address Record)

  • 역할: 도메인 또는 서브도메인을 IPv4 주소로 연결.
  • 형식: subdomain.example.com → 192.168.1.1
  • 사용 예: EC2 인스턴스의 공인 IP를 등록할 때 사용.

2) AAAA Record

  • 역할: 도메인 또는 서브도메인을 IPv6 주소로 연결.
  • 형식: subdomain.example.com → 2001:0db8:85a3:0000:0000:8a2e:0370:7334
  • 사용 예: EC2가 IPv6 주소를 사용하는 경우.

3) CNAME Record (Canonical Name Record)

  • 역할: 도메인을 다른 도메인으로 연결 (별칭).
  • 형식: www.example.com → example.com
  • 사용 예: 도메인을 다른 도메인의 A 레코드로 포워딩.

4) MX Record (Mail Exchange Record)

  • 역할: 이메일 서버를 지정.
  • 형식: example.com → mail.google.com (우선순위 값 포함).
  • 사용 예: 이메일 서비스를 설정할 때 필요.

5) TXT Record

  • 역할: 텍스트 데이터를 저장(인증, 설명 등).
  • 형식: example.com → "v=spf1 include:_spf.google.com ~all"
  • 사용 예: 도메인 인증(SPF, DKIM) 및 보안 설정.

6) NS Record (Name Server Record)

  • 역할: 도메인의 네임 서버를 지정.
  • 형식: example.com → ns1.exampledns.com
  • 사용 예: 도메인이 어느 DNS 서버에서 관리되는지 설정.

7) PTR Record (Pointer Record)

  • 역할: IP 주소를 도메인으로 매핑(역방향 DNS).
  • 사용 예: IP 주소를 기반으로 서버의 도메인 이름을 확인.

8) SRV Record

  • 역할: 특정 서비스(예: VoIP, 게임 서버)를 제공하는 호스트를 지정.
  • 사용 예: Microsoft 365, SIP 설정 등.

DNS Propagation

DNS 설정 변경 후, 전 세계의 DNS 서버에 변경 사항이 반영되기까지 최대 24~48시간이 걸릴 수 있다.
이를 DNS Propagation이라고 한다.
그리고 이를 확인하는 방법이 있는데

1. 터미널로 확인

nslookup myapp.example.com

2. 온라인 DNS Propagation 검사 도구로 확인

https://dnschecker.org 에 들어가서 아래 처럼 확인해보면 된다.

TTL (Time to Live)

DNS 레코드가 캐시되는 시간이다.
일반적으로 300초(5분)~86400초(1일)로 설정한다.

Dynamic DNS (DDNS)

공인 IP 주소가 동적으로 변경될 경우 이를 자동으로 업데이트하는 서비스이다.
이거면 앞서 Elastic IP 를 사용할 필요가 없다.

Load Balancing:

여러 A 레코드(IP)를 등록해 트래픽을 분산하는 방법이다.
앞서 언급했듯 대표적으로 AWS 의 ELB 서비스가 있다.

3. WinSCP 로 zip 데이터 전송

이제 인스턴스에 DIST 파일을 전송해보자. 앞서 포스팅한 smb 나 sftp 를 사용하여 터미널로 데이터를 옮겨도 되지만 GUI 를 통해서 편하게 옮길 수 있도록 하자.

이때, nginx 에 작업한다면 root 에 작업해야해서 권한문제가 발생할 수 있다.
이때 간편한 방법으로는 2 가지가 있다.

1. 홈 디렉토리에 올리고 옮기기 (단기적)

만약 프로젝트 하나만 올릴 시에는 홈 디렉토리에 올린 후 명령어를 통해 이동시키면 된다.

sudo mv /home/ubuntu/dist/* /var/www/<ur-project-name>

2. 해당 디렉토리에 쓰기 권한 추가하기 (장기적)

sudo chmod -R 775 /var/www/<ur-project-name>
sudo chown -R ubuntu:ubuntu /var/www/<ur-project-name>

4. Add SSL

이제 마지막으로 를 등록하여 접속 후 certbot 에서 하라는 대로 하면 된다.

1. Certbot 설치

sudo snap install --classic certbot

2. certbot 명령어 링크 생성

sudo ln -s /snap/bin/certbot /usr/bin/certbot

설치한 certbot 에 ln 으로 링크를 생성하는데 -s 옵션으로 심볼릭 링크를 생성하는 명령어이다.

3. certificates 인증과 설치를 하는 명령어

sudo certbot --nginx
  1. 첫번째 질문은 약관 동의 => y
  2. 그럼 이메일을 입력 후
  3. 두번째 질문은 certbot 사내에 알람을 받겠냐는 질문 => n

그럼 최종적으로 아래 사진 처럼 잘 설치가 된다.

5. 인스턴스 접속 Mac 일 경우

macOS와 Linux에서는 기본적으로 OpenSSH 클라이언트를 사용하여 .ppk 파일을 pem 파일로 변환한 뒤 접속해야한다.

1. 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>

https://yatch-dice.kangjeongwoo.com/

profile
智(지)! 德(덕)! 體(체)!

0개의 댓글