참고 : Github Actions 로 배포 자동화하기
현재 서버는 운영 서버에 배포전 테스트와 프론트 확인이 주목적이므로 굳이 RDS
를 사용하지않고 로컬의 MySQL
을 사용하려고 한다.
일단 MySQL
을 설치
sudo apt-get update
sudo apt-get install mysql-server
sudo systemctl enale mysql
sudo /usr/bin/mysql -u root -p
MySQL
접속 완료
비밀번호 변경
alter user 'root'@'localhost' identified with mysql_native_password by ‘비밀번호’;
FLUSH PRIVILEGES;
exit;
원격으로 DB에 접근하기 위해 외부 접속을 허용으로 변경
sudo su
cd /etc/mysql/mysql.conf.d
vi mysqld.cnf
bind-address
변경 (127.0.0.1
-> 0.0.0.0
)
MySQL
restart
service mysql restart
mysql -u root -p
Mysql
접속 성공!
이제 DB 툴에서 properties를 입력하면
(필자는 코드와 스키마를 동시에 볼 수 있어서 intellij
에서 제공하는 DB툴을 사용한다.)
Test Connection 을 누르면
실패
찾아보니 root 계정으로는 local에서만 접근 가능
Mysql 재시작 후 확인
성공!
이제 gitignore
처리된 application.yml
을 github actions
자동배포에서 사용할 수 있도록 해보자
- 필자의 프로젝트는 서버 별로 다르므로 배포 시에 프로필 별로 다른
application.yml
을 사용한다.(현재는 RELEASE)application.yml
은gitignore
에 등록 되어있는 상태에서 자동배포를 해보려 한다.
일단 배포 스크립트를 작성해보자
version: 0.0 # version은 반드시 0.0이어야 함
os: linux
files:
- source: /
destination: /home/ubuntu/server
overwrite: yes
permissions:
- object: /
pattern: "**"
owner: ubuntu
group: ubuntu
hooks:
AfterInstall:
- location: scripts/stop.sh
timeout: 60
runas: ubuntu
ApplicationStart:
- location: scripts/start.sh
timeout: 60
runas: ubuntu
PROJECT_ROOT="/home/ubuntu/server"
JAR_FILE="$PROJECT_ROOT/jar/server.jar"
DEPLOY_LOG="$PROJECT_ROOT/deploy.log"
TIME_NOW=$(date +%c)
# 현재 구동 중인 애플리케이션 pid 확인
CURRENT_PID=$(pgrep -f $JAR_FILE)
# 프로세스가 켜져 있으면 종료
if [ -z $CURRENT_PID ]; then
echo "$TIME_NOW > 현재 실행중인 애플리케이션이 없습니다" >> $DEPLOY_LOG
else
echo "$TIME_NOW > 실행중인 $CURRENT_PID 애플리케이션 종료 " >> $DEPLOY_LOG
kill -15 $CURRENT_PID
fi
PROJECT_ROOT="/home/ubuntu/server"
JAR_FILE="$PROJECT_ROOT/jar/server.jar"
mkdir "$PROJECT_ROOT/jar"
mkdir "$PROJECT_ROOT/logs"
APP_LOG="$PROJECT_ROOT/logs/server.log"
ERROR_LOG="$PROJECT_ROOT/logs/error.log"
DEPLOY_LOG="$PROJECT_ROOT/logs/deploy.log"
TIME_NOW=$(date +%c)
# build 파일 복사
echo "$TIME_NOW > $JAR_FILE 파일 복사" >> $DEPLOY_LOG
cp $PROJECT_ROOT/build/libs/*-SNAPSHOT.jar $JAR_FILE
# jar 파일 실행
echo "$TIME_NOW > $JAR_FILE 파일 실행" >> $DEPLOY_LOG
source ~/.bashrc
nohup java -jar $JAR_FILE > $APP_LOG 2> $ERROR_LOG &
CURRENT_PID=$(pgrep -f $JAR_FILE)
echo "$TIME_NOW > 실행된 프로세스 아이디 $CURRENT_PID 입니다." >> $DEPLOY_LOG
Github Actions
설정에 RELEASE
서버 에서 실행될 application.yml
값 secret에 추가
commit 후 push
오류 발생
git actions 관련 토큰 문제
Settings -> Developer Settings -> personal Access Token -> 접속 범위를 변경할 AccessToken 클릭 -> workflow 부분 체크
수정 후 자동 배포 (필자의 resources 폴더명이 다른 문제)
수정 후 다시 배포
빌드 성공!
서버 실행 후 로그 확인 한 결과 오류 발생
확인해봤을때, 폴더 로 잘못 경로 설정
올바르게 수정
다시 실행시
성공!
스웨거 접속
Ec2
서버 403 error
확인해본결과 SecurityConfig
에서 다른 프로필 실행시 필터 예외가 되고있어서 제거했다.
수정 후 스웨거 동작까지 성공!
이후에는 작성된 테스트 코드들을 자동화 테스트 과정을 배포 중에 넣어봐야겠다.