본문 바로가기

프로젝트 기록

MobaXterm을 통한 배포 기록

ssafé 프로젝트에서 배포는 싸피에서 제공한 ec2 서버를 통해서 진행하였다.

싸피 측에서 ec2 세팅은 다 해두고 우리는 pem키만 지급받아서 배포만 하면 되는 상태였기 때문에, 일반적인 아마존 GUI를 사용할 수 없었다. 그래서 그나마 CLI를 최소화하고 GUI를 제공하는 툴인 'MobaXterm'을 사용해서 배포했는데, 그 과정과 삽질의 기록을 남긴다.

 

 

🤓 배포 과정

 

1. mobaXterm 설치

 

2. Session → SSH 작성

  • Remote host : 원격 접속할 ip/’도메인’ → 싸피 제공의 경우 i6a604.p.ssafy.io/
  • username : ubuntu
  • advanced SSH settings → Use private Key에서 pem키 등록

 

3. 접속하여 mysql, nginx 설치

 

4. mysql과 workbench 연결 (연결 안돼서 삽질 엄청 함..ㅎ)

  1. ubuntu에서 mysql 접속 : sudo /usr/bin/mysql -u root -p
  2. root이름으로, 외부 모든 곳에서 접근 가능한 유저 생성 (원래 root는 'root'@'localhost'임) & 모든 권한 부여 
mysql> create user 'root'@'%' identified by '[password]';
mysql> grant all privileges on *.* to 'root'@'%' with grant option;

 

 

4. https://velog.io/@bokiri409/MySQL을-서버에-올려보자 따라 함(netstat -tnlp 확인 후 sudo vi mysqld.cnf 수정)

 

5. 설정 후 sudo systemctl restart mysql 해주고, netstat -tnlp 확인 해서 127.0.0.1.3306(mysql)이 0.0.0.3306으로 변경됐는지 확인

 

6. host에 domain 주소 넣고, User, password에 root 넣어서 test connection 성공 (우리의 경우 domain 주소는 i6a604.p.ssafy.io)

 

7. root 계정 이름 변경 (moramoram으로)

use mysql;
update user set user=”moramoram” where user=”root”;
flush privileges;

 

8. 바꾼 계정의 password 변경

alter user ‘moramoram’@’%’ identified by ‘moramoram’;
flush privileges;

 

 

👉다음 접속 시에는 mysql -u moramoram -p로 접속해서, 변경된 패스워드(moramoram)으로 mysql 접속 가능

👉굳이 유저 이름과 비밀번호를 바꾼 이유

: moramoram 유저를 만들고 grant all을 하면 denied되므로, root유저에 모든 권한 부여 후 그 계정을 사용할 계정으로 바꿈. root 그대로 놔두면 외부 해킹 위험이 커서, user와 password를 바꾸는게 좋음

 

5. 원격과 연결된 local workbench에 기존 db dump 넣기

 

6. nginx의 root를 frontend위치로 수정

: sudo vi /etc/nginx/sites-available/default로 들어가서,

root /var/www/html;을 주석처리하고 root /home/ubuntu/dist; 를 적고 저장

  * 꼭 dist가 아니어도 됨. 그냥 프론트엔드 빌드 파일 위치만 맞게 적어주면 됨.

 

7. java 설치 : sudo apt-get install openjdk-11-jdk

 

8. jar파일 드래그 앤 드롭

  • application.yml파일의 database쪽을 원격과 연결시킨 db jdbc의 url과 user, password로 변경해서 jar파일을 생성해야 함.
  • intelliJ에서 jar 파일 생성 : gradle 탭 → build → bootjar

 

9. java -jar JAR_파일_이름

 

10. 잘 실행되면, postman에서 테스트

url을 http://i6a604.p.ssfay.io:8080/ 로 시작해 테스트 해야 함!!

 

 

+)

http → https로 변경하기

https://twpower.github.io/44-set-free-https-by-using-letsencrypt → 이거 보고 차근차근 따라하면 됨.

 

* sudo add-apt-repository ppa:certbot/certbot 시 ppa deprecated됨

 👉대신 snap install certbot — classic (—: 대쉬 두개) 명령어 사용해서 certbot 설치

 

* server block : /etc/nginx/sites-available/ 에 있는 파일들. 서버 도메인에 따라 보통 서버 도메인 이름으로 여러 개 만들 수 있는데, 우리는 서버 도메인 하나밖에 안 쓰니까(i6a604.p.ssafy.io) 그냥 원래 있는 default 서버 블록의 server name에 우리 도메인 넣어주는 걸로 수정하면 됨.

 

* 추가 참고 : https://velog.io/@twkim8548/Nginx에서-SSL-적용해서-Https-로-접속-되게-해볼까

 

 

++)

백그라운드로 서버 돌려서 터미널이 꺼져도 계속 서버가 돌아가게 하기

: nohup java -jar .jar &

 

* 해당 명령어를 실행한 자리에 nohup.out이 생기는데, 로깅 파일임

 

* nohup 종료 : ps -ef | grep <jar-name>.jar로 pid 확인 후, kill -9 PID

 

* 참고자료

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=bomyzzang&logNo=220391855793

https://syuda.tistory.com/72

https://blog.naver.com/sw4r/221615590097

 

일반 ec2 서버 연결 접속 방법 : https://minjii-ya.tistory.com/23

 

 

+++) 삽질 기록

  • 프론트는 https인데, 백은 http였다. 하지만 https→http 요청은 불가해서 그냥 다시 프론트를 http로 바꿨다...
  • 그 과정에서 SSL 인증서 삭제했는데 그럴 필요 없이 그냥 /etc/nginx/sites-available/default파일에 https 설정 관련 부분을 다 주석처리 하고 원래 default 내용으로 돌려놓으면 인증서 삭제할 필요 없이 http로 되돌리기가 가능하다는 것을 나중에 알게됨ㅠ
  • 프론트 https와 백 http가 통신하려면 nignx proxy pass 설정이 필요했는데, 이건 우리 aws서버가 프론트 백 합쳐서 하나라서 그런 거였다. 우리는 나중에 그냥 프론트 aws를 새로 팔 건데 그때 관련 설정을 하면 된다고 해서 그냥 프론트를 http로 다시 돌리는 방법을 선택했다.