<aside> <img src="/icons/bookmark_purple.svg" alt="/icons/bookmark_purple.svg" width="40px" />
목차
</aside>
난독화 빌드 및 오브젝트 스토리지 업로드
PS C:\\Users\\em111\\OneDrive\\바탕 화면\\naver boostcamp membership\\web11-road_to_friendly\\frontend> npm run build
> [email protected] build
> tsc -b && vite build && npm run obfuscate
vite v5.4.10 building for production...
✓ 152 modules transformed.
dist/index.html 0.40 kB │ gzip: 0.28 kB
dist/assets/landing-clap-DvtoQqed.png 148.18 kB
dist/assets/index-CsY7WTYs.js 254.88 kB │ gzip: 86.07 kB
✓ built in 4.44s
> [email protected] obfuscate
> javascript-obfuscator ./dist --output ./dist
[javascript-obfuscator-cli] Obfuscating file: dist\\assets\\index-CsY7WTYs.js...
빌드가 잘되는 것을 확인하여 GitHub Actions 스크립트를 작성하여 파이프라인을 구성하였습니다.
ncp에 오브젝트 스토리지와 aws-cli가 호환이 가능하여 aws-cli를 설치를 하여 업로드를 하려고 하였으나 의존성 중 하나인 PyYAML 패키지를 설치하지 못해서 발생하는 문제가 발생하여 최신 버전에 pip를 업그레이드, aws-cli 설치 후 aws-cli가 의존하는 pyYAML 라이브러리를 설치하여 해결하였습니다.
note: This error originates from a subprocess, and is likely not a problem with pip.
error: legacy-install-failure
× Encountered error while trying to install package.
╰─> PyYAML
note: This is an issue with the package mentioned above, not pip.
hint: See above for output from the failure.
Error: Process completed with exit code 1.
# 의존성 중 하나인 PyYAML 패키지를 설치하지 못해서 발생하는 문제
GitHub Actions 작성
name: Release Frontend Build
on:
push:
branches:
- release
jobs:
build-and-upload:
runs-on: ubuntu-latest
steps:
# 1. 리포지토리 클론
- name: Checkout code
uses: actions/checkout@v4
# 2. Node.js 환경 설정
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
# 3. 의존성 설치
- name: Install dependencies
working-directory: ./frontend
run: npm ci
# 4. 난독화 및 빌드
- name: Build and Obfuscate
working-directory: ./frontend
run: npm run build # 빌드 실행
# 5. PyYAML 및 AWS CLI 설치
- name: Install dependencies
run: |
pip install --upgrade pip # 최신 버전의 pip로 업그레이드합니다.
pip install PyYAML # awscli가 의존하는 PyYAML 라이브러리를 설치합니다.
pip install awscli --upgrade --no-cache-dir # 최신 버전의 AWS CLI를 설치합니다.
# 6. 빌드 파일 업로드
- name: Deploy
env:
AWS_ACCESS_KEY_ID: ${{ secrets.NCP_ACCESS_KEY }} # AWS CLI 인증정보
AWS_SECRET_ACCESS_KEY: ${{ secrets.NCP_SECRET_KEY }}
run: |
aws --endpoint-url=https://kr.object.ncloudstorage.com s3 cp --recursive ./frontend/dist s3://load-to-friendly-bucket
/var/www/html/
)에 빌드 파일 배포./var/www/backup/
에 백업 후 교체.www-data
권한구성.www-data
name: Release Frontend Build
on:
push:
branches:
- release
jobs:
build-and-upload:
runs-on: ubuntu-latest
steps:
# 1. 리포지토리 클론
- name: Checkout code
uses: actions/checkout@v4
# 2. Node.js 환경 설정
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
# 3. 의존성 설치
- name: Install dependencies
working-directory: ./frontend
run: npm ci
# 4. 빌드
- name: Build and Obfuscate
working-directory: ./frontend
run: npm run build # 빌드 실행
# 5. 빌드된 파일을 인스턴스 서버로 전송
- name: Deploy to EC2
uses: appleboy/scp-action@master
with:
host: ${{ secrets.SSH_HOST }} # 서버의 호스트 IP
username: ${{ secrets.SSH_USERNAME }} # SSH 사용자명
key: ${{ secrets.SSH_KEY }} # SSH 비공개 키
source: "frontend/dist/*" # 빌드된 파일이 있는 디렉토리
target: "/tmp/build" # 원격 서버로 파일을 복사할 디렉토리
strip_components: 2 # 상위 디렉토리 레벨을 제거
# 6. 백업 및 기존파일 삭제, 복사
- name: Configure EC2
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SSH_HOST }} # 서버의 호스트 IP
username: ${{ secrets.SSH_USERNAME }} # SSH 사용자명
key: ${{ secrets.SSH_KEY }} # SSH 비공개 키
script: |
# 기존 파일 백업 (롤백을 위해)
sudo tar -czf /var/www/backup/$(date +%Y%m%d_%H%M%S).tar.gz -C /var/www/html .
# 새 빌드 파일 복사
# sudo rm -rf /var/www/html/*
sudo cp -r /tmp/build/* /var/www/html/
# 권한 설정
sudo chown -R www-data:www-data /var/www/html
# Nginx 설정 확인 및 리로드(기존 연결을 끊지 않고 새로운 설정 적용)
sudo nginx -t && sudo systemctl reload nginx