관리 메뉴

나의 개발일지(김지헌)

네이버 클라우드 server, Object Storage, global dns ,cdn+ 사용 해보기 본문

공부

네이버 클라우드 server, Object Storage, global dns ,cdn+ 사용 해보기

코딩이좋아요 2023. 5. 24. 10:45

네이버 클라우드 플랫폼은 도메인 구매 대행 서비스를 하지 않기 때문에 도메인 구입먼저 시작하기

vpc와 classic있는데 classic으로 진행 한다.

1. 도메인 구매 및 글로버DNS 적용

1. 도메인 구매( ex. 가비아, route53 등 도메인을 구매한다)

2. 네이버클라우드 플랫폼 로그인 후 콘솔에 접속 한다

3. 접속해서 services 탭에서 global DNS 검색 후 접속 한다.

4. 접속 후 도메인 추가 버튼 클릭 -> 이름에 구매한 도메인을 적고 추가 버튼 클릭

5. 완료 되면 위와 같은 화면이 뜰꺼고 master Ns가 네임 서버이며 도메인 구매한 사이트에 접속해서 네임서버를 바꿔주면

도메인 설정이 완료 된다. (ex. ns1-1.ns-ncloud.com ns1-2.ns-ncloud.com)

 

2. 오브젝트 스토리지 등록

1. services 탭에서 Object Storage 검색 후 접속

2.  버킷 생성 클릭 -> 버킷 이름 설정 ->  설정 및 암호화 관리 -> 권한 관리 ->  최종 확인 후 생성 하면 된다.

3. 정상 적으로 완료 했으면 index.html 파일 업로드 할 때 권한 및 메타 데이터 설정 클릭, 공개 클릭 후 업로드 진행

3.1 정적 웹 사이트 호스팅 설정 버튼 활성화

4.  활성화 후 버킷에 업로드 한 index.html 파일을 설정 후 확인 버튼을 누르면 엔드포인트가 정상적으로 뜨고 접속시 정상 작동 할 꺼다.

 

3. 서버 생성

1. 콘솔에서 서비스에 server 검색 후 접속 후 서버 생성 클릭

2.원하는 설정 선택 후  다음(ubuntu로 진행 할려고 한다)

3. 원하는 서버 타입과 서버 이름 등록 후 다음 -> 인증키 생성

4. 신규 ACG 생성 버튼 클릭 후 -> 아래 처럼 등록 한다. 최종 검토 후 생성 

5. 서버가 생성 완료 하면 공인IP를 설정 해야 외부에서 접속이 가능하다. server탭에서 public IP 선택 후 적용서버에서 방금 생성한 서버 클릭 후 최종 확인 하면 된다.

6. gitbash나 puppy로 접속할려면 관리자 비밀번호가 필요하다. 생성한 서버 클릭 -> 서버 관리 및 설정 변경 에서 관리자 비밀 번호 확인 클릭 ->  발급 받은 인증키를 업로드 하면 비밀번호를 알 수 있다-> 서버로 접속 할 때 필요한 pw이다. 

 

7. 그 후 global DNS 접속 후 레코드 추가 버튼 클릭 ->  아래와 같이 선택 후 레코드 값에는 퍼블릭 IP를 적고 추가 클릭->

설정 적용 버튼 클릭 해야 배포가 완료 된다.

 

3. cdn+ 

1.콘솔 접속 후 service탭에서 cdn+ 검색 후 접속 후 cdn 신청 클릭

2. 이름 작성 -> https 선택

3. 원본 위치에 전에 생성한 버킷을 선택 한다 -> 나머지 옵션들 설정 해주고 생성

4. 생성 완료 후 cdn+서비스도메인/index.html 입력 하면  https로 접속 된다.

 

4. nginx로 ssl 적용 및 서비스 리다이렉션 적용

1.

nginx 설치

[NginX 설치]
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install nginx

[Nginx 버전 확인]
sudo dpkg -l nginx

[nginx 시작 및 자동 실행]
sudo service ngnix start
sudo systemctl start nginx

[Nginx 상태 확인]
sudo systemctl status nginx

[Config 테스트] 
sudo nginx -t

--------- 경로 바꾸기 ㅍㅐ스 해두됨---------
[nginx proxy_pass 설정하기]
cd /etc/nginx/sites-available/

[default 파일 확인]
ls -al -리스트 형식

[default 파일 수정]
vi default
or
sudo nano default

[location 이하 정보 수정 예시]
[location은 specific uri 에 대한 behavior를 정의하며 server 내부에 작성합니다.]
[proxy_pass는 현재 서버에 / 로 시작하는 path로 접근하면, 
http://127.0.0.1:8000;으로 돌려준다는 의미
그러면 실제 사용자는 8000 접근하지 않았지만 8080 포트에 접근한 것과 동일한 효과가 발생한다.
즉 uri1로 시작하는 요청을 3000으로 보내는 것]

location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;
}

location /api(요청들어오는 url정보) {
    proxy_pass http://127.0.0.1:3000;
    proxy_read_timeout 600;
}

[재부팅 할때도 설정 유지]
sudo apt update && sudo apt upgrade

[Nginx 재시작]
sudo service nginx restart
OR
sudo systemctl reload nginx
--------- 경로 바꾸기 ㅍㅐ스 해두됨---------

설정 한 후 접속 하면 nginx 가 표시 되면 정상 작동 되는거다.

2. cerbot 설치

sudo apt update
sudo apt install certbot

[인증서 발급]
sudo certbot certonly --nginx -d <your-domain>

------
[인증서 발급 에러시]
[Error- Saving debug log to /var/log/letsencrypt/letsencrypt.log
Could not choose appropriate plugin: The requested nginx plugin does not appear to be installed
The requested nginx plugin does not appear to be installed]

sudo apt-get update
sudo apt-get install python3-certbot-nginx

[설치 후 다시 인증서 발급 진행]
sudo certbot certonly --nginx -d <your-domain>
------


[sites-available에 구성 파일 생성]
sudo nano /etc/nginx/sites-available/<your-domain>

[<your-domain>]

server {
    listen 80;
    server_name <your-domain>;
	#도메인 접속시 https로 리다이렉션 시키겠다.
    return 301 https://<your-domain>$request_uri;
}

server {
    listen 443 ssl;
    server_name <your-domain>;

    ssl_certificate /etc/letsencrypt/live/<your-domain>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<your-domain>/privkey.pem;

    location / {
        proxy_pass http://네이버버킷.s3-website.kr.object.ncloudstorage.com;
        proxy_read_timeout 600;
    }
    location /api {
      proxy_pass http://127.0.0.1:3000;
       proxy_read_timeout 600;
    }
}

[저장 후 종료]

[enabled폴더에 도메인구성파일 심볼 생성]
sudo ln -s /etc/nginx/sites-available/<your-domain /etc/nginx/sites-enabled/<your-domain>

[nginx 설정 테스트]
nginx -t

[정상시 메세지]
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

[nginx 재시작]
sudo service nginx restart

3. cron 작업으로 자동갱신 

[crontab 접속]
sudo crontab -e

[crontab]
0 0 */90 * * certbot renew --nginx --quiet  ***90일 마다 자동 갱신 수행(출력제거)

0 0 */90 * * certbot renew --nginx    ***90일 마다 자동 갱신 수행(출력표시)


[갱신 테스트]
sudo certbot renew --dry-run  ***실제로 갱신은 되지 않음

이슈 : 

1 : 오브젝트스토리지 정적 웹호스팅 엔드포인트(또는 cdn+서비스 도메인)를 global dns에 레코드 추가 후 설정한 도메    인 으로 접속시 엔드포인트로 리다이렉션 적용 안됨.(추가적으로 도메인/index.html로 적어야 정상 작동)

1.2 : 해결방법 -  서버에서 nginx를 이용해서 도메인 접속시  해당 경로(버킷앤드포인트 or cdn+서비스도메인)로 리다이  렉션 적용

**네이버 클라우드 플랫폼은 지정 도메인으로 리다이렉트 되지않는다.

2 : cdn+서비스도메인으로 리다이렉션 할 시 도메인이름으로 표시 안되고 cdn+주소가 입력 되는 이슈

2.1 : 해결방법 - 버킷의 앤드포인트로 이동 시켜서 접속 하게 했다.

 

3 : 도메인 접속시 https로 이동안하고 http로 접속 되는 점 

3.1 : sites-available/default에서 설정은 했지만 sites-enabled에 심볼을 추가해야 정삭 작동 된다.

[sites-available에 구성 파일 생성]
sudo nano /etc/nginx/sites-available/<your-domain>

[<your-domain>]

server {
	#http
    listen 80;
    server_name <your-domain>;

    return 301 https://<your-domain>$request_uri;
}

server {
	#https
    listen 443 ssl;
    server_name dd-lms.com;

    ssl_certificate /etc/letsencrypt/live/<your-domain>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<your-domain>/privkey.pem;

    location / {
        proxy_pass http://네이버버킷.s3-website.kr.object.ncloudstorage.com;
        proxy_read_timeout 600;
    }
    location /api {
      proxy_pass http://127.0.0.1:3000;
       proxy_read_timeout 600;
    }
}

[저장 후 종료]
[enabled폴더에 도메인구성파일 심볼 생성]
sudo ln -s /etc/nginx/sites-available/<your-domain /etc/nginx/sites-enabled/<your-domain>

[nginx 구성 테스트]

nginx -t

[정상시 메세지]
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

[nginx 재시작]
sudo service nginx restart

이후 도메인에 접속 http://your_domain 으로 접속해도 https://your_domain으로 이동하는걸 볼 수 있다.