점수 개선 #84
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |