코드 안의
bidcast.kro.kr
부분을 본인 도메인에 맞게 수정하고,
upstream app
안의 포트번호를 본인 프로젝트의 포트번호로 변경하세요.
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {}
http {
upstream app {
server 127.0.0.1:8888;
}
underscores_in_headers on;
# Redirect all traffic to HTTPS
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/bidcast.kro.kr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/bidcast.kro.kr/privkey.pem;
# Disable SSL
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
# 통신과정에서 사용할 암호화 알고리즘
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
# Enable HSTS
# client의 browser에게 http로 어떠한 것도 load 하지 말라고 규제합니다.
# 이를 통해 http에서 https로 redirect 되는 request를 minimize 할 수 있습니다.
add_header Strict-Transport-Security "max-age=31536000" always;
# SSL sessions
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
proxy_pass http://app;
}
}
}
EC2화면을 종료하더라도 서버가 실행중이라면 백그라운드에서 동작함
#!/bin/bash
APP_DIR=server # Node.js 파일이 위치한 폴더
APP_NAME=index.js # 실행할 Node.js 파일 이름
FULL_PATH=$APP_DIR/$APP_NAME
CURRENT_PID=$(pgrep -f $FULL_PATH)
echo "> Node.js 서버 배포 시작"
echo "> 현재 구동 중인 애플리케이션 PID 확인"
echo "> pid: $CURRENT_PID"
if [ -z "$CURRENT_PID" ]; then
echo "> 현재 동작 중인 애플리케이션이 없습니다."
else
echo "> kill -9 $CURRENT_PID"
kill -9 $CURRENT_PID
sleep 5
fi
echo "> 새 애플리케이션 배포를 시작합니다"
echo "> 실행 파일: $FULL_PATH"
nohup node $FULL_PATH > output.log 2>&1 &
echo "> 배포 완료. 로그는 output.log에서 확인 가능"
sh deploy.sh
tail -f output.log
groups ubuntu
groups jenkins
sudo usermod -aG jenkins ubuntu
sudo usermod -aG ubuntu jenkins
sudo reboot
sudo chown -R ubuntu:jenkins /home/ubuntu/BidCast
sudo chown -R ubuntu:jenkins /var/www/html
sudo chmod -R 775 /home/ubuntu/BidCast
sudo chmod -R 775 /var/www/html
sudo apt update sudo apt install -y openjdk-17-jdk wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null sudo apt update sudo apt install -y jenkins sudo systemctl enable jenkins sudo systemctl start jenkins
추천 플러그인 설치
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs npm install -g pnpm # pnpm 쓰면 빠름 sudo apt install nginx -y
#!/bin/bash set -e PROJECT_DIR=/home/ubuntu/BidCast REACT_DIR=$PROJECT_DIR/src/main/react STATIC_OUTPUT=$PROJECT_DIR/src/main/resources/static/bundle NGINX_ROOT=/var/www/html LOG_FILE=$PROJECT_DIR/app.log echo "== 1. 소스 업데이트 ==" cd "$PROJECT_DIR" git reset --hard git pull origin main echo "== 2. React 빌드 ==" cd "$REACT_DIR" export NODE_OPTIONS=--max-old-space-size=1024 npm run build echo "== 3. 정적 파일 복사 준비 ==" if [ -d "$STATIC_OUTPUT" ] && [ "$(ls -A $STATIC_OUTPUT)" ]; then echo " 복사 대상: $STATIC_OUTPUT" else echo "❌ 정적 빌드 결과가 없습니다: $STATIC_OUTPUT" exit 1 fi echo "== 4. 정적 파일 복사 ==" sudo -n cp -r "$STATIC_OUTPUT"/* "$NGINX_ROOT"/ echo "== 5. Spring Boot 빌드 및 재시작 ==" cd "$PROJECT_DIR" chmod +x gradlew export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH ./gradlew bootJar -x test JAR=$(ls build/libs/*.jar | head -n1) if [ -z "$JAR" ]; then echo "❌ 빌드된 JAR을 찾을 수 없습니다!" exit 1 fi echo "✅ 빌드 완료. 생성된 JAR 파일: $JAR" #pkill -f "$JAR" || true #sleep 2 #echo "== 6. Spring Boot 실행 ==" #nohup java -jar "$JAR" > app.log 2>&1 & #echo "== 배포 완료 ==" #echo " • Static: $STATIC_OUTPUT → $NGINX_ROOT" #echo " • JAR: $JAR" #echo " • 로그: $LOG_FILE" sudo systemctl restart bidcast.service
[Unit] Description=Bidcast Spring Boot Application After=syslog.target [Service] User=ubuntu Group=ubuntu ExecStart=/usr/bin/java -jar /home/ubuntu/BidCast/build/libs/your-app.jar #실제 빌드된 JAR경로로 수정 SuccessExitStatus=143 Restart=always RestartSec=10 [Install] WantedBy=multi-user.target
sudo systemctl daemon-reload sudo systemctl enable bidcast.service sudo systemctl start bidcast.service sudo systemctl status bidcast.service
Github에 push시 자동으로 Jenkins빌드 실행됨