사진 데이터를 많이 사용하기 때문에 Azure Blob Stroge를 사용한다.
AWS S3 → Azure Blob Storage
ChatGPT와의 대화
리소스 그룹 생성 완료
Dockerfile 작성 및 로컬 테스트
ACR 생성
Docker 이미지 저장소 만들기 (Azure CLI)
Docker 이미지 빌드 & ACR에 push
로컬에서 도커 이미지 올리기
CI/CD 구성 (GitHub Actions)
push 시 자동으로 Docker build + ACR push
📦 (병행) Blob Storage 생성
루트에 생성
1) Dockerfile
# Stage 1: 빌드 단계
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Stage 2: 실행 단계
FROM node:18-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package*.json ./
COPY .env .env
EXPOSE 3000
CMD ["node", "--experimental-global-webcrypto", "dist/main"]
2) .dockerignore
node_modules
dist
3) 테스트 빌드
docker build -t my-backend-app .
docker run --env-file .env -p 3000:3000 my-backend-app
여기서 중간에 데이터베이스 연결 오류가 있었고,
1. DATABASE_로 .env 파일 변수명을 바꾸다
2. DATABASE_HOST = host.docker.internal로 바꾸다
3.
docker rm -f test-backend
docker build -t my-backend-app .
docker run --env-file .env -p 3000:3000 my-backend-app
실행하다
의 단계를 거쳐 해결했다.
https://learn.microsoft.com/ko-kr/cli/azure/install-azure-cli-windows?pivots=winget
1) 위 링크의 방법으로 AzureCLI를 설치
winget install --exact --id Microsoft.AzureCLI
2) Azure 로그인
az login
3) Azure Resource Group
리소스 그룹 생성하기
az group create --name project-rg --location koreacentral
3) ACR 생성하기
az acr create --name projectname --resource-group project-rg --sku Basic --location koreacentral
3) 도커 로컬 이미지를 ACR 이미지 태깅하기
docker tag my-backend-app projectname.azurecr.io/my-backend-app:dev
4) 태그한 이미지 도커에 push하기
docker push projectname.azurecr.io/my-backend-app:dev
push 시 자동으로 Docker build + ACR push
1) docker-build.yaml(.github/workflows/.) 작성
name: Build and Push to ACR
on:
push:
branches:
- dev # 개발 중
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: log in to Azure
uses: azure/login@v1
with:
cred: ${{ secret.AZURE_CREDENTIALS }}
- name: Azure ACR login
run: az acr login --name projectname
- name: Build and push Docker image
run: |
docker build -t project.azurecr.io/projectname:dev
docker push project.azurecr.io/projectname:dev
dev 태그 하나만 계속 덮어쓰기 → 용량 증가 거의 없음 → 💰 문제 없음 ✅
${{ github.sha }}로 push할 때마다 새 이미지 생성 → 용량 증가 → 💰 비용 발생 가능 ⚠️
아직 개발 중이기 때문에 전자의 방식을 택했다.
2) GitHub에 필요한 Secret: AZURE_CREDENTIALS
az ad sp create-for-rbac --name "github-acr" --role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/project-rg \
--sdk-auth
az account show --query id --output tsv
진행 중 .env 에러가 발생해서
- name: Create .env file from secret
run: echo "${{ secrets.ENV_FILE }}" > .env
을 docker-build.yml에 추가했다.
이때, .env의 내용을 Repository Secrets에 ENV_FILE 이름으로 저장해야 한다.