docker ๋ฐ nginx ์์ ๊ณผ์ ๋ฐ ์ค๋ช
docker, docker-compose, nginx, jenkins, react, ec2 ๋ฐฐํฌ
1. ๋ฐฐํฌ ํ๋ฆ ์์ฝ ๋ฐ q&a
2. ๋ฐฐํฌ ํ๋ก์ ํธ docker ๋ฐ nginx ํ์ผ ์ค์
3. ์ ํจ์ค์ ๊น๋ฉ ์ฐ๊ฒฐ ๋ฐ ci/cd ์ค์
1. ๋์ปค ํ์ผ ์์ฑ
ํ๋ก์ ํธ ์ต์๋จ ๋๋ ํ ๋ฆฌ์ ๋ค์๊ณผ ๊ฐ์ด Dockerfile์ ์์ฑํด์ฃผ์
# Dockerfile
# ์คํ
์ด์ง 1
# ๋ฒ ์ด์ค ์ด๋ฏธ์ง: ๋
ธ๋ (alpine: ๊ฒฝ๋ ๋ฒ์ , builder: stage)
FROM node:18.12.1-alpine as builder
# ์์
๊ฒฝ๋ก ์ค์
WORKDIR "/app"
# ์์กด์ฑ ์ค์น
COPY package.json yarn.lock ./
RUN yarn install --production=false
# ํ๋ก์ ํธ ๊ฐ์ ธ์ค๊ธฐ
COPY . .
# ํ๊ฒฝ๋ณ์ ์ค์
ENV PATH /front-end/node_modules/.bin:$PATH
# ๋น๋
RUN yarn build
# ์คํ
์ด์ง2
# ๋ฒ ์ด์ค ์ด๋ฏธ์ง: ์์ง์์ค(์น์๋ฒ)
FROM nginx
# ์์
๊ฒฝ๋ก ์์ฑํ๊ณ ์ค์
RUN mkdir /app
WORKDIR /app
# ๊ธฐ์กด ์์ง์์ค ์ค์ ํ์ผ ์ง์ฐ๊ณ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ค์ ํ์ผ๋ก ๋์ฒด
RUN rm /etc/nginx/conf.d/default.conf
COPY ./nginx.conf /etc/nginx/conf.d
# builder ์คํ
์ด์ง (๋ฐ๋ก ์)์ ๋น๋ ํ์ผ์ ๊ฐ์ ธ์จ๋ค(๊ฒฝ๋ํ)
COPY --from=builder /app/build /app/build
# 3000๋ฒ ํฌํธ ์ด์ด๋๊ธฐ
EXPOSE 3000
# nginx๋ฅผ ํฌ๊ทธ๋ผ์ด๋๋ก ์คํ
CMD ["nginx", "-g", "daemon off;"]
๋น๋(๋ ธ๋) - ์๋ฒ ์ฐ๊ฒฐ(nginx)์ ๋ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ ๋ฉํฐ์คํ ์ด์ง ๋์ปคํ์ผ์ด๋ค.
๋น๋ ๋จ๊ณ
โ ๋ ธ๋ ๋ฒ์ (ํ๋ก์ ํธ ๋ฒ์ ์ ๋ง๋ ๋ฒ์ )์ ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ก ์ค์ ํ๋ค.
-apline
์ ๋ฆฌ๋ ์ค์์ ์ฐ๋ ๊ฒฝ๋๋ฒ์ as builder
๋ ํด๋น ๋น๋ ์คํ ์ด์ง์ ์ด๋ฆ (์ดํ nginx ์คํ ์ด์ง์ ์ด๋ฆ์ ์ ๊ทผํ๋ค)
โ ์ฐ๊ฒฐ๋ ๋ ํฌ์งํ ๋ฆฌ๋ก๋ถํฐ ํ๋ก์ ํธ๋ฅผ ๊ฐ์ ธ์ ๋น๋๋ฅผ ํด์ค๋ค (๋ณธ ํ๋ก์ ํธ๋ yarn์ ์ฌ์ฉํ๋ค. npm์ ์ฌ์ฉํ์ผ๋ฉด npm ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ฃผ๋ฉด ๋๋ค.)
์๋ฒ ๋ฐฐํฌ ๋จ๊ณ
โ nginx๋ฅผ ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ก ์ค์ ํ๋ค.
โ nginx์ default ์ค์ ํ์ผ์ ์ฐ๋ฆฌ๊ฐ ์์ฑํ nginx ์ค์ ํ์ผ๋ก ๋ฐ๊ฟ์ค๋ค.
โ builer ์คํ ์ด์ง์ ์์ฑํ ๋น๋ ํ์ผ์ ๊ฐ์ ธ์จ๋ค
โ 3000๋ฒ ํฌํธ๋ฅผ ์ด์ด๋๊ณ nginx๋ฅผ ํฌ๊ทธ๋ผ์ด๋๋ก ์คํํ๋ค
2. nginx.conf ํ์ผ ์์ฑ
๋์ปคํ์ผ ์ค๊ฐ์ ๋ณด๋ฉด nginx ์ค์ ์ ํด์ฃผ๋ ๋ถ๋ถ์ด ์๋ค. ํด๋น ์ค์ ํ์ผ์ ๊ฐ์ ์์น (./nginx.conf)์ ์์ฑํด์ฃผ์
server {
listen 3000;
location / {
root /app/build;
index index.html;
try_files $uri $uri/ /index.html;
}
}
โ nginx๋ฅผ ์์์ ์ค์ ํ 3000๋ฒ ํฌํธ์ ๋ํด์ ์ด์ด๋๊ณ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ฃผ๋ ๋ด์ฉ์ ๊ฐ๋จํ ์ค์ ํ์ผ์ด๋ค
โ ํด๋น ํ์ผ์ /etc/nginx/conf.d
๊ฒฝ๋ก์ ๋ฃ์ด์ฃผ๋ฉด ์ปจํ
์ด๋ ๋ด๋ถ์ ๋ฉ์ธ ์ค์ ํ์ผ์ธ /etc/nginx/nginx.conf
ํ์ผ์์ ํด๋น ๊ฒฝ๋ก์ ์๋ ๊ฐ ์๋ฒ์ ๊ฐ๋ณ ์ค์ ํ์ผ์ ์ฝ์ด๋ค์ด๋ ๋ฐฉ์(include)์ด๋ค.
โ ์ฐธ๊ณ ๋ก ํด๋น nginx๋ ์ดํ ๋ฆฌ๋ฒ์ค ํ๋ก์ ๋ฐ ssl์ ์ ์ฉํ ec2 ์๋ฒ ์์ฒด์ nginx๊ฐ ์๋๋ผ frontend ์ปจํ ์ด๋ ๋ด๋ถ์ nginx๊ธฐ ๋๋ฌธ์ ํท๊ฐ๋ฆฌ๋ฉด ์๋๋ค!
3. docker-compose.yml ์์ฑ (์ ํ)
๊ฐ์ ์์น์ docker-compose.yml ํ์ผ์ ์์ฑํด์ฃผ์
์ฌ์ค ์ด ๋ถ๋ถ์ ์์๋ ์ธ๊ธํ๋ฏ์ด ์ ํ์ฌํญ์ด๋ผ ํ๋ก์ ํธ ์ ์ฒด์์ ๊ตณ์ด ๋ฉํฐ์ปจํ ์ด๋ ๊ด๋ฆฌ๋ฅผ ํ ํ์๊ฐ ์์ผ๋ฉด ์๋ตํด๋ ๋๋ค.
version: "3.7"
services:
frontend:
container_name: frontend
build:
context: .
dockerfile: ./Dockerfile
ports:
- "3000:3000"
restart: always
โ ์ฑ๊ธ ์ปจํ ์ด๋๋ผ ์ปจํ ์ด๋ ์ด๋ฆ๊ณผ ๋์ปคํ์ผ ์์น, ํฌํธ ๋ฒํธ๋ง ์ ์ ๊ฐ๋จํ ํ์ผ์ด๋ค
โ ์ด๋ ๊ฒ ์ ์ docker-compose.yml ํ์ผ์ด ๋์ปค์ ๋ํ ์คํํ์ผ ์ญํ ์ ํ๊ฒ ๋ผ ์ดํ jenkins์ ์์คํฌ๋ฆฝํธ๊ฐ ๋งค์ฐ ๋จ์ํด์ง๋ค.
์ฌ๊ธฐ๊น์ง๊ฐ ํ๋ก์ ํธ ํ์ผ์์ ๋์ปค ๋ฐ nginx ์ค์ ํ์ผ์ ์ ๋ ๋ถ๋ถ์ด๋ค.
๋ค์ ๊ธ์์๋ ์ด์ ํด๋น ํ๋ก์ ํธ๊ฐ ์ ๋ก๋๋ gitlab ๋ ํฌ์งํ ๋ฆฌ๋ฅผ jenkins์ ์ฐ๊ฒฐํด CI/CD๋ฅผ ๊ตฌ์ถํด๋ณด๊ฒ ๋ค.
๋๊ธ