최근에 비용문제로 프로젝트의 VM인스턴스와 DB서버를 옮기게 되었다. 내 생각보다 사용자가 많아져 한달만에 AWS 프리티어가 제공하는 리소스를 모두 사용했고, 구글 클라우드에서는 하나의 계정당 $300의 크레딧을 무료로 제공하기 때문에 적어도 한달 동안 프로젝트를 유지할 수 있을 것이라 생각했기 때문이다.
1.
고급 옵션 >> 보안
탭에서 수동으로 이전에 사용하던 SSH 키를 등록엔터프라이즈 >> 샌드박스
(CPU 2개, 8GB RAM, 10GB 스토리지)0.0.0.0/0
으로 설정해주었다. 하지만 이렇게 설정한다고 DB에 접근할 수 있는 것은 아니다. username
, password
를 입력하는 과정은 필요하다.VM 인스턴스를 생성할 때 등록한 SSH키를 저장하고 있는 키파일을 이용해서 로컬 터미널에서 VM에 접속할 수 있다.
ssh -i (키파일) (사용자 이름)@(서버의 IP주소)
Remote SSH를 활용한다.
1. F1
>> Remote-SSH: 호스트에 연결
2. (호스트 이름)@(서버 IP주소)
입력
3. 설정 파일을 열어 다음과 같이 수정
WorkBench와 DataGrip에서 동일하다.
Cloud SQL을 처음 만들면 root 사용자만 생성되어 있기 때문에 다른 사용자로 접속하고 싶으면 클라우드 콘솔의 사용자 탭에서 새로운 사용자와 패스워드를 등록해주어야 한다.
sudo apt install git
git --version
sudo apt install nodejs npm
nodejs -v
프로젝트 폴더(프론트엔드)에서
sudo npm install
또는
sudo npm i
스프링 부트 프로젝트가 자바 17기반으로 설치되었기 때문에 자바17을 설치했다.
sudo apt install openjdk-17-jdk
sudo apt update
sudo apt install nginx
이전 서버에서 HTTPS 설정을 위해 사용하던 키를 가져와야한다. 나는 Let's Encrypt의 SSL 서비스를 사용하고 있었고, 나와 동일하게 다른 서버로 인증서를 옮기려는 질문을 한 사람이 있었다.
몇개의 인증을 위한 파일을 수동으로 복사해서 새로운 서버에 가져다 놓으면 사용할 수 있다.
물론 새롭게 인증서를 발급받아도 되지만, 이 경우에는 이미 등록된 도메인으로 새롭게 등록하는 과정이기 때문에 몇가지 과정이 더 필요하다. 그래서 나는 수동으로 인증서 파일을 옮기기로 하였다.
처음 Let's Encrypt 서비스를 적용했다면 필요한 키인 fullchain.pem, privkey.pem이
/etc/letsencrypt/live/gongnomok.site/fullchain.pem
/etc/letsencrypt/live/gongnomok.site/privkey.pem
위 경로에 저장되어 있고, nginx의 open ssl을 위한 설정은
/etc/letsencrypt/options-ssl-nginx.conf
위 경로에 위치한다 이 파일의 내용을 복사해서 새로운 서버의 내가 원하는 위치에 복붙 하면된다.
80번 포트로 들어오는 요청을 https 주소로 자동으로 리다이렉션 해주었고, 443 포트로 들어온 요청은 빌드된 리액트 프로덕션 코드의 index.html을 반환한다.
server {
listen 80;
server_name gongnomok.site;
location / {
return 301 https://gongnomok.site$request_uri;
}
}
server {
listen 443 ssl;
server_name gongnomok.site;
ssl_certificate /etc/my_ssh/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/my_ssh/privkey.pem; # managed by Certbot
include /etc/my_ssh/options-ssl-nginx.conf; # managed by Certbot
location / {
root /usr/project/gongnomok-simulator/frontend/dist;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /api {
proxy_pass https://localhost:8080;
}
}
물론 이곳에서 도메인 주소를 사용하기 위해서는 가비아 같은 DNS서비스에 이미 도메인 주소가 등록되어 있어야 한다.
ssl_certificate /etc/my_ssh/fullchain.pem;
ssl_certificate_key /etc/my_ssh/privkey.pem;
include /etc/my_ssh/options-ssl-nginx.conf;
Nginx의 SSL설정에 사용된 위 주소들은 나의 SSL 키값이 위치하는 경로이다.
MySQL WorkBench로 현재 데이터베이스 파일을 덤프시켜 테이블을 새로운 MySQL 서버에 복원하였다.
덤프할 데이터베이스와 테이블을 선택한후 Export 해주면 된다. 한꺼번에 Export할지, 테이블별로 Export 할지 선택하는 등 디테일한 설정도 있지만 그건 여기서 다루지 않는다.
덤프할 때 꼭 set-gtid-purged 옵션을 OFF로 설정해주어야 한다는 점을 기억하자.
데이터를 가져올 DB 서버에 접속해서 Data Import를 통해 아까전에 덤프한 파일로 데이터를 복원할 수 있다.
백엔드 서버에서 접속하는 DB 주소를 바꿔주도록 하자.