GOOGLE_CLIENT_ID=your-google-oauth-client-id.apps.googleusercontent.com GOOGLE_CLIENT_SECRET=your-google-oauth-client-secret # OMS(orderlist) 와 SSO 하려면 양쪽 .env 에 동일한 값으로 설정. # 미설정 시 컨테이너 기동 실패(fail-fast). openssl rand -hex 32 로 생성 권장. SESSION_SECRET_KEY=replace-with-a-long-random-secret SESSION_COOKIE_NAME=session SESSION_COOKIE_SECURE=true # 세션 유효기간(초). OMS(orderlist) 와 동일하게 맞출 것. 28800=8h SESSION_MAX_AGE=28800 # 포털 접근 허용 이메일. 쉼표로 구분. 비워두면 코드의 기본 목록 사용. ALLOWED_EMAILS=king@dbxcorp.co.kr,julie@dbxcorp.co.kr,ellen@dbxcorp.co.kr,bj@dbxcorp.co.kr PUBLIC_BASE_URL=https://dbx.no1king.freeddns.org # 비워두면 같은 도메인의 /corm/ 경로(NPM 리버스 프록시)로 자동 연결됨 CS_ORDER_URL=/corm/ # 비워두면 같은 도메인의 /orderlist/ 경로(NPM 리버스 프록시)로 자동 연결됨 CUSTOMER_ORDER_LIST_URL=/orderlist/ # ─── 개인경비 모듈 (expense_db) ─── # 설정하면 PostgreSQL 사용, 미설정 시 DATA_DIR/expense.json 사용. # DB/역할 생성: scripts/sql/expense_db_init.sql 참고. # EXPENSE_DB_URL=postgresql://expense_app:replace-me@postgres-db:5432/expense_db # ─── 쿠팡 밀크런 모듈 (cupang_db) ─── # 설정해야 모듈이 동작한다(미설정 시 "설정 필요" 안내, JSON 폴백 없음). # DB/역할/스키마/센터 seed 생성: scripts/sql/cupang_db_init.sql 참고. # CUPANG_DB_URL=postgresql://cupang_app:replace-me@postgres-db:5432/cupang_db # ─── 휴가 관리 모듈 (vacation_db) ─── # 설정해야 모듈이 동작한다(미설정 시 "설정 필요" 안내, JSON 폴백 없음). # DB/역할/스키마/공휴일 seed 생성: scripts/sql/vacation_db_init.sql 참고. # 권한키: vacation(접근) / vacation_approver(승인·반려). admin 은 항상 통과. # VACATION_DB_URL=postgresql://vacation_app:replace-me@postgres-db:5432/vacation_db # ─── 말레이시아 창고 재고관리 모듈 (malaysia_stock_db) ─── # 설정해야 모듈이 동작한다(미설정 시 "설정 필요" 안내, JSON 폴백 없음). # DB/역할/스키마/창고·아이템 seed 생성: scripts/sql/malaysia_stock_db_init.sql 참고. # 권한키: malaysia(접근). admin 은 항상 통과. 상품명은 아래 ITEMCODE_DB_URL 재사용. # MALAYSIA_STOCK_DB_URL=postgresql://malaysia_app:replace-me@postgres-db:5432/malaysia_stock_db # ─── 말레이시아 배송 모듈 (dispatch_db) — TikTok 출고관리 ─── # 설정해야 모듈이 동작한다(미설정 시 "설정 필요" 안내, JSON 폴백 없음). # DB/역할/스키마 생성: scripts/sql/dispatch_db_init.sql 참고. # 권한키: dispatch(접근). admin 은 항상 통과. # 업로드 원본 파일은 DATA_DIR/dispatch/<날짜>/<배치>/ 아래에 저장된다. # 개인정보(고객 이름/주소/전화)는 저장하지 않는다. # DISPATCH_DB_URL=postgresql://dispatch_app:replace-me@postgres-db:5432/dispatch_db # ─── 프로젝트 관리 모듈 (project_db) — 아사나식 ─── # 설정해야 모듈이 동작한다(미설정 시 "설정 필요" 안내, JSON 폴백 없음). # DB/역할/스키마 생성: scripts/sql/project_db_init.sql 참고. # 진입 권한: 로그인한 회사 직원 전원(별도 권한키 없음). 프로젝트 생성/배정은 관리자만. # PROJECT_DB_URL=postgresql://project_app:replace-me@postgres-db:5432/project_db # ─── 메일 알림 (SMTP) — 프로젝트 업무 배정/완료 시 관리자 알림 ─── # SMTP_HOST 가 있어야 발송. 미설정 시 조용히 skip(앱은 정상 동작). # SMTP_TLS: true(STARTTLS,587 기본) | ssl(SMTPS,465) | false(평문) # SMTP_HOST=smtp.gmail.com # SMTP_PORT=587 # SMTP_USER=alarm@dbxcorp.co.kr # SMTP_PASSWORD=app-password-here # SMTP_FROM=alarm@dbxcorp.co.kr # SMTP_TLS=true # 알림 수신자(쉼표구분). 비워두면 ERP 관리자(admin) 전원에게 발송. # PROJECT_NOTIFY_EMAIL=king@dbxcorp.co.kr # ─── 카페24 상품 상세페이지 관리 모듈 (cafe24_db) ─── # 설정해야 모듈이 동작한다(미설정 시 "설정 필요" 안내, JSON 폴백 없음). # DB/역할/스키마 생성: scripts/sql/cafe24_db_init.sql 참고. # 권한키: cafe24(접근). admin 은 항상 통과. 카페24 연결(OAuth)은 admin 전용. # CAFE24_DB_URL=postgresql://cafe24_app:replace-me@postgres-db:5432/cafe24_db # # 카페24 개발자센터(https://developers.cafe24.com)에서 앱을 만들고 발급받은 값. # - Redirect URI 는 아래 CAFE24_REDIRECT_URI 와 반드시 동일하게 앱에 등록. # - Scope 는 상품관리에 mall.read_product, mall.write_product 가 필요하다. # (향후 주문관리 추가 시 mall.read_order, mall.write_order 를 앱에 추가하고 # 재인증하면 된다 — 코드는 app/integrations/cafe24/config.py 의 SCOPES) # CAFE24_MALL_ID=miraskitchen # CAFE24_CLIENT_ID= # CAFE24_CLIENT_SECRET= # CAFE24_REDIRECT_URI=https://dbx.no1king.freeddns.org/cafe24/oauth/callback # CAFE24_API_VERSION=2026-03-01 # # access/refresh token 을 DB 에 Fernet 암호화해서 저장할 때 쓰는 키. # openssl rand -hex 32 로 생성. ⚠️ 값을 바꾸면 기존 토큰을 복호화할 수 없어 # 카페24 재연결(재인증)이 필요하다. # CAFE24_TOKEN_SECRET= # ─── 상품 검색 (itemcode_db 읽기 전용) ─── # cupang 설정 화면에서 제품명을 itemcode_db 에서 검색해 등록한다(읽기만). # 미설정 시 검색 비활성 → 수동 등록만 가능. # itemcode_db 실제 테이블: single_items(낱개) / set_items(세트) # 컬럼: item_code, sabangnet_code, name # 읽기 전용 역할 itemcode_ro 를 먼저 생성하고(아래 DSN), 낱개+세트 UNION 검색 SQL 사용: # ITEMCODE_DB_URL=postgresql://itemcode_ro:replace-me@postgres-db:5432/itemcode_db # ITEMCODE_SEARCH_SQL=SELECT item_code AS code, name AS name, '낱개' AS type FROM single_items WHERE item_code ILIKE %(q)s OR name ILIKE %(q)s UNION ALL SELECT item_code AS code, name AS name, '세트' AS type FROM set_items WHERE item_code ILIKE %(q)s OR name ILIKE %(q)s ORDER BY code ASC LIMIT %(limit)s