Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 마이에스큐엘
- 클라우드
- azure deveops
- 조인
- Pull
- 배포
- slack
- 자동화
- CI/CD
- aws devops
- 데브옵스
- Azure
- AWS
- node.js
- deveops
- docker
- MySQL
- nginx
- 자동배포
- CSS
- git
- 데이터타입
- github
- 리액트
- devops
- 도커
- azure devops
- PIPELINE
- 배포자동화
- react
Archives
- Today
- Total
Full_Stack developer
Ec2+Docker+github Action+React 배포 본문
리액트 애플리케이션에 대해 Docker를 사용하여 CI/CD를 설정하려면, GitHub Actions와 Docker를 조합해 클라이언트 빌드 및 배포를 자동화할 수 있습니다. 아래는 리액트 애플리케이션만을 위한 단계별 설정입니다.
1. React 프로젝트용 Dockerfile 작성
React 프로젝트 루트 디렉토리에 Dockerfile을 생성합니다:
# 1단계: Node.js 환경에서 React 빌드
FROM node:16 AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm run build
# 2단계: Nginx로 빌드 결과 제공
FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
2. GitHub Actions 설정
리액트 애플리케이션을 Docker 이미지로 빌드하고 EC2에 배포하는 GitHub Actions 워크플로우를 생성합니다.
GitHub Actions Workflow 파일 생성
.github/workflows/react-deploy.yml 파일 작성:
name: React CI/CD without Docker Hub
on:
push:
branches:
- main # main 브랜치에 푸시될 때 실행
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# 1. GitHub Repository 체크아웃
- name: Checkout Repository
uses: actions/checkout@v3
# 2. Docker 빌드
- name: Build Docker Image
run: |
docker build -t portfolio_client:latest -f Dockerfile .
# 3. Docker 이미지 압축
- name: Save Docker Image
run: |
docker save portfolio_client:latest | gzip > portfolio_client.tar.gz
# 4. EC2 서버로 Docker 이미지 전송
- name: Transfer Docker Image to EC2
env:
EC2_PRIVATE_KEY: ${{ secrets.EC2_PRIVATE_KEY }}
EC2_PUBLIC_IP: ${{ secrets.EC2_PUBLIC_IP }}
run: |
mkdir -p ~/.ssh
echo "$EC2_PRIVATE_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
scp -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa portfolio_client.tar.gz ubuntu@$EC2_PUBLIC_IP:/home/ubuntu/
# 5. EC2에서 Docker 이미지 로드 및 실행
- name: Load and Run Docker Image on EC2
env:
EC2_PRIVATE_KEY: ${{ secrets.EC2_PRIVATE_KEY }}
EC2_PUBLIC_IP: ${{ secrets.EC2_PUBLIC_IP }}
run: |
ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa ubuntu@$EC2_PUBLIC_IP << 'EOF'
docker load < /home/ubuntu/portfolio_client.tar.gz
docker stop portfolio_client || true && docker rm portfolio_client || true
docker run -d --name portfolio_client -p 80:80 portfolio_client:latest
EOF
해당 프로젝트 디렉토리 최상위에
Dockerfile생성
# 1단계: Node.js 환경에서 React 빌드
FROM node:16 AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm run build
# 2단계: Nginx로 빌드 결과 제공
FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
3. GitHub Secrets 설정
GitHub Repository의 Settings > Secrets and variables > Actions에서 아래 값을 추가합니다:
- DOCKER_USERNAME: Docker Hub 사용자 이름.
- DOCKER_PASSWORD: Docker Hub 비밀번호.
- EC2_PRIVATE_KEY: EC2 서버에 접근 가능한 SSH 프라이빗 키.(ppm파일 메모장 내용)
- EC2_PUBLIC_IP: EC2 인스턴스의 퍼블릭 IP.
4. EC2 환경 설정
EC2에 Docker 설치
EC2에서 Docker를 설치하고 설정합니다:
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
5. 작동 방식
- 리액트 프로젝트를 수정 후 GitHub의 main 브랜치에 푸시하면 워크플로우가 실행됩니다.
- Docker 이미지를 빌드하고 Docker Hub에 푸시합니다.
- EC2에 연결하여 최신 Docker 이미지를 가져오고 컨테이너를 재실행합니다.
- Nginx가 자동으로 새 컨테이너를 통해 정적 파일을 제공합니다.
필요하면 위 내용을 더 구체적으로 확장할 수 있습니다! 😊
'Devops > Docker' 카테고리의 다른 글
Docker배포-Node.js (0) | 2024.12.28 |
---|---|
Docker배포-Spring Boot (0) | 2024.12.28 |
Docker배포-React (0) | 2024.12.28 |
Dockerfile 이란? (1) | 2024.12.28 |
Docker 설치와 컨테이너 실행 (0) | 2024.12.28 |