본문으로 건너뛰기

Docker Hub 이미지 설치

ABC User Feedback은 공식 Docker 이미지를 제공합니다.
이 문서는 Docker Compose를 이용하여 웹 UI, API 서버, 데이터베이스, SMTP 서버 등 시스템을 로컬에서 빠르게 구성하는 방법을 설명합니다.


1. 사전 요구 사항​

항목설명
Docker20.10 이상
Docker Composev2 이상 권장
사용 포트3000, 4000, 13306, 5080, 25 (로컬에서 비워져 있어야 함)

2. Docker 이미지 구성​

서비스 이름설명Docker 이미지 이름
Web (Admin UI)프론트엔드 웹 UI (Next.js)line/abc-user-feedback-web
API (Backend)백엔드 서버 (NestJS)line/abc-user-feedback-api
MySQL데이터베이스mysql:8.0
SMTP4Dev로컬 테스트용 이메일 서버rnwood/smtp4dev:v3
(선택) OpenSearch검색 기능 및 AI 분석 정확도 향상용opensearchproject/opensearch:2.16.0

3. docker-compose.yml 예시​

name: abc-user-feedback
services:
web:
image: line/abc-user-feedback-web:latest
environment:
- NEXT_PUBLIC_API_BASE_URL=http://localhost:4000
ports:
- 3000:3000
depends_on:
- api
restart: unless-stopped

api:
image: line/abc-user-feedback-api:latest
environment:
- JWT_SECRET=jwtsecretjwtsecretjwtsecret
- MYSQL_PRIMARY_URL=mysql://userfeedback:userfeedback@mysql:3306/userfeedback
- SMTP_HOST=smtp4dev
- SMTP_PORT=25
- SMTP_SENDER=user@feedback.com
# OpenSearch 사용 시 아래 주석을 제거하세요
# - OPENSEARCH_USE=true
# - OPENSEARCH_NODE=http://opensearch-node:9200
ports:
- 4000:4000
depends_on:
- mysql
restart: unless-stopped

mysql:
image: mysql:8.0
command:
[
"--default-authentication-plugin=mysql_native_password",
"--collation-server=utf8mb4_bin",
]
environment:
MYSQL_ROOT_PASSWORD: userfeedback
MYSQL_DATABASE: userfeedback
MYSQL_USER: userfeedback
MYSQL_PASSWORD: userfeedback
TZ: UTC
ports:
- 13306:3306
volumes:
- mysql:/var/lib/mysql
restart: unless-stopped

smtp4dev:
image: rnwood/smtp4dev:v3
ports:
- 5080:80
- 25:25
- 143:143
volumes:
- smtp4dev:/smtp4dev
restart: unless-stopped

# OpenSearch를 사용하려면 아래 주석을 제거하세요
# opensearch-node:
# image: opensearchproject/opensearch:2.16.0
# restart: unless-stopped
# environment:
# - cluster.name=opensearch-cluster
# - node.name=opensearch-node
# - discovery.type=single-node
# - bootstrap.memory_lock=true
# - 'OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m'
# - plugins.security.disabled=true
# - OPENSEARCH_INITIAL_ADMIN_PASSWORD=UserFeedback123!@#
# ulimits:
# memlock:
# soft: -1
# hard: -1
# nofile:
# soft: 65536
# hard: 65536
# volumes:
# - opensearch:/usr/share/opensearch/data
# ports:
# - 9200:9200
# - 9600:9600

volumes:
mysql:
smtp4dev:
# opensearch:

4. 실행 단계​

4.1 Docker 이미지 다운로드 및 실행​

# Docker Compose로 모든 서비스를 백그라운드에서 실행
docker compose up -d

4.2 실행 상태 확인​

# 모든 컨테이너가 정상적으로 실행 중인지 확인
docker compose ps

4.3 서비스 접속 확인​


5. SMTP 설정​

기본적으로 이 구성에서는 smtp4dev를 통해 메일을 테스트할 수 있습니다.

SMTP 테스트 방법​

  1. 웹 애플리케이션에서 사용자 가입을 하거나 사용자 초대 기능을 사용
  2. http://localhost:5080에서 전송된 이메일 확인
  3. 이메일 내용과 첨부파일 등을 테스트

중요: 실제 운영 환경에서는 반드시 외부 SMTP 서버(예: Gmail, SendGrid, 사내 SMTP 등)와 연동해야 합니다.

👉 운영용 SMTP 연동이 필요하다면 SMTP 서버 연동 가이드를 참고하세요.

6. 설치 확인​

6.1 웹 애플리케이션 접속 확인​

브라우저에서 http://localhost:3000으로 접속하여 다음을 확인하세요:

  • 테넌트 생성 화면이 정상적으로 표시되는지
  • 페이지 로딩이 완료되는지
  • JavaScript 오류가 없는지 (브라우저 개발자 도구에서 확인)

6.2 API 서버 상태 확인​

# API 서버 헬스 체크
curl http://localhost:4000/api/health

예상 응답:

{
"status": "ok",
"info": {
"database": {
"status": "up"
}
}
}

6.3 데이터베이스 연결 확인​

# MySQL 컨테이너에 직접 접속하여 데이터베이스 확인
docker compose exec mysql mysql -u userfeedback -puserfeedback -e "SHOW DATABASES;"

# 테이블 생성 확인
docker compose exec mysql mysql -u userfeedback -puserfeedback -e "USE userfeedback; SHOW TABLES;"

6.4 로그 확인​

# 모든 서비스의 로그 확인
docker compose logs

# 특정 서비스의 로그만 확인
docker compose logs api
docker compose logs web
docker compose logs mysql

7. OpenSearch 사용 시 주의사항​

OpenSearch는 검색 기능과 AI 분석의 정확도를 향상시키는 선택적 구성 요소입니다.

7.1 OpenSearch 활성화 방법​

  1. docker-compose.yml 파일에서 api 서비스의 환경 변수 주석 해제:
- OPENSEARCH_USE=true
- OPENSEARCH_NODE=http://opensearch-node:9200
  1. opensearch-node 서비스 주석 해제
  2. volumes: 섹션에서 opensearch: 주석 해제
  3. 포트 9200, 9600이 로컬에서 사용 중이지 않은지 확인

7.2 메모리 요구사항​

주의: OpenSearch는 최소 2GB 이상의 메모리를 요구합니다. 메모리 부족 시 컨테이너가 자동 종료될 수 있습니다.

7.3 OpenSearch 상태 확인​

# OpenSearch 클러스터 상태 확인
curl http://localhost:9200/_cluster/health

# OpenSearch 노드 정보 확인
curl http://localhost:9200/_nodes

# 인덱스 확인
curl http://localhost:9200/_cat/indices

7.4 OpenSearch 비활성화​

OpenSearch를 사용하지 않으려면 docker-compose.yml에서 해당 서비스와 환경 변수를 주석 처리하면 됩니다.


8. 문제 해결​

8.1 포트 충돌 문제​

증상: docker compose up 실행 시 포트 바인딩 오류 발생

해결 방법:

# 사용 중인 포트 확인
lsof -i :3000 # 웹 포트
lsof -i :4000 # API 포트
lsof -i :13306 # MySQL 포트
lsof -i :5080 # SMTP 포트

# 해당 포트를 사용하는 프로세스 종료 후 재시작
docker compose down
docker compose up -d

8.2 컨테이너 시작 실패​

증상: 일부 컨테이너가 시작되지 않거나 계속 재시작됨

해결 방법:

# 컨테이너 상태 확인
docker compose ps

# 실패한 컨테이너의 로그 확인
docker compose logs [서비스명]

# 모든 컨테이너 중지 및 제거
docker compose down

# 볼륨까지 제거 (데이터 손실 주의)
docker compose down -v

# 다시 시작
docker compose up -d

8.3 데이터베이스 연결 오류​

증상: API 서버에서 MySQL 연결 실패

해결 방법:

# MySQL 컨테이너가 완전히 시작될 때까지 대기
docker compose logs mysql

# MySQL 컨테이너에 직접 접속 테스트
docker compose exec mysql mysql -u userfeedback -puserfeedback -e "SELECT 1;"

# API 서비스 재시작
docker compose restart api

8.4 이미지 다운로드 실패​

증상: Docker 이미지를 다운로드할 수 없음

해결 방법:

# Docker Hub 로그인 확인
docker login

# 이미지 수동 다운로드
docker pull line/abc-user-feedback-web:latest
docker pull line/abc-user-feedback-api:latest

# 네트워크 연결 확인
ping hub.docker.com

8.5 메모리 부족 문제​

증상: OpenSearch 컨테이너가 자동 종료됨

해결 방법:

# 시스템 메모리 확인
free -h

# Docker 메모리 사용량 확인
docker stats

# OpenSearch 비활성화 (docker-compose.yml에서 주석 처리)
# 또는 메모리 할당량 증가

9. 참고 링크​


관련 문서​