사이드 프로젝트를 Netlify 로 배포하고 운영하다보니, (nuxt 프로젝트)
블로그나 홈페이지 같은 정적 사이트가 아니라서 발생하는 문제가 있었습니다.
target을 server로 하고 배포하고 있어서 nuxt의 dynamic directory를 잡지 못하고 404로 반환하는 것이 가장 큰 문제였습니다.
이로인해 가장 중요한 홍보 수단이었던 카카오톡에서 og 태그들을 인식하지 못해
사용자들이 불편함을 겪을 것 같아 서버 이전을 고민했고, 런칭 초기인 지금 빨리 이전하는 게 맞겠다는 판단이 들었습니다.
오라클 클라우드에 인스턴스를 생성하여 NGINX로 웹서버를 구축하고 Docker로 프로젝트를 띄운 과정을 기록으로 남겨보았습니다. (+https 연결 과정도 남겨두었습니다.)
계정 생성
무료 클라우드 이용할 수 있는 곳들 중 오라클 클라우드를추천 받아서 사용해 보았습니다.
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
'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 |
사이드 프로젝트를 Netlify 로 배포하고 운영하다보니, (nuxt 프로젝트)
블로그나 홈페이지 같은 정적 사이트가 아니라서 발생하는 문제가 있었습니다.
target을 server로 하고 배포하고 있어서 nuxt의 dynamic directory를 잡지 못하고 404로 반환하는 것이 가장 큰 문제였습니다.
이로인해 가장 중요한 홍보 수단이었던 카카오톡에서 og 태그들을 인식하지 못해
사용자들이 불편함을 겪을 것 같아 서버 이전을 고민했고, 런칭 초기인 지금 빨리 이전하는 게 맞겠다는 판단이 들었습니다.
오라클 클라우드에 인스턴스를 생성하여 NGINX로 웹서버를 구축하고 Docker로 프로젝트를 띄운 과정을 기록으로 남겨보았습니다. (+https 연결 과정도 남겨두었습니다.)
계정 생성
무료 클라우드 이용할 수 있는 곳들 중 오라클 클라우드를추천 받아서 사용해 보았습니다.
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
'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 |