Server

oracle cloud 서버 사용기 - 계정 생성 | 인스턴스 생성 | NGINX 설치 | Docker 설치 | HTTPS 인증서 발급 및 연결

2022. 12. 21. 14:20
목차
  1. 계정 생성
  2. 인스턴스 생성
  3. 인스턴스 ssh 접속
  4. SWAP 설정
  5. Docker 설치
  6. NGINX 설치
  7. HTTPS 연결
728x90

사이드 프로젝트를 Netlify 로 배포하고 운영하다보니, (nuxt 프로젝트)

블로그나 홈페이지 같은 정적 사이트가 아니라서 발생하는 문제가 있었습니다.

 

target을 server로 하고 배포하고 있어서 nuxt의 dynamic directory를 잡지 못하고 404로 반환하는 것이 가장 큰 문제였습니다.

이로인해 가장 중요한 홍보 수단이었던 카카오톡에서 og 태그들을 인식하지 못해

사용자들이 불편함을 겪을 것 같아 서버 이전을 고민했고, 런칭 초기인 지금 빨리 이전하는 게 맞겠다는 판단이 들었습니다.

 

오라클 클라우드에 인스턴스를 생성하여 NGINX로 웹서버를 구축하고 Docker로 프로젝트를 띄운 과정을 기록으로 남겨보았습니다. (+https 연결 과정도 남겨두었습니다.)

 

계정 생성

https://cloud.oracle.com/

 

무료 클라우드 이용할 수 있는 곳들 중 오라클 클라우드를추천 받아서 사용해 보았습니다.

EC2 생성 및 배포 경험이 있어서 비슷한 플로우로 사용할 수 있었습니다.

 

계정 생성을 하고 카드 등록을 해주면 되는데,

시키는 대로 하면 금방 마칠 수 있었습니다.

비자 카드로 해야 에러 안 난다고 다른 블로그에서 그랬는데 나는 비자 카드로 했을 때 에러가 나서

마스터 카드로 등록을 했습니다.

 

영어로 등록하는 게 좋다고 해서 영어로 등록했고,

집주소는 네이버 '영문주소'에서 찾아서 적었습니다.

 

영문주소 : 네이버 통합검색

'영문주소'의 네이버 통합검색 결과입니다.

search.naver.com

 

계정 생성에 성공하면 친절하게 튜토리얼 간단히 알려주는데 저는 그런 튜토리얼들은 다 읽어보는 스타일이라서 다 읽은 후,

바로 인스턴스 하나 생성해 보았습니다.

 

인스턴스 생성

무료로 생성 가능한 버전으로 설정이 되어있었고,

해당페이지에서 바로 서브넷과 VCN을 생성할 수 있어서 인스턴스 만들기도 금방할 수 있었습니다.

이 때 private key를 다운로드를 받아주어야 합니다.

 

인스턴스 ssh 접속

생성된 인스턴스의 디테일에 들어가면 public ip와 username이 있습니다.

키를 다운로드 받은 곳에 터미널을 위치시키고

ssh -i *.key username@123.123.123 (예시) 로 접속할 수 있었습니다.

 

인스턴스 디테일을 확인해보니 username은 opc였습니다.

 

 


무언가 설치하고 또 설치하고 그러는 과정 중에 꼬여서 그런지 제대로 안되는 상황이 발생해서 두번 정도 새로 인스턴스를 만들었습니다.😭

최종적으로 제대로 성공했던 순서대로 과정을 적어보았습니다.

 

인스턴스를 생성하고, (생성은 기본 설정되어 있는 무료 버전으로 생성, oracle linux 8) 가장 먼저 한 일은 yum update이었습니다.

(시간이 꽤 오래 걸리므로 가장 먼저 시작!)

sudo yum update

 

SWAP 설정

참고한 블로그를 살펴보니, 1GB 의 RAM이 부족할 수 있어 아래의 명령어를 통해 늘려주는 작업을 하면 좋다고 했습니다.

sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

서버를 재시작하여도 설정 값이 유지되도록 아래 파일에도 추가로 적어줄 것이 있었습니다.

sudo nano /etc/fstab
# 제일 하단에 이걸 추가하면 됩니다.

/swapfile swap swap defaults 0 0

nano라는 에디터는 이번에 처음 써 보았는데 맥 기준 ^O를 누르고 엔터를 치면 빠져나올 수 있었습니다 (vim의 :wq)

 

free -h 명령어로 설정 값이 잘 변했는지 확인할 수 있습니다.

 

 

Docker 설치

생각보다 도커 설치가 꽤 까다로웠던 기억이 나네요.

여러 자료를 찾고 시도해 보았는데 실패를 해서 ㅠㅠ 이 자료를 보고 설치에 성공했습니다.

 

아래의 명령어로 도커를 설치

sudo dnf install -y dnf-utils zip unzip
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf remove -y runc
sudo dnf install -y docker-ce --nobest

 

아래의 명령어로 도커를 시작

sudo systemctl enable docker.service
sudo systemctl start docker.service

 

도커 허브에 올린 프로젝트를 pull받고 run 하여 실행했습니다.

 

