원글 페이지 : 바로가기

1. EC2 인스턴스 인바운드 규칙 추가 (HTTP/S, SSH는 이전에 추가) Spring Boot Server, React Server 접근 허용을 위해 아래와 같이 추가해준다. 인바운드 규칙 편집 > ‘규칙 추가’ 인바운드 규칙 추가 완료 2. 서버 Java 설치, 환경변수 설정 아래 명령어를 순서대로 입력한다 # 서버 접속
ssh -i “키페어파일명.pem” ubuntu@{퍼블릭_DNS_주소}
# 우분투 패키지 업그레이드
sudo apt-get update
# Java17 설치
sudo api install openjdk-17-jdk
# 설치 확인
java -version Java17 설치 완료 그리고 아래 명령어를 통해 자바 환경 변수를 설정해준다 # 환경변수 설정 확인 (결과 없음 상태)
$ echo $JAVA_HOME
# Java 절대경로 확인
$ whice java
/usr/bin/java
$ readlink -f /usr/bin/java
/usr/lib/jvm/java-17-openjdk-amd64/bin/java
# 환경변수 설정
$ vi /etc/profile
”’ 커서를 가장 아래로 옮긴 뒤(shift+g), 아래 내용 입력
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/bin/java
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
”’
# 위의 변경사항 적용
source /etc/profile vi /etc/profile 화면 그리고 재접속 후 확인하면, 아래와 같이 잘 적용된 것을 확인할 수 있다. 3. 빌드 build > build 클릭 Gradle > build/build 를 클릭하면, 빌드 과정 후 프로젝트_디렉토리명/build/lib/프로젝트명-1.0.jar 파일이 생성된다. 4. 배포 간단하게 scp로 해당 파일을 서버로 옮겼다. scp -i {pem_파일명}.pem ./backend-1.0.jar ubuntu@{서버주소}:~/ 이어서 서버에 접속한 상태로 아래 명령어를 통해 실행하면 된다. # jar 배포 파일 실행
java -jar backend-1.0.jar
# 무중단 실행
nohup java -jar backend-1.0.jar > {로그파일명}.txt & 실행 로그 참고 https://velog.io/@dlzlqlzl/AWS-Spring-Boot-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EB%B0%B0%ED%8F%AC-%ED%95%B4%EB%B3%B4%EA%B8%B0 * MySQL command denied 에러 발생 2024-06-11T07:55:58.572Z WARN 24979 — [nio-8080-exec-2] o.m.jdbc.message.server.ErrorPacket : Error: 1142-42000: SELECT command denied to user ‘godswork’@'{주소}’ for table `gods_work`.`trainer`
2024-06-11T07:55:58.572Z WARN 24979 — [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1142, SQLState: 42000
2024-06-11T07:55:58.573Z ERROR 24979 — [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper : (conn=2248) SELECT command denied to user ‘godswork’@'{주소}’ for table `gods_work`.`trainer`
org.springframework.dao.InvalidDataAccessResourceUsageException: JDBC exception executing SQL [select t1_0.trainer_id,t1_0.address,t1_0.birth_ymd,t1_0.center_id,t1_0.created_at,t1_0.email,t1_0.gender,t1_0.is_active,t1_0.is_admin,t1_0.is_withdrawal,t1_0.modified_at,t1_0.name,t1_0.password,t1_0.phone_number,t1_0.registration_ymd,t1_0.trainer_login_id from trainer t1_0 where t1_0.trainer_login_id=?]; SQL [n/a] 분명 ‘godswork’ 계정에 “grant all previleges on gods_work.* to ‘godswork’&’%’ 설정을 해주었는데 왜 select가 안될까… >> 우선, RDS 생성시 만들었던 마스터 사용자 계정을 사용하기로 했다. 5. 서버 스크립트 생성 1) 서버 실행 스크립트 작성 # 스크립트 파일 생성
$ nano start.sh
”’아래 내용 입력
#!/bin/bash
JAR=backend-0.0.1.jar
LOG=~/log.log
nohup java -jar $JAR > $LOG 2>&1 &
”’
# 실행 권한 부여
$ chmod +x start.sh
# 실행
$ ./start.sh * 위에서 2>&1 은 오류 출력(stderr)을 일반 출력(stdout)으로 전달하라는 의미다. 2) 서버 중지 스크립트 작성 ”’아래 내용 입력
#!/bin/bash
PID=$(ps -ef | grep java | grep backend | awk ‘{print $2}’)
if [ -z “$PID” ];
then
echo “Backend Application is not running!”
else
kill -9 $PID
echo “Backend Application Stopped”
fi
”’
# 권한 부여
$ chmod +x stop.sh
# 중지 실행
$ ./stop.sh * awk ‘{print $2}’ 명령은 출력 문자열의 2번째 항목인 프로세스 아이디만 뽑아낸다. 6. 기본 80번 포트로 변경 (Nginx) 지금까지 8080번 포트를 사용했지만, 실제 운영 환경에서는 80번 포트를 가장 많이 사용한다. 그 방법 중 아래 명령어를 사용해서 80번 포트를 직접 실행할 수도 있지만, 추천되지는 않는다. $ sudo java -Dserver.port=80 -jar backend-0.1.jar 그래서 보통 엔진엑스(Nginx)나 아파치(Apache)와 같은 웹 서버를 사용해서 80번 포트를 사용한다. 여기에서는 엔진엑스와 스프링부트를 연동해 80번 포트로 웹 서비스를 운영하도록 한다. # nginx 설치
$ sudo apt install nginx
# 엔진엑스 설정을 루트 권한으로 생성
$ cd /etc/nginx/sites-available
$ sudo nano backend
”’ 아래 내용을 작성
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:8080;
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;
}
}
”’ 터미널 실행 backend 설정 파일 생성 완료! 이제 위에서 생성한 backend 파일을 엔진엑스가 설정 파일로 읽을 수 있도록, backend 파일을 /etc/nginx/sites-enabled 디렉터리에 링크해준다. 아래 명령어를 순서대로 따라 입력해준다. $ cd /etc/nginx/sites-enabled
# 현재 default 설정 파일만 링크되어 있음을 확인
$ ls
default
# 기존에 있던 링크 삭제
$ sudo rm default
# 새로 만든 파일을 링크
$ sudo ln -s /etc/nginx/sites-available/backend
# 링크 확인
$ ls
backend 링크 설정 완료 위의 엔진엑스 설정을 적용하기 위해, 엔진엑스를 다시 시작한다. # 관리자 권한으로 재시작
$ sudo systemctl restart nginx * 처음 시도시 에러가 발생해서 확인 해보니(sudo nginx -t) sites-available/backend 파일에 오타가 있었다. sudo 권한으로 수정 후 다시 재부팅 성공! (좌)기존 방식대로 8080 포트로 접속 / (우) 포트 입력 없이 접속