Skip to content

점수 개선

점수 개선 #84

Workflow file for this run

name: Full Deploy to AWS
on:
push:
branches:
- main
jobs:
frontend:
name: Deploy Frontend to S3
runs-on: ubuntu-latest
steps:
- name: Checkout frontend code
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Clean build cache
run: |
rm -rf sciq-fe/.vite
rm -rf sciq-fe/dist
working-directory: .
- name: Install dependencies
run: npm ci
working-directory: sciq-fe
- name: Build frontend
run: npx vite build
working-directory: sciq-fe
- name: Clear S3 bucket
run: |
aws s3 rm s3://${{ secrets.S3_BUCKET_NAME }} --recursive
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
- name: Deploy to S3
uses: jakejarvis/s3-sync-action@v0.5.1
with:
args: --delete
env:
AWS_S3_BUCKET: ${{ secrets.S3_BUCKET_NAME }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
SOURCE_DIR: sciq-fe/dist
backend:
name: Deploy Backend to EC2
runs-on: ubuntu-latest
needs: frontend
steps:
- name: Checkout backend code
uses: actions/checkout@v3
- name: Set up JDK for Spring Boot
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Build backend JAR
run: ./gradlew clean bootJar
working-directory: sciq-be
- name: Debug list files
run: ls -la sciq-be/build/libs/
- name: Zip JAR
run: |
cd sciq-be/build/libs/
zip -j sciq-be.zip *.jar
mv sciq-be.zip ../../
- name: Debug check zip
run: |
echo "Checking zip file existence and content:"
ls -la sciq-be/sciq-be.zip
unzip -l sciq-be/sciq-be.zip
- name: Copy files to EC2
uses: appleboy/scp-action@v0.1.3
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_SSH_KEY }}
source: "sciq-be/sciq-be.zip,sciq-be/.env"
target: "/home/ubuntu"
strip_components: 1
- name: Deploy on EC2 via SSH
uses: appleboy/ssh-action@v0.1.10
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_SSH_KEY }}
script: |
# Debug: Check if files exist
echo "Checking for files:"
ls -la ~/sciq-be.zip
ls -la ~/.env
# Clean up old files
rm -rf ~/sciq-be
mkdir -p ~/sciq-be
# Move .env file
mv ~/.env ~/sciq-be/.env
# Unzip and check contents
cd ~/sciq-be
unzip -o ../sciq-be.zip
echo "Checking contents after unzip:"
ls -la
# Ensure JAR file is named correctly
mv *.jar app.jar || echo "Failed to rename JAR file"
echo "Checking final JAR file:"
ls -la app.jar
# Create docker-compose.yml
cat << 'EOF' > docker-compose.yml
version: "3.8"
services:
app:
image: eclipse-temurin:17-jre
container_name: sciq-backend
ports:
- "8080:8080"
volumes:
- ./app.jar:/app.jar
- ./.env:/app/.env
environment:
- SPRING_PROFILES_ACTIVE=prod
- SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/sciq?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
- SPRING_DATASOURCE_USERNAME=${MYSQL_USER}
- SPRING_DATASOURCE_PASSWORD=${MYSQL_PASSWORD}
- JWT_SECRET=${JWT_SECRET}
env_file:
- .env
command: ["java", "-jar", "/app.jar"]
depends_on:
- db
restart: always
db:
image: mysql:8.0
container_name: sciq-mysql
env_file:
- .env
environment:
- MYSQL_DATABASE=sciq
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- TZ=Asia/Seoul
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time-zone='+09:00'
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
volumes:
mysql-data:
EOF
# Stop and remove existing containers
sudo docker-compose down || true
sudo docker stop sciq-mysql sciq-backend || true
sudo docker rm sciq-mysql sciq-backend || true
# Start services
sudo docker-compose up -d
# Show logs for debugging
echo "Backend logs:"
sudo docker logs sciq-backend
echo "MySQL logs:"
sudo docker logs sciq-mysql