• SEARCH

    통합검색
  • Habom
    • 개인사업자
      • 사업자관리
      • 세금관리
      • 법률
    • SynologyNAS
      • NAS(System)
      • NAS(Docker)
      • XPEnology
    • Store
      • store-apple
      • store-google
    • 해봄 도구
    • 홍보하기
    • Gallery
    • 기타
      • Q&A
      • 방명록
      • 발자취
  • SynologyNAS
    • NAS(System)
    • NAS(Docker)
    • XPEnology

    COMMENT

    • 댓글 테스트입니다
      11.06

    NOTICE

    • 첫 공지글 - 허브 해봄 시작!
      2025.11.06 3
    • 공지사항 게시글입니다. (테스트용)
      2025.11.06

    Habom Tools

    • [마케팅 해봄] SNS Auto Content
      2026.01.12 3
    • [리소스 해봄] NCS Player v1.0
      2025.12.22 3
    • [마켓 해봄] Habom Market Studio Tools v.1.0.0
      2025.12.16 4

    홍보하기

    • 홍보하기 관리 게시글입니다. (테스트용)
      2025.11.06

    QA

    • Q&A 관리 게시글입니다. (테스트용)
      2025.11.06
    • Today0
    • Yesterday0
    • Total0
  • SynologyNAS NAS(Docker)
    • SynologyNAS NAS(Docker)
    • Docker - Market habom 설치

      • habom
      • 2025.12.16 - 18:08 2025.12.16 - 11:24 9

     

    update: 2025.12.16 참고사항

    • 상단의 git repositories 에서 다운 받을 수 있습니다.
    • habom-template을 사용하면 아래 설명과 같이 수정 후 사용 가능합니다.
    • habom-localhost는 아래의 설명에 대한 최종적용된 버전으로 'docker-compose up -d" 를 실행하여 바로 수행 가능합니다. 

     

    docker-compose.yaml 설정파일 받기

    github, https://github.com/kmelonLab/kmelon-market

     

     

    목차

    Step 01: Docker 환경 변수(~/.env) 수정하기

    Step 02: backend-market 의 환경 변수(.env.production) 수정

    Step 03: backend-pay 의 환경 변수(.env.production) 수정

    Step 04: frontend-market 의 환경 변수(.env.production) 수정

    Step 05: docker-compose.yaml 설정

    Step 06: docker 설치/실행

     

    Step 01: Docker 환경 변수(~/.env) 수정하기

    • 참고: docker-compose.yaml을 이용하여 최초 컨테이너 생성시 필요한 환경 변수 입니다.
    • DB 정보 업데이트
    MYSQL_ROOT_PASSWORD=YOUR_MYSQL_ROOT_PASSWORD
    MYSQL_USER=YOUR_MYSQL_USER
    MYSQL_PASSWORD=YOUR_MYSQL_PASSWORD
    • generated-keys 폴더에 생성된 MySQL 공통 설정의 정보를 입력하시면 됩니다
    • 결제를 위한 보안때문에 직접 입력하기보다 생성된 key를 이용해서 관리하시는거 추천드립니다

     

    # ------------------------------------------------------------------------------
    # MySQL 공통 설정
    # [필수 수정] 보안을 위해 강력한 비밀번호로 변경하세요
    # ------------------------------------------------------------------------------
    MYSQL_ROOT_PASSWORD=uq&Qi%RMpDjNff%B^ut4SmWk
    MYSQL_USER=marketuser
    MYSQL_PASSWORD=$CAf@McTY&9OczrcT5RInCYD
    
    # ------------------------------------------------------------------------------
    # MySQL for Backend-Market
    # [선택 수정] 필요시 데이터베이스명과 포트 변경
    # ------------------------------------------------------------------------------
    MYSQL_MARKET_DATABASE=market_db
    MYSQL_MARKET_PORT=12057
    
    # ------------------------------------------------------------------------------
    # MySQL for Backend-Pay
    # [선택 수정] 필요시 데이터베이스명과 포트 변경
    # ------------------------------------------------------------------------------
    MYSQL_PAY_DATABASE=pay_db
    MYSQL_PAY_PORT=12058
    
    # ------------------------------------------------------------------------------
    # Backend-Pay (NestJS)
    # [선택 수정] 필요시 포트 변경
    # ------------------------------------------------------------------------------
    BACKEND_PAY_PORT=12051
    
    # ------------------------------------------------------------------------------
    # Backend-Market (NestJS)
    # [선택 수정] 필요시 포트 변경
    # ------------------------------------------------------------------------------
    BACKEND_MARKET_PORT=12053
    
    # ------------------------------------------------------------------------------
    # Frontend-Market (Static Files)
    # [선택 수정] 필요시 포트 변경
    # ------------------------------------------------------------------------------
    FRONTEND_MARKET_PORT=12055
    
    • 현재 프로젝트의 database 가되는 DB의 이름 및 포트 번호는 원하시는걸로 수정하시면 됩니다!
    • backend-market: 결제를 제외한 모든 기능을 수행하는 backend API
    • backend-api: 결제관련 메일 송신, 토스페이결제 연동 기능
    • market_db: backend-market 의 데이터베이스
    • pay_db: backend-api의 데이터베이스
    • frontend-market: 상위 background 기반과 연동하여 돌아가는 실제 마켓 페이지

     

    toss payments API Key

    • 토스페이 key 정리를 먼저 하도록 하겠습니다
    키 종류 backend-pay backend-market frontend-market 노출 가능 여부
    Client Key (TOSS_CLIENT_KEY) ✅ 사용 ✅ 사용 ✅ 사용 🟢 공개 가능 (프론트엔드에서 사용)
    Secret Key (TOSS_SECRET_KEY) ✅ 사용 ❌ 미사용 ❌ 미사용 🔴 절대 비공개 (백엔드 전용)
    Security Key (WEBHOOK_SIGNATURE_SECRET) ✅ 사용 ❌ 미사용 ❌ 미사용 🔴 절대 비공개 (Webhook 검증용)

     

    각 키 용도 정리

    키 이름 용도 더미 사용 가능 여부
    TOSS_CLIENT_KEY 프론트 결제 위젯 초기화 ✅ UI 개발용
    TOSS_SECRET_KEY 서버 결제 승인/취소 API ⚠️ API 호출 시 실패
    WEBHOOK_SIGNATURE_SECRET 웹훅 서명 검증 ⚠️ 실제 웹훅 검증 불가

    test Key키를 생성하는 방법은 GPT를 이용하여 키 생성 요청을 하시면 됩니다

     

    prompt

    토스페이먼츠에서 테스트를 하기위한 아래 3개의 키를 생성해줘 
    1. base64를 이용하여 생성되도록 해야한다. 
    2. TOSS_SECRET_KEY는 test_sk_ 으로 시작되어야 한다
    3. TOSS_CLIENT_KEY는 test_ck_ 으로 시작 되어야 한다
    
    TOSS_CLIENT_KEY, TOSS_SECRET_KEY, WEBHOOK_SIGNATURE_SECRET 

     

    테스트용 키 생성 결과

    TOSS_CLIENT_KEY=test_ck_Q0xJRU5UX1RFU1RfQkFTRTY0XzAx
    TOSS_SECRET_KEY=test_sk_U0VDUkVUX1RFU1RfQkFTRTY0XzAy
    WEBHOOK_SIGNATURE_SECRET=V0VCSE9PS19TSUdOQVRVUkVfQkFTRTY0XzAz

    테스트 키는 각 프로젝트에 설정되어야합니다!

     

    Step 02: backend-market 의 환경 변수(.env.production) 수정

    2.1 backend-market 도메인 설정

    # [필수 수정] Backend-Market API가 서비스될 도메인 URL
    API_BASE_URL=YOUR_BACKEND_MARKET_URL
    
    # 실제 입력 값
    API_BASE_URL=http://localhost:12053

    설명

    • docker-compose.yaml 의 backend-market에 설정되는 내부포트번호
    • docker-compose.yaml 내부통신을 하기때문에 상위 예시로 입력하시면됩니다
    • 도메인 연동 시 아래와 같이 backend-market API 주소를 입력하시면 됩니다

     

    https://yourdomain-api.com

     

    2.2 backend-market DB 설정

    # ------------------------------------------------------------------------------
    # Database (MySQL)
    # [필수 수정] Docker .env 파일의 MySQL 설정과 일치해야 합니다
    # ------------------------------------------------------------------------------
    DB_HOST=mysql-market
    DB_PORT=3306
    DB_USERNAME=YOUR_MYSQL_USER
    DB_PASSWORD=YOUR_MYSQL_PASSWORD
    DB_DATABASE=market_db
    DB_CHARSET=utf8mb4
    DB_POOL_MAX=20
    DB_SYNCHRONIZE=true
    DB_LOGGING=false
    DB_TIMEZONE=Z
    • 상단에 있는 docker 환경변수(.env) 파일의 MySQL 정보 입력
    • DB_HOST: docker-compose.yaml의 참조하고자 하는 DB 컨테이너 이름
    • DB_PORT: docker-compose.yaml의 참조하고자 하는 DB 컨테이터의 포트번호
    • 기본 설정은 미리 해두었기때문에 아래 값만 docker 환경변수(.env) 값으로 교체하시면 됩니다.

     

    # 예제에 포함 된 값 
    DB_USERNAME=marketuser
    DB_PASSWORD=$CAf@McTY&9OczrcT5RInCYD

     

    2.3 JWT_SECRET 설정

    # ------------------------------------------------------------------------------
    # JWT Authentication
    # [필수 수정] 반드시 새로운 시크릿 키를 생성하세요
    # 생성 명령어: node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
    # 주의: backend-pay와 동일한 JWT_SECRET을 사용해야 합니다 (토큰 공유)
    # ------------------------------------------------------------------------------
    JWT_SECRET=YOUR_JWT_SECRET_64_BYTES_HEX
    JWT_EXPIRES_IN=1h
    • JWT_SECRET: ✅ “인증 정보를 담은 토큰을 검증하기 위한 서버 비밀키
    • generated-keys/backend-market.env.production 파일에서 검색 후 아래의 정보를 입력합니다
    JWT_SECRET=5875383480bdb38d8f3ce9df9c64dc0139499da967f5e2f2491ff5141577adab60d5d1f55f6f77f246d71bc7bcd8c65619cd261530760d6e1fab12f74b664a68

     

    2.4 CORS_ORIGIN 설정

    # ------------------------------------------------------------------------------
    # CORS
    # [필수 수정] Frontend 도메인 URL
    # ------------------------------------------------------------------------------
    CORS_ORIGIN=<YOUR_FRONTEND_URL>
    # 예시: https://yourdomain.com
    • frontend-market 의 도메인 입력
    • localhost:12055 포트로 입력하시면 됩니다. (generated-keys로 생성된 PORT번호 입력)
    • 도메인 사용시, 실제 사용자들이 보는 market의 URL 주소를 입력하시면 됩니다. (http, https 주의)

     

    예시

    CORS_ORIGIN=http://localhost:12055 

     

    2.5 swagger 설정

    # ------------------------------------------------------------------------------
    # Swagger
    # [선택 수정] 운영 환경에서는 false 권장
    # ------------------------------------------------------------------------------
    SWAGGER_ENABLED=false
    • Swagger는 REST API의 구조를 시각화하고 바로 테스트할 수 있는 API 문서화 도구입니다.
    • 실제 운영단계에서는 false로 하시면 됩니다. (backend-pay는 cros설정되어있음)

     

    2.6 FRONTEND_URL 설정

    # ------------------------------------------------------------------------------
    # Frontend URL
    # [필수 수정] OAuth 콜백 등에 사용되는 Frontend URL
    # ------------------------------------------------------------------------------
    FRONTEND_URL=<YOUR_FRONTEND_URL>
    # 예시: https://yourdomain.com
    • 소셜 로그인(google, kakao, naver, apple)을 위해서 필요한 정보

     

    # 실제 입력 값
    FRONTEND_URL=http://localhost:12055
    
    # 도메인 사용시 
    FRONTEND_URL=https://yourdomain.com

     

    Step 03: backend-pay 의 환경 변수(.env.production) 수정

    3.0 시작 전 준비

    • 파일명 수정 해주세요! (.env.production.example → .env.production)

    3.1 Toss Payments API 설정

    # Toss Payments API
    TOSS_SECRET_KEY=<YOUR_TOSS_SECRET_KEY>
    TOSS_CLIENT_KEY=<YOUR_TOSS_CLIENT_KEY>
    
    # 실제 입력 값 (테스트 생성)
    TOSS_SECRET_KEY=test_sk_U0VDUkVUX1RFU1RfQkFTRTY0XzAy
    TOSS_CLIENT_KEY=test_ck_Q0xJRU5UX1RFU1RfQkFTRTY0XzAx
    • TOSS_CLIENT_KEY, TOSS_CLIENT_KEY 위에 생성된 키를 그대로 입력하시면 됩니다.

     

    3.2 DB 정보 입력

    # Database (MySQL)
    DATABASE_URL=mysql://<YOUR_MYSQL_USER>:<YOUR_MYSQL_PASSWORD>@mysql-pay:3306/pay_db?charset=utf8mb4
    
    # 실제 입력 값
    DATABASE_URL=mysql://marketuser:$CAf@McTY&9OczrcT5RInCYD@mysql-pay:3306/pay_db?charset=utf8mb4
    • docker 환경변수(.env)의 ID:PW 정보를 입력하시면됩니다.
    • 특수문자 중 일부 인식 못하는 경우가 있습니다. 대부분 실행되지만 안되는 경우 특수 문자 제거해주세요!

     

    3.3 JWT_SECRET 설정

    # ------------------------------------------------------------------------------
    # JWT Authentication
    # [필수 수정] backend-market과 동일한 JWT_SECRET 사용 (토큰 공유)
    # 생성: node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
    # ------------------------------------------------------------------------------
    JWT_SECRET=<YOUR_JWT_SECRET_64_BYTES_HEX>
    JWT_EXPIRES_IN=1h
    • JWT_SECRET: ✅ “인증 정보를 담은 토큰을 검증하기 위한 서버 비밀키
    • generated-keys/backend-pay.env.production 파일에서 검색 후 아래의 정보를 입력합니다

     

    3.4 API_KEY 설정

    # 기존
    API_KEY=<YOUR_API_KEY_32_BYTES_HEX>
    
    # 수정
    API_KEY=161652421a9d0b991b1868d74b96f50cd71e36c1b81f8aac0c80fdd8760073b9
    • 내부 API 인증 키 정보도 복사!

     

    3.5 CORS_ORIGIN 설정

    # ------------------------------------------------------------------------------
    # CORS
    # [필수 수정] Frontend 도메인 URL
    # ------------------------------------------------------------------------------
    CORS_ORIGIN=<YOUR_FRONTEND_URL>
    # 예시: https://yourdomain.com
    
    # 실제 입력 값
    CORS_ORIGIN=http://localhost:12055
    • backend-apy api를 호출 할 수 있는 곳을 지정할 수 있습니다. (필수 설정 값)

     

     

    3.6 Swagger 접근 제어 설정

    # ------------------------------------------------------------------------------
    # Swagger
    # [필수 수정] Swagger UI 접근 제어
    # 운영 환경에서는 비활성화 또는 강력한 비밀번호 사용 권장
    # ------------------------------------------------------------------------------
    SWAGGER_USER=admin
    SWAGGER_PASSWORD=<YOUR_SWAGGER_PASSWORD>
    # [필수 수정] 허용할 IP 주소 목록 (쉼표로 구분)
    SWAGGER_IP_WHITELIST=<YOUR_ADMIN_IP_1>,<YOUR_ADMIN_IP_2>
    
    # 실제 입력 값
    SWAGGER_USER=admin
    SWAGGER_PASSWORD=4090b930926564eef809bcf9f6bb1027
    SWAGGER_IP_WHITELIST=127.0.0.1,::1

     

    • swagger에 접속할 수 있는 ID/PW 및 화이트리스트(접근 가능한 IP) 설정
    • 서버와 같은 망으로 설정도 가능합니다! 하지만 localhost에서만 작업하는 것 권장

     

    ::1 이란?::1은 IPv6에서의 localhost 주소입니다.

    주소 의미
    127.0.0.1 IPv4 localhost
    ::1 IPv6 localhost

    즉 둘 다 “내 컴퓨터 자기 자신”을 가리키지만 👉 IP 버전만 다른 것입니다.

     

     

    3.7 WEBHOOK_SIGNATURE_SECRET 설정 값

    # ------------------------------------------------------------------------------
    # Webhook Configuration
    # [필수 수정] TossPayments 웹훅 설정
    # WEBHOOK_SIGNATURE_SECRET: TossPayments 대시보드에서 제공하는 Secret 또는 직접 생성
    # 생성: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
    # ------------------------------------------------------------------------------
    WEBHOOK_SIGNATURE_SECRET=<YOUR_WEBHOOK_SIGNATURE_SECRET_64_CHARS>
    # TossPayments 웹훅 IP 화이트리스트 (변경하지 마세요 - TossPayments 공식 IP)
    WEBHOOK_IP_WHITELIST=13.124.18.147,13.124.108.35,3.36.173.151,3.38.81.32,115.92.221.121,115.92.221.122,115.92.221.123,115.92.221.125,115.92.221.126,115.92.221.127
    WEBHOOK_IP_WHITELIST_ENABLED=true
    WEBHOOK_MAX_RETRIES=3
    WEBHOOK_BASE_DELAY_MS=60000
    WEBHOOK_MAX_DELAY_MS=3600000
    
    # 실제 입력 값
    WEBHOOK_SIGNATURE_SECRET=V0VCSE9PS19TSUdOQVRVUkVfQkFTRTY0XzAz

     

    • 실제 마켓 사용시 토스페이먼츠에서 제공되는 값을 사용해야 합니다
    • 테스트용 (상위 생성된 정보 이용) 임의로 생성된 key 사용토스페이먼츠에서 제공하는 key 사용시 web에서 api 호출 연동 확인가능

     

    3.8 SMTP 설정

    # ------------------------------------------------------------------------------
    # Email/SMTP Configuration
    # [필수 수정] 이메일 발송 설정
    # ------------------------------------------------------------------------------
    SMTP_HOST=<YOUR_SMTP_HOST>
    SMTP_PORT=465
    SMTP_SECURE=true
    SMTP_USER=<YOUR_SMTP_USER>
    SMTP_PASSWORD=<YOUR_SMTP_PASSWORD>
    SMTP_TLS_REJECT_UNAUTHORIZED=true
    EMAIL_FROM=<YOUR_EMAIL_FROM>
    EMAIL_FROM_NAME=<YOUR_SERVICE_NAME>
    # 예시:
    # SMTP_HOST=smtp.gmail.com
    # [email protected]
    # [email protected]
    # EMAIL_FROM_NAME=Your Service Name

     

    • 현재 mail 서버를 운영하거나 SMTP 등의 정보를 가지고 계시면 입력 하시면됩니다!
    • 마켓 내부에서 결제가 진행되면, backend-pay가 smtp를 이용하여 결제완료 메일 발송 됩니다
    • 토스페이먼츠가 보내는 건 자동으로 발송되는 겁니다! (참고: 테스트 키 사용시 URL만 생성되고 아무런 내용이 없습니다)


     

    3.9 토스페이먼츠 결제 금액 설정

    # ------------------------------------------------------------------------------
    # Payment Validation (결제 금액 검증)
    # [선택 수정] 서비스에 맞게 조정
    # ------------------------------------------------------------------------------
    PAYMENT_MIN_AMOUNT=100
    PAYMENT_MAX_AMOUNT=10000000
    PAYMENT_DAILY_LIMIT=50000000
    PAYMENT_DAILY_TRANSACTION_LIMIT=100
    PAYMENT_ANOMALY_THRESHOLD=3
    PAYMENT_AVERAGE_AMOUNT=100000

     

    • 결제 금액의 최하/최고 금액을 설정할 수 있도록 하였습니다.
    • 100원부터 결제 가능합니다

     

    3.10 Encryption 암호화 설정

    # ------------------------------------------------------------------------------
    # Encryption (민감 데이터 암호화)
    # [필수 수정] 암호화 마스터 키 생성
    # ENCRYPTION_KEY_PROVIDER: local, aws_kms, azure_key_vault
    # ENCRYPTION_MASTER_KEY 생성: node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
    # ------------------------------------------------------------------------------
    ENCRYPTION_KEY_PROVIDER=local
    ENCRYPTION_MASTER_KEY=<YOUR_ENCRYPTION_MASTER_KEY_BASE64>
    ENCRYPTION_KEY_VERSION=1
    ENCRYPTION_PREVIOUS_KEYS=

     

    • generated-keys/backend-pay.env.production 파일에서 검색 후 아래의 정보를 입력합니다
    • ENCRYPTION_MASTER_KEY는 데이터베이스에 저장되는 민감한 개인정보를 암호화하기 위한 마스터 암호화 키입니다.
    • AES-256-GCM 암호화 알고리즘을 사용하며, 결제 시스템에서 고객 정보를 보호하는 핵심 보안 요소입니다.
    • 쉽게 말해서, 결제 정보 암호화 설정입니다!

     

    3.11 기타

    
    # ------------------------------------------------------------------------------
    # Elasticsearch (로그 중앙화, 선택사항)
    # [선택] 설정하지 않으면 ES 연동 비활성화
    # ------------------------------------------------------------------------------
    ELASTICSEARCH_URL=
    ELASTICSEARCH_USERNAME=
    ELASTICSEARCH_PASSWORD=
    ELASTICSEARCH_INDEX_PREFIX=tosspayments-logs
    ELASTICSEARCH_TLS_REJECT_UNAUTHORIZED=true
    
    # ------------------------------------------------------------------------------
    # Sentry APM (선택사항)
    # [선택] 에러 모니터링 서비스
    # ------------------------------------------------------------------------------
    SENTRY_DSN=
    

     

    • 상위 정보는 현재 미구현된 기능입니다.
    • pay의 공격(?) 모니터링을 위한 대시보드 연동을 위해 미리 만들어두었고 향후 “천천히” 업데이트 예정입니다.
    • self-hosting기반으로 대시보드 구성이 가능하여 테스트 먼저 할 예정입니다.

     

    Step 04: frontend-market 의 환경 변수(.env.production) 수정

    4.0 시작 전 준비

    • 파일명 수정 해주세요! (.env.production.example → .env.production)

     

    4.1 URL 설정

    # API URLs
    # [필수 수정] Backend API 서버 URL
    VITE_API_URL=YOUR_BACKEND_MARKET_URL/api
    VITE_PAYMENT_API_URL=YOUR_BACKEND_PAY_URL
    
    # 예시:
    # VITE_API_URL=https://api.yourdomain.com/api
    # VITE_PAYMENT_API_URL=https://pay.yourdomain.com

    실제 입력값

    VITE_API_URL=http://localhost:12053/api
    VITE_PAYMENT_API_URL=http://localhost:12051

     

    • backend-api (market, pay) 정보를 입력 하는 곳입니다.
    • 실제 도메인 이용시 상위 예시를 참고하시면 됩니다

     

    4.2 TossPayments 설정

    
    # TossPayments Client Key
    # [필수 수정] TossPayments에서 발급받은 Client Key
    # 테스트: test_ck_xxxxxxxx
    # 운영: live_ck_xxxxxxxx
    VITE_TOSS_CLIENT_KEY=<YOUR_TOSS_CLIENT_KEY>
    
    # 실제 입력 값
    VITE_TOSS_CLIENT_KEY=test_ck_Q0xJRU5UX1RFU1RfQkFTRTY0XzAx

    앞서 GPT로 생성한 토스페이먼츠 key를 입력 하시면됩니다.

     

    4.3 언어/시간대 설정

    # Display Settings
    # [선택 수정] 표시 설정
    VITE_DISPLAY_TIMEZONE=Asia/Seoul
    VITE_DISPLAY_LOCALE=ko-KR

     

    • 현재 다국어를 기반으로 생각하고 마켓을 개발하였는데, 시간대 및 언어 설정 가능합니다.
    • 관리자 플랫폼 메뉴에서 설정하면 전체 설정변경되기때문에 참고만 하시면 됩니다.

     

    Step 05: docker-compose.yaml 설정

    5.0 docker-compose.yaml 설정

    • 마지막 설정 작업이네요!
    version: '3.8'
    
    services:
      # ============================================
      # MySQL for Backend-Market
      # ============================================
      mysql-market:
        image: mysql:8.4.2
        container_name: habom-market-mysql
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
          MYSQL_DATABASE: ${MYSQL_MARKET_DATABASE}
          MYSQL_USER: ${MYSQL_USER}
          MYSQL_PASSWORD: ${MYSQL_PASSWORD}
          TZ: ${TZ}
        ports:
          - "${MYSQL_MARKET_PORT}:3306"
        volumes:
          - ./mysql-market/data:/var/lib/mysql
          - ./mysql-market/init:/docker-entrypoint-initdb.d
        command:
          - --character-set-server=utf8mb4
          - --collation-server=utf8mb4_unicode_ci
        healthcheck:
          test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
          interval: 10s
          timeout: 5s
          retries: 10
          start_period: 30s
        networks:
          - market-network
    
      # ============================================
      # MySQL for Backend-Pay
      # ============================================
      mysql-pay:
        image: mysql:8.4.2
        container_name: habom-pay-mysql
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
          MYSQL_DATABASE: ${MYSQL_PAY_DATABASE}
          MYSQL_USER: ${MYSQL_USER}
          MYSQL_PASSWORD: ${MYSQL_PASSWORD}
          TZ: ${TZ}
        ports:
          - "${MYSQL_PAY_PORT}:3306"
        volumes:
          - ./mysql-pay/data:/var/lib/mysql
          - ./mysql-pay/init:/docker-entrypoint-initdb.d
        command:
          - --character-set-server=utf8mb4
          - --collation-server=utf8mb4_unicode_ci
        healthcheck:
          test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
          interval: 10s
          timeout: 5s
          retries: 10
          start_period: 30s
        networks:
          - market-network
    
      # ============================================
      # Backend-Pay (NestJS)
      # ============================================
      backend-pay:
        image: habom/backend-pay:1.0.7
        container_name: habom-market-pay
        restart: always
        env_file:
          - ./backend-pay/.env.production
        ports:
          - "${BACKEND_PAY_PORT}:8080"
        depends_on:
          mysql-pay:
            condition: service_healthy
        networks:
          - market-network
    
      # ============================================
      # Backend-Market (NestJS)
      # ============================================
      backend-market:
        image: habom/backend-market:1.0.7
        container_name: habom-market-backend
        restart: always
        env_file:
          - ./backend-market/.env.production
        ports:
          - "${BACKEND_MARKET_PORT}:8081"
        volumes:
          - ./backend-market/uploads:/app/uploads
        depends_on:
          mysql-market:
            condition: service_healthy
        networks:
          - market-network
    
      # ============================================
      # Frontend-Market (Static Files)
      # ============================================
      frontend-market:
        image: habom/frontend-market:1.0.7
        container_name: habom-market-frontend
        restart: always
        env_file:
          - ./frontend-market/.env.production
        ports:
          - "${FRONTEND_MARKET_PORT}:3000"
        depends_on:
          - backend-market
          - backend-pay
        networks:
          - market-network
    
    networks:
      market-network:
        driver: bridge
    

    현재 버전을 그대로 사용해도 상관 없지만, 추후 docker hub의 이미지가 업데이트가 될 경우, 수정할 부분 먼저 이야기 드리도록 하겠습니다.

     

    docker hub의 이미지 업데이트 시

    image: habom/backend-pay:1.0.7
    image: habom/backend-market:1.0.7
    image: habom/frontend-market:1.0.7

     

    • 각 줄마다 검색하면 docker container를 구성하는 이미지가 3개가 있습니다.
    • 2025.12.16일 기준으로 1.0.7 version으로 업로드를 해두었고, 향후 업데이트가 될 경우 버전 교체 후 사용하시면 됩니다.

     

    주의사항

    • DB마이그레이션은 테스트를 하고 업데이트를 진행할 예정이지만, latest를 사용하실 경우 꼭 hyper Backup을 통해 사전에 백업 후 진행해주세요!
    • DB는 mysql 8.4.2 를 고정으로 사용하고 있습니다.

     

    나머지 설정은 docker 환경변수(.env) 와 각각의 컨테이너 환경변수(.env.production)에 의해서 자동으로 값을 불러오도록 해두었습니다. 그리고 내부 networks 구성으로 인해 내부통신은 가능한 형태이구요!

     

     

    docker container name 변경 시

    container_name: habom-market-mysql
    container_name: habom-pay-mysql
    container_name: habom-market-pay
    container_name: habom-market-backend
    container_name: habom-market-frontend

     

    상위 이름을 변경하게 되면 아래 각각 depends on항목의 값을 변경해야 합니다.

    # backend-pay:
    backend-pay:
    depends_on:
          mysql-pay:
            condition: service_healthy
    
    # backend-market:
    backend-market:
    depends_on:
          mysql-market:
            condition: service_healthy
    
    # frontend-market:
    depends_on:
          - backend-market
          - backend-pay

     

     

    Step 06: docker 설치/실행

    6.0 필요한 도구/재료

    • docker 구동 가능한 환경이라고 가정하겠습니다.- 필수: docker desktop, nas, aws 등 - 있으면 좋은 것1) 개인 도메인 : 개인도메인 사용시 역방향프록시(https) 등 설정 필요 함2) 메일 서버 (self-hosting, google SMTP, 기타 SMTP 정보)

    6.1 docker desktop 설치/실행

    • docker-compose.yaml 파일이 있는 경로에 terminal 실행
    # 모든 서비스 시작
    docker-compose up -d
    
    # 로그 확인
    docker-compose logs -f
    
    # 특정 서비스 로그 확인
    docker-compose logs -f backend-pay
    

     

    console 결과

    (base) \habom-localhost2> docker-compose up -d
    time="2025-12-16T11:02:11+09:00" level=warning msg="The \"CAf\" variable is not set. Defaulting to a blank string."
    time="2025-12-16T11:02:11+09:00" level=warning msg="The \"CAf\" variable is not set. Defaulting to a blank string."
    time="2025-12-16T11:02:11+09:00" level=warning msg="The \"CAf\" variable is not set. Defaulting to a blank string."
    time="2025-12-16T11:02:11+09:00" level=warning msg="The \"CAf\" variable is not set. Defaulting to a blank string."
    time="2025-12-16T11:02:11+09:00" level=warning msg="D:\\KmelonGitLab25\\Proj-tosspayments\\tosspaymentsapi\\Proj-docker\\habom-localhost2\\docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion"
    time="2025-12-16T11:02:11+09:00" level=warning msg="The \"CAf\" variable is not set. Defaulting to a blank string."
    time="2025-12-16T11:02:11+09:00" level=warning msg="The \"CAf\" variable is not set. Defaulting to a blank string."
    [+] Running 32/32
     ✔ mysql-pay Pulled                                                                                                                                                                        21.6s 
     ✔ backend-market Pulled                                                                                                                                                                    4.0s 
     ✔ frontend-market Pulled                                                                                                                                                                   3.9s 
     ✔ backend-pay Pulled                                                                                                                                                                       3.9s 
     ✔ mysql-market Pulled                                                                                                                                                                     21.6s 
    [+] Running 6/6
     ✔ Network habom-localhost2_market-network  Created                                                                                                                                         0.0s 
     ✔ Container habom-market-mysql             Healthy                                                                                                                                        21.3s 
     ✔ Container habom-pay-mysql                Healthy                                                                                                                                        21.4s 
     ✔ Container habom-market-backend           Started                                                                                                                                        21.2s 
     ✔ Container habom-market-pay               Started                                                                                                                                        21.3s 
     ✔ Container habom-market-frontend          Started   

     

    http://localhost:12055/ 접속하시면 마켓 초기 페이지 접속 가능합니다.

    관리자 계정 생성이 필요합니다!

     

    2부에서 계속!!

    이 게시물을..
    N
    0
    0
    • Docker - Penpot (docker-compose.yaml)habom
    • 0
      habom

    habom 님의 최근 글

    [마케팅 해봄] SNS Auto Content 3 2026 01.12 [리소스 해봄] NCS Player v1.0 3 2025 12.22 [마켓 해봄] Habom Market Studio Tools v.1.0.0 4 2025 12.16 Docker - Market habom 설치 9 2025 12.16 [백업 해봄] BackupScriptHabom v1.0 백업 도구! 1 2025 11.24

    habom 님의 최근 댓글

    댓글 테스트입니다 2025 11.06
    글쓴이의 서명작성글 감추기 
    댓글 쓰기 에디터 사용하기 닫기
    • view_headline 목록
    • 14px
    • Docker - Penpot (docker-compose.yaml)
    • 목록
      view_headline
    × CLOSE
    기본 (4) 제목 날짜 수정 조회 댓글 추천 비추
    분류 정렬 검색
    • 공개용 docker 링크
      2025.11.14 - 23:35 1
    번호 제목 글쓴이 날짜 조회 수
    Docker - Market habom 설치
    habom 2025.12.16 9
    3
    Docker - Penpot (docker-compose.yaml)
    habom 2025.11.24 1
    2
    docker-compose.yaml - Penpot
    habom 2025.11.13 1
    1
    NAS Docker 관리 게시글입니다. (테스트용)
    habom 2025.11.06 0
    • 1
    • / 1 GO
  • Habom
  • 설명1
  • 설명2
  • 설명3
  • 설명4
  • 개인사업자
    • 사업자관리
    • 세금관리
    • 법률
  • SynologyNAS
    • NAS(System)
    • NAS(Docker)
    • XPEnology
  • Store
    • store-apple
    • store-google
  • 해봄 도구
  • 홍보하기
  • Gallery
  • 기타
    • Q&A
    • 방명록
    • 발자취
 Copyright © habom all rights reserved.
by OrangeDay