Mac에서는 Terminal을 사용해서 SSH에 접속할 수 있습니다.
접속 방법은 다음과 같습니다.
VM인스턴스를 생성할 때 다운받았던 SSH키 파일이 있는곳으로 cd명령어를 사용하여 이동합니다.
ex)
cd Documents/ssh-key
SSH 접속 명령어를 사용합니다.
ssh -i [SSH Private Key 파일] [접속 서버 USER ID]@[설정한 Public IP]
SSH키 권한 설정
2번 명령어를 실행하면 사진과 같은 오류가 발생할 겁니다. 오류 해결을 위해서 키 파일의 권한을 수정해야 합니다.

chmod 400 ./[SSH키 파일.key]
SSH키 수정 이유
- SSH private key는 사용자 인증 정보를 담고 있는 중요한 파일이기 때문에 권한을 400으로 설정해서 파일의 소유자만 읽을 수 있게 권한을 수정하는 것입니다.
수정 후 SSH접속

key파일 권한을 수정 후 정상적으로 SSH접속 하는 것을 볼 수 있습니다.
두 번째 방법은 Termius를 사용해서 SSH에 접속합니다.
KeyChain 설정

Import from key file를 통해서 다운 받았던 .key파일을 선택해 주면 됩니다.
Hosts 설정

Keychain 등록을 맞췄으면 Hosts로 돌아와create host를 클릭해 SSH에 접속할 정보를 입력해 줍니다.

Address : 퍼블릭 IP 주소
Username : 오라클 인스턴스 정보 참조

key : Keychain에서 등록한 키를 사용합니다.
SSH 접속
Connect를 눌러 정상적으로 접속되는지 확인합니다.

Spring boot + React를 사용해 개발한 프로젝트를 배포하기 위해 필요한 것들을 설치합니다.
설치해야 할 것
- openJDK 11
- Nginx (웹 서버)
- npm
- nodejs
- git
Ubuntu를 업데이트 및 업그레이드를 해줍니다.
sudo apt update
sudo apt upgrade
# Nginx 설치
sudo apt install nginx -y
# Nginx 설치 확인
nginx -v

# Nginx 서비스 상태 확인
sudo service nginx status

Active에서 active 상태가 아니라면 sudo service nginx start를 사용합니다.
배포를 위해 방화설 설정을 해주어야 합니다.
# 방화벽 상태 확인
sudo ufw status

# 80 포트와 443 포트 허용
sudo ufw allow 'Nginx Full'
# 80 포트 개방
sudo ufw allow 'Nginx HTTP'
# 442 포트 개방
sudo ufw allow 'Nginx HTTPs'
# 방화벽 설정 적용
sudo ufw enable
# 서버 부팅 시 Nginx 자동 시작
sudo systemctl enable nginx
sudo systemctl restart nginx
성공 시 퍼블릭 IP에 접속했을 때 사진처럼 나와야 합니다.

실패 시 인스턴스 VM을 재부팅해봅니다. 또는 Nginx를 재시작해봅니다.
퍼블릭 IP로 사이트를 접속하면 Https를 설정하지 않아 주의 요함이라고 뜨고 있습니다. 도메인을 설정하고 Https를 적용해 봅니다.

다양한 도메인 사이트가 있는데 이번엔 내도메인.한국을 이용하여 무료로 적용해 봅니다.
https://xn--220b31d95hq8o.xn--3e0b707e/
회원가입을 한 후 일반 도메인 검색에 자신이 사용할 도메인을 입력 후 검색을 누르고 등록하기를 클릭합니다.
그럼 사진과 같은 설정 창이 뜰겁니다.

여기서 IP연결(A)를 선택하고 예) 있는 부분에 퍼블릭 IP를 입력해주고 보안코드를 입력 후 수정하기를 클릭합니다.
생성한 도메인 주소 접속을 해서 정상적으로 되는지 확인합니다.
![]

sudo apt-get install python3-certbot-nginx
sudo certbot --nginx -d <도메인 이름>
# SSL 발급 확인
sudo ls /etc/letsencrypt/live/[도메인 주소]
vim /etc/nginx/nginx.conf
# 두 줄 코드 있는지 확인 없으면 추가
http {
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
:wq 저장하고 나가기
sudo mkdir /var/log/nginx/proxy/ # log, error 파일이 들어갈 디렉토리 생성
sudo vi /etc/nginx/proxy_params
Nginx의 프록시 서버 설정으로, 클라이언트 요청을 백엔드 서버로 전달하고 응답을 처리하는 방법을 설정합니다.
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
client_max_body_size 256M;
client_body_buffer_size 1m;
proxy_buffering on;
proxy_buffers 256 16k;
proxy_buffer_size 128k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_max_temp_file_size 1024m;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_intercept_errors on;
sudo vim /etc/nginx/sites-available/default
server {
listen 80;
server_name [도메인 주소];
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name [도메인 주소]; # managed by Certbot
location / {
include /etc/nginx/proxy_params; ## 위에서 설정한 프록시를 include
proxy_pass http://[백엔드 주소:포트 or VM인스턴스의 private IP];
}
ssl_certificate /etc/letsencrypt/live/[도메인 주소]/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/[도메인 주소]/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
# 테스트
sudo nginx -t

# Nginx 재실행
sudo service nginx restart
도메인 주소를 입력하고 접속했을 때 502 Bad Gateway가 뜨면 성공입니다.
