Skip to content

Merge pull request #64 from s0ooo0k/feat/front-fix #35

Merge pull request #64 from s0ooo0k/feat/front-fix

Merge pull request #64 from s0ooo0k/feat/front-fix #35

Workflow file for this run

name: Deploy to Oracle Cloud
on:
push:
branches: [ main, feat/prod ]
pull_request:
branches: [ main ]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: |
set -e
echo "Gradle λΉŒλ“œλ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€..."
./gradlew build -x test
echo "Gradle λΉŒλ“œ 성곡!"
- name: Create deployment package
if: github.event_name == 'push'
run: |
mkdir -p deploy
if ls build/libs/*.jar 1> /dev/null 2>&1; then
cp build/libs/*.jar deploy/petty-app.jar
echo "JAR 파일 볡사 μ™„λ£Œ"
else
echo "JAR 파일이 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 배포 쀑단"
exit 1
fi
- name: Deploy to Oracle Cloud
if: github.event_name == 'push'
uses: appleboy/[email protected]
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
script: |
sudo systemctl stop petty-app || true
if [ -f /home/ubuntu/petty-app/app/petty-app.jar ]; then
cp /home/ubuntu/petty-app/app/petty-app.jar /home/ubuntu/petty-app/app/petty-app.jar.backup
fi
echo "μƒˆ JAR 파일 볡사λ₯Ό κΈ°λ‹€λ¦¬λŠ” 쀑..."
- name: Copy JAR file
if: github.event_name == 'push'
uses: appleboy/[email protected]
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
source: "deploy/petty-app.jar"
target: "/home/ubuntu/petty-app/app/"
strip_components: 1
- name: Start application
if: github.event_name == 'push'
uses: appleboy/[email protected]
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
script: |
# ν™˜κ²½ λ³€μˆ˜ 파일 μ—…λ°μ΄νŠΈ
cat > /home/ubuntu/petty-app/.env << 'EOF'
# Database
DB_SUPABASE_URL=${{ secrets.DB_SUPABASE_URL }}
DB_SUPABASE_USERNAME=${{ secrets.DB_SUPABASE_USERNAME }}
DB_SUPABASE_PASSWORD=${{ secrets.DB_SUPABASE_PASSWORD }}
DB_AIVEN_URL=${{ secrets.DB_AIVEN_URL }}
DB_AIVEN_USERNAME=${{ secrets.DB_AIVEN_USERNAME }}
DB_AIVEN_PASSWORD=${{ secrets.DB_AIVEN_PASSWORD }}
# JWT
JWT_SECRET=${{ secrets.JWT_SECRET }}
JWT_EXPIRATION_TIME=3600000
# OAuth
OAUTH_GITHUB_CLIENT_ID=${{ secrets.OAUTH_GITHUB_CLIENT_ID }}
OAUTH_GITHUB_CLIENT_SECRET=${{ secrets.OAUTH_GITHUB_CLIENT_SECRET }}
OAUTH_KAKAO_CLIENT_ID=${{ secrets.OAUTH_KAKAO_CLIENT_ID }}
OAUTH_KAKAO_CLIENT_SECRET=${{ secrets.OAUTH_KAKAO_CLIENT_SECRET }}
OAUTH_KAKAO_REDIRECT_URI=${{ secrets.OAUTH_KAKAO_REDIRECT_URI }}
# Email
EMAIL_USERNAME=${{ secrets.EMAIL_USERNAME }}
EMAIL_PASSWORD=${{ secrets.EMAIL_PASSWORD }}
# AWS
AWS_REGION=${{ secrets.AWS_REGION }}
AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY }}
# Supabase
SUPABASE_URL=${{ secrets.SUPABASE_URL }}
SUPABASE_KEY=${{ secrets.SUPABASE_KEY }}
SUPABASE_BUCKET=${{ secrets.SUPABASE_BUCKET }}
# OpenAI
OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
# Qdrant
QDRANT_HOST=${{ secrets.QDRANT_HOST }}
QDRANT_PORT=${{ secrets.QDRANT_PORT }}
QDRANT_COLLECTION=${{ secrets.QDRANT_COLLECTION }}
QDRANT_API_KEY=${{ secrets.QDRANT_API_KEY }}
# Vision APIs
GEMINI_VISION_URL=${{ secrets.GEMINI_VISION_URL }}
GEMINI_VISION_KEY=${{ secrets.GEMINI_VISION_KEY }}
TOGETHER_VISION_URL=${{ secrets.TOGETHER_VISION_URL }}
TOGETHER_VISION_KEY=${{ secrets.TOGETHER_VISION_KEY }}
# Chat APIs
GEMINI_CHAT_URL=${{ secrets.GEMINI_CHAT_URL }}
GEMINI_CHAT_KEY=${{ secrets.GEMINI_CHAT_KEY }}
TOGETHER_CHAT_MODEL=${{ secrets.TOGETHER_CHAT_MODEL }}
TOGETHER_CHAT_URL=${{ secrets.TOGETHER_CHAT_URL }}
TOGETHER_CHAT_KEY=${{ secrets.TOGETHER_CHAT_KEY }}
# Tour API
TOUR_API_BASE_URL=${{ secrets.TOUR_API_BASE_URL }}
TOUR_API_SERVICE_KEY=${{ secrets.TOUR_API_SERVICE_KEY }}
TOUR_API_MOBILE_OS=${{ secrets.TOUR_API_MOBILE_OS }}
TOUR_API_MOBILE_APP=${{ secrets.TOUR_API_MOBILE_APP }}
TOUR_API_TYPE=${{ secrets.TOUR_API_TYPE }}
EOF
chmod 600 /home/ubuntu/petty-app/.env
# μ„œλΉ„μŠ€ μ‹€ν–‰
sudo systemctl start petty-app
echo "μ„œλΉ„μŠ€ μ‹œμž‘ μ™„λ£Œ. μƒνƒœ 확인 쀑..."
# 더 μ •ν™•ν•œ μƒνƒœ 확인 (60초 λŒ€κΈ°)
sleep 60
# 1. μ •ν™•ν•œ μ„œλΉ„μŠ€ μƒνƒœ 확인
status=$(sudo systemctl is-active petty-app)
echo "μ„œλΉ„μŠ€ μƒνƒœ: $status"
if [ "$status" != "active" ]; then
echo "❌ μ„œλΉ„μŠ€κ°€ μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€."
echo "=== μ„œλΉ„μŠ€ μƒνƒœ ==="
sudo systemctl status petty-app --no-pager
echo "=== 졜근 둜그 ==="
sudo journalctl -u petty-app -n 20 --no-pager
exit 1
fi
# 2. μ—λŸ¬ 둜그 확인
if sudo journalctl -u petty-app -n 20 | grep -i "error\|exception\|failed"; then
echo "❌ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‘œκ·Έμ—μ„œ μ—λŸ¬κ°€ λ°œκ²¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€."
echo "=== μ—λŸ¬ 둜그 ==="
sudo journalctl -u petty-app -n 50 --no-pager
exit 1
fi
# 3. μΆ”κ°€ μ•ˆμ •μ„± 체크 (30초 더 λŒ€κΈ° ν›„ μž¬ν™•μΈ)
echo "μΆ”κ°€ μ•ˆμ •μ„± 확인 쀑..."
sleep 35
final_status=$(sudo systemctl is-active petty-app)
if [ "$final_status" != "active" ]; then
echo "❌ μ„œλΉ„μŠ€κ°€ λΆˆμ•ˆμ •ν•©λ‹ˆλ‹€. μ΅œμ’… μƒνƒœ: $final_status"
sudo systemctl status petty-app --no-pager
sudo journalctl -u petty-app -n 30 --no-pager
exit 1
fi
# 4. ν”„λ‘œμ„ΈμŠ€ μ‹€μ œ μ‹€ν–‰ 확인
if ! pgrep -f "petty-app.jar" > /dev/null; then
echo "❌ petty-app.jar ν”„λ‘œμ„ΈμŠ€κ°€ μ‹€ν–‰λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€."
ps aux | grep java
exit 1
fi
echo "βœ… 배포가 μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€!"
echo "=== μ΅œμ’… μƒνƒœ ==="
sudo systemctl status petty-app --no-pager
echo "=== μ‹€ν–‰ 쀑인 Java ν”„λ‘œμ„ΈμŠ€ ==="
ps aux | grep java | grep -v grep