NGINX 설치

nginx 설치는 이 자료를 참고했습니다.

sudo dnf install -y nginx
sudo systemctl enable --now nginx.service
sudo systemctl status nginx

 

nginx 설정은 간단하게 

/etc/nginx.conf를 변경하여 사용했습니다.

server 80에 location을 http://127.0.0.1:3000으로 해놓고 실행하면 프로젝트 실행이 잘 되는 것을 확인할 수 있었습니다.

(저의 경우 nuxt 프로젝트를 도커에 run 한 상황이었습니다.)

 

++ 퍼블릭 ip로 제대로 연결 되었는지 확인하기 전에 서브넷에서 80번, 443번 포트를 열어주었습니다.

oracle cloud 인스턴스 상세 > 생성한 서브넷 클릭 > Security Lists에 있는 요소 클릭 > Add Ingress Rules로 세 번째 사진 처럼 작성

 

아래의 명령어로 80번 포트를 오픈해줍니다.

// 방화벽 오픈
firewall-cmd --zone=public --add-port=80/tcp --permanent

// 방화벽 재시작
firewall-cmd --reload

 

 

 

HTTPS 연결

배포를 위해 무료 도메인 생성 사이트인 내도메인.한국 에서 도메인을 등록하고,

도메인 수정 > [IP연결(A)] 에 인스턴스 퍼블릭 ip를 적어주었습니다.

 

그 다음은 certbot으로 LetsEncrypts로 무료 ssl 인증서를 발급해주었습니다.

위의 과정들로 퍼블릭 ip, 도메인이 준비되었습니다.

 

시작 전, 서버에서 아래의 명령어로 443 포트를 오픈해줍니다.

// 방화벽 오픈
firewall-cmd --zone=public --add-port=443/tcp --permanent

// 방화벽 재시작
firewall-cmd --reload

 

아래의 명령어로 Snap 설치를 진행합니다.

sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

sudo yum install snapd
sudo systemctl enable snapd

sudo ln -s /var/lib/snapd/snap /snap
sudo systemctl start snapd

sudo snap install core; sudo snap refresh core

 

아래의 명령어로 Certbot을 설치하고 인증서를 발급받습니다.

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

certbot --version
sudo certbot certonly --nginx -d example.com

약관 동의에 Y를 해주고,

이메일을 물어보는데 이메일 적어주고 광고 수신 동의 에는 N을 해주었습니다.

 

인증서 발급이 성공적으로 되면

nginx.conf를 수정해줍니다.

server {
  listen 80;
  server_name example.com;
  
  location / {
    return 301 https://$host$request_uri;
  }
}

server {
    listen       443 ssl;
    server_name  example.com;

    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / { 
        proxy_pass         http://127.0.0.1:3000;
        proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
    }
}

 

 

 

 

 

참고한 자료들

 

https://blog.ny64.kr/posts/oracle-cloud-swap-setup-and-nginx-installation/

https://oracle-base.com/articles/linux/docker-install-docker-on-oracle-linux-ol8

https://docs.oracle.com/en/learn/oracle-linux-nginx/#create-a-custom-nginx-configuration

https://bitgadak.tistory.com/6

728x90

'Server' 카테고리의 다른 글

[nginx] 설치 후 실행이 안될 때 / https 인증서 연결 거부할 때  (0) 2022.12.23
[ERROR] connect() to 127.0.0.1:3000 failed (13: Permission denied) while connecting to upstream 에러  (0) 2022.12.22
[Docker] Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?  (0) 2022.08.30
[AWS] EC2 템플릿, 스냅샷  (0) 2022.08.25
[AWS] 탄력적 IP 주소 삭제  (0) 2022.08.25
  1. 계정 생성
  2. 인스턴스 생성
  3. 인스턴스 ssh 접속
  4. SWAP 설정
  5. Docker 설치
  6. NGINX 설치
  7. HTTPS 연결
'Server' 카테고리의 다른 글
  • [nginx] 설치 후 실행이 안될 때 / https 인증서 연결 거부할 때
  • [ERROR] connect() to 127.0.0.1:3000 failed (13: Permission denied) while connecting to upstream 에러
  • [Docker] Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
  • [AWS] EC2 템플릿, 스냅샷
mean-ji
mean-ji
mean-ji
저년차 기록들
mean-ji
전체
오늘
어제
  • 분류 전체보기 (104)
    • 소개 (1)
    • Server (25)
      • DevOps (9)
      • Database (4)
    • Spring (11)
    • Spring Boot (0)
    • Java (6)
    • Kotlin (3)
    • Vue.js (12)
      • Nuxt (12)
    • Node.js (3)
      • Express (2)
    • Python (9)
      • Flask (2)
    • Git (9)
    • IDE & Tool (4)
    • TIL (16)
    • 생각 (2)
    • 토스 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

hELLO · Designed By 정상우.
mean-ji
oracle cloud 서버 사용기 - 계정 생성 | 인스턴스 생성 | NGINX 설치 | Docker 설치 | HTTPS 인증서 발급 및 연결
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.