이전글
CI/CD 그 이후
Code Deploy에서 배포가 완료된 이후, 서버를 접속하려고 했지만 계속해서 오류가 발생하고 있었다.
그 오류가 무엇인지 계속 연구하였다.
JDK이슈, java 설치
deploy.log, error.log 확인
start.sh의 내용을 확인해 보면
#!/usr/bin/env bash
PROJECT_ROOT="/home/ubuntu/app"
JAR_FILE="$PROJECT_ROOT/slog.jar"
APP_LOG="$PROJECT_ROOT/application.log"
ERROR_LOG="$PROJECT_ROOT/error.log"
DEPLOY_LOG="$PROJECT_ROOT/deploy.log"
TIME_NOW=$(date +%c)
# build 파일 복사
echo "$TIME_NOW > $JAR_FILE 파일 복사" >> $DEPLOY_LOG
cp $PROJECT_ROOT/build/libs/*.jar $JAR_FILE
# jar 파일 실행
echo "$TIME_NOW > $JAR_FILE 파일 실행" >> $DEPLOY_LOG
nohup java -jar $JAR_FILE > $APP_LOG 2> $ERROR_LOG &
CURRENT_PID=$(pgrep -f $JAR_FILE)
echo "$TIME_NOW > 실행된 프로세스 아이디 $CURRENT_PID 입니다." >> $DEPLOY_LOG
배포 기록은 deploy.log에 Error기록은 error.log에 저장되는 것을 알 수 있다.
deploy의 기록을 확인하다 보니
Sat Mar 4 09:38:12 2023 > 현재 실행중인 애플리케이션이 없습니다
Sat Mar 4 09:38:13 2023 > /home/ubuntu/app/slog.jar 파일 복사
Sat Mar 4 09:38:13 2023 > /home/ubuntu/app/slog.jar 파일 실행
Sat Mar 4 09:38:13 2023 > 실행된 프로세스 아이디 입니다.
위와 같이 실행된 프로세스 아이디 " "입니다
라고 $CURRENT_PID가 공백이 되어있는 것을 볼 수 있었다.
jar 파일이 제대로 실행되지 않는 것이었다.
error.log를 확인해 보니
nohup: failed to run command 'java': No such file or directory
java라는 명령어 자체를 확인하지 못하고 있었다.
그래서
sudo apt update
sudo apt install -y openjdk-11-jdk
해당 명령어로 java를 먼저 설치하였다.
분명 github actions의 ci/cd부분에 jdk설치하는 스크립트가 있었는데, 어떤 이유로 무시되고 있는 것 같았다.
설치가 끝난 후 deploy.log를 확인하니
Sat Mar 4 14:14:09 2023 > 현재 실행중인 애플리케이션이 없습니다
Sat Mar 4 14:14:10 2023 > /home/ubuntu/app/slog.jar 파일 복사
Sat Mar 4 14:14:10 2023 > /home/ubuntu/app/slog.jar 파일 실행
Sat Mar 4 14:14:10 2023 > 실행된 프로세스 아이디 55232 입니다.
무사히 jar 파일이 실행되는 것을 확인할 수 있었다.
하지만 이 이후로도 계속 접속이 되지 않았다.
MySQL 문제, MySQL 설치
직접 app이 받아진 디렉터리로 들어가서 스프링을 실행시켰다.
~/app$ ./gradlew bootRun
~/app$ 경로에서 위의 명령어를 사용하여 직접 스프링을 실행시켰다.
SPRING이 켜지고 80%까지 EXECUTING 되었지만 계속 멈추는 것을 확인하고 로그가 필요하여 로그를 남길 수 있는 명령어를 사용했다.
nohup java -jar slog.jar > slog.log &
이후 해당 디렉터리에 slog.log라는 파일이 생겼고 log파일을 읽었다(cat 명령어 사용)
2023-03-04 14:32:39.259 ERROR 55803 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization.
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
MySQL의 문제였으므로, mysql이 설치되었는지 먼저 확인했다
systemctl status mysql
위의 명령어를 입력하자 아래와 같이 콘솔창에 글자가 작성되었다.
Unit mysql.service could not be found.
MySQL의 서비스를 찾지 못하고 있었고, MySQL을 설치했다.
sudo apt-get install mysql-server
설치가 된 후
systemctl status mysql
위의 명령어를 작성하게 되면 실행 중인 mysql 정보를 볼 수 있다.
이후 다시 Spring을 실행시키자 에러가 다르게 나타나기 시작했다.
java.sql.SQLException: Access denied for user 'root'@'localhost'
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-j-8.0.32.jar!/:8.0.32]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.0.32.jar!/:8.0.32]
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:824) ~[mysql-connector-j-8.0.32.jar!/:8.0.32]
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444) ~[mysql-connector-j-8.0.32.jar!/:8.0.32]
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:237) ~[mysql-connector-j-8.0.32.jar!/:8.0.32]
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-j-8.0.32.jar!/:8.0.32]
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar!/:na]
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar!/:na]
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar!/:na]
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar!/:na]
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar!/:na]
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-4.0.3.jar!/:na]
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-4.0.3.jar!/:na]
at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.6.14.Final.jar!/:5.6.14.Final]
root@localhost로 연결되면서 발생하는 에러였다.
이번에는 인텔리제이의 application.yml을 수정하였다.
application.yml 수정
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/slog
password: 1234
username: root
기존엔 위와 같이 yml에 작성하고, 인텔리제이의 환경변수에 값을 집어넣었었다.
그 후 ubuntu내의 환경변수를 사용하여 값을 넣어주고 있었는데, yml을 그대로 받아들이다 보니 localhost로 연결이 우선적으로 되는 것 같았다.
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: ${SPRING_DATASOURCE_URL}
password: ${SPRING_DATASOURCE_PASSWORD}
username: root
위와 같이 입력하고 다시 CI/CD를 진행하니, 무사히 배포가 완료되었다.
이후 EC2 인스턴스의 주소를 입력하고 8080 포트를 입력하니 접속이 완료되었다.
ubuntu 환경변수 설정
- JDK 설치 경로 확인
먼저 JDK가 설치된 경로를 확인합니다. 일반적으로 /usr/lib/jvm 디렉터리에 JDK가 설치됩니다. 아래 명령어를 입력하여 JDK 설치 경로를 확인할 수 있습니다.
ls /usr/lib/jvm/
- 환경 변수 설정
환경 변수를 설정하기 위해 /etc/environment 파일을 열어야 합니다. 다음 명령어를 입력하여 파일을 엽니다.
sudo vi /etc/environment
SPRING_DATASOURCE_PASSWORD={RDS 비밀번호(MySQL 비밀번호)}
SPRING_DATASOURCE_URL=jdbc:mysql://{RDS 앤드포인트/스키마}
위와 같이 JAVA_HOME 변수를 추가한 후 ESC를 누른 다음 shift+Z+Z를 눌러 종료합니다.
- 환경 변수 적용
변경된 환경 변수를 적용하기 위해 다음 명령어를 입력합니다.
source /etc/environment
'Server > Infra' 카테고리의 다른 글
[AWS] AWS CLI 및 Docker 설치 (0) | 2023.03.09 |
---|---|
[AWS] AWS Tools, AWSPowerShell 설치 (0) | 2023.03.09 |
[CI/CD] Github Actions, AWS S3, AWS CodeDeploy를 이용한 CI/CD - 5 (0) | 2023.03.03 |
[CI/CD] Github Actions, AWS S3, AWS CodeDeploy를 이용한 CI/CD - 4 (0) | 2023.03.03 |
[CI/CD] Github Actions, AWS S3, AWS CodeDeploy를 이용한 CI/CD - 3 (0) | 2023.03.01 |