Node.js ํ๋ก์ ํธ Docker ๊ตฌ์ฑ ๋ฐ ํด๋ ๊ตฌ์กฐ
์ด ๊ธ์์๋ Node.js ๊ธฐ๋ฐ ์์์ฉ Discord ๋ด ํ๋ก์ ํธ๋ฅผ Docker Compose์ Dockerfile์ ์ฌ์ฉํด ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๋๋ก ํ๊ฒ ๋ค.
MariaDB๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ฌ์ฉํ๋ฉฐ, ์์ค์ฝ๋์ Node.js ๋ชจ๋์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ ๊ตฌ์ฑ์ ๋ณด์ฌ์ค๋ค.
Node.js ํ๋ก์ ํธ ๊ตฌ์กฐ
my-project/
โโโ src/ # TypeScript ์์ค์ฝ๋
โ โโโ repository/
โ โโโ modules/
โ โโโ index.ts # ์ํธ๋ฆฌ ํฌ์ธํธ
โโโ db/ # MariaDB ๋ฐ์ดํฐ ๋ฐ ์ด๊ธฐ ์ฟผ๋ฆฌ
โ โโโ .mariadb/ # DB ์ค์ ๋ฐ์ดํฐ ์ ์ฅ
โ โโโ mariadb_init/ # ์ด๊ธฐ SQL ์คํฌ๋ฆฝํธ
โโโ .env # ํ๊ฒฝ ๋ณ์
โโโ package.json # Node.js ์์กด์ฑ ๊ด๋ฆฌ
โโโ tsconfig.json # TypeScript ์ค์
โโโ Dockerfile # Node.js ์ปจํ
์ด๋ ๊ตฌ์ฑ
โโโ docker-compose.yml # ์๋น์ค ์ ์
Docker Compose ๊ตฌ์ฑ
version: "3.9"
services:
myproject_server:
build:
context: .
dockerfile: ./Dockerfile #ํ๋ก์ ํธ๋ฅผ ์ปจํ
์ด๋์ ๊ตฌ์ฑํ๊ธฐ ์ํด Dockerfile ์คํ
restart: always
depends_on:
- myproject_db #DB๋จผ์ ๋ ๋๊น์ง ๋๊ธฐ
volumes:
- ./src:/app/src #์์ค ์ค์๊ฐ ๋๊ธฐํ
- /app/node_modules #๋ชจ๋ ํ์ผ ์ ์ง
myproject_db:
image: mariadb:11.4
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: mydb
MYSQL_USER: me
MYSQL_PASSWORD: mypw
ports:
- "10001:3306"
volumes:
- ./db/.mariadb:/var/lib/mysql
- ./db/mariadb_init:/docker-entrypoint-initdb.d #์ด๊ธฐ ์คํ ์ฟผ๋ฆฌ๋ฌธ ๋ณต์ฌ
networks:
#ํ์ฌ ์ปดํฌ์ฆ ๋ด์์ ๊ณต์ ํ ๋คํธ์ํฌ
default:
name: my_net
driver: bridge
์ค๋ช :
1. myproject_server
- build: ํ์ฌ ๋๋ ํฐ๋ฆฌ์ Dockerfile์ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ ์ด๋ ๋น๋
- restart: always: ์ปจํ ์ด๋๊ฐ ์ค์ง๋๋ฉด ์๋ ์ฌ์์
- depends_on: DB ์ปจํ ์ด๋๊ฐ ์ค๋น๋ ๋๊น์ง ๋๊ธฐ
- volumes
./src:/app/src: ํธ์คํธ์ ์์ค๋ฅผ ์ปจํ ์ด๋์ ์ค์๊ฐ ๋๊ธฐํ/app/node_modules: ์ปจํ ์ด๋ ๋ด๋ถ ๋ชจ๋ ์ ์ง
2. myproject_db
- image: MariaDB 11.4 ์ฌ์ฉ
- environment: DB ๊ณ์ ๋ฐ ๋น๋ฐ๋ฒํธ ์ค์
- ports: ํธ์คํธ 10001 → ์ปจํ ์ด๋ 3306
- volumes
./db/.mariadb: DB ๋ฐ์ดํฐ ์๊ตฌ ์ ์ฅ./db/mariadb_init: ์ด๊ธฐ SQL ์คํฌ๋ฆฝํธ ์๋ ์คํ
3. ๋คํธ์ํฌ
my_net๋ธ๋ฆฌ์ง ๋คํธ์ํฌ๋ฅผ ํตํด ์ปจํ ์ด๋๋ผ๋ฆฌ ํต์
Dockerfile ๊ตฌ์ฑ
FROM node:20
WORKDIR /app
# package.json ๋ณต์ฌ ํ ์์กด์ฑ ์ค์น
COPY ./package*.json ./
RUN npm install
# ํ๊ฒฝํ์ผ ๋ฐ TypeScript ์ค์ ๋ณต์ฌ
COPY ./.env ./
COPY ./tsconfig.json ./
# TypeScript ๊ธ๋ก๋ฒ ์ค์น
RUN npm install -g typescript ts-node
CMD ["npm", "start"]
์ค๋ช :
- WORKDIR /app : ์ปจํ ์ด๋ ๋ด๋ถ ์์ ๋๋ ํ ๋ฆฌ
- package.json / package-lock.json ๋ณต์ฌ →
npm install๋ก ์์กด์ฑ ์ค์น - ํ๊ฒฝ ๋ณ์, TypeScript ์ค์ ๋ณต์ฌ → ์ปจํ ์ด๋ ๋น๋ ์ ํ์ํ ์ค์ ์ ์ฉ
- TypeScript ๊ธ๋ก๋ฒ ์ค์น →
ts-node๋ก TypeScript ์คํ ๊ฐ๋ฅ - CMD ["npm", "start"] → ์ปจํ ์ด๋ ์์ ์ ํ๋ก์ ํธ ์คํ
์ฌ์ฉ ๋ฐฉ๋ฒ
- ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ ์ค๋น
docker-compose up -d์คํ
logs -f๋ช ๋ น์ผ๋ก ์คํ ๋ก๊ทธ ํ์ธ ๊ฐ๋ฅ
์ด ๊ตฌ์ฑ์ ํตํด ํธ์คํธ์์ ์์ค๋ฅผ ๋ฐ๋ก ์์ ํ๋ฉด์ ์ปจํ ์ด๋์์ ์คํ๋๋ Node.js ๋ด์ ์ค์๊ฐ์ผ๋ก ํ ์คํธํ ์ ์๊ณ , MariaDB ๋ฐ์ดํฐ๋ ์๊ตฌ ์ ์ฅํ ์ ์๋ค.
'๐ง Linux' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Docker] ์์ฝ๊ฒ ๋ฅ์คํธํด๋ผ์ฐ๋ ๊ฐ์ธ๋์ค ๊ตฌ์ฑ (0) | 2025.11.20 |
|---|---|
| [Docker] lsyncd (๋ก์ปฌ) ๋ฐ์ดํฐ ์ด์คํ docker-compose.yaml ๊ตฌ์ฑ (0) | 2025.11.20 |
| Certbot SSL๋ฐ๊ธ ์ต๊ณ ์ ์ ์ฉ ๋ฐฉ๋ฒ with Nginx (0) | 2025.03.04 |
| [Linux] ์๋ฒ์ Nvidia ๊ทธ๋ํฝ ๋๋ผ์ด๋ฒ ์ค์น (1) | 2024.12.12 |
| [๋ฆฌ๋ ์ค] ๋๋ง์ ๋ช ๋ น์ด ๋ง๋ค๊ธฐ (์ปค์คํ ์ปค๋งจ๋) (1) | 2024.11.29 |