@@ -75,6 +75,7 @@ services:
|
||||
ABC_API_KEY: ${SECRETARY_ABC_API_KEY:-MASTER_API_KEY}
|
||||
UPLOAD_ROOT_DIR: /app/uploads
|
||||
UPLOAD_MAX_FILE_SIZE_MB: ${UPLOAD_MAX_FILE_SIZE_MB:-30}
|
||||
DEFAULT_SUPPORT_WORKSPACE_CODE: ${DEFAULT_SUPPORT_WORKSPACE_CODE:-EGBIM_DEMO}
|
||||
ports:
|
||||
- "${SECRETARY_API_PORT:-8011}:8010"
|
||||
depends_on:
|
||||
|
||||
+27
-160
@@ -1,173 +1,40 @@
|
||||
name: abc-user-feedback-deploy
|
||||
name: egbim-feedback-demo
|
||||
|
||||
services:
|
||||
web:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: docker/web.dockerfile
|
||||
args:
|
||||
NPM_REGISTRY: ${NPM_REGISTRY:-https://registry.npmmirror.com}
|
||||
# Browser requests stay same-origin. Next.js proxies them server-side.
|
||||
APP_NEXT_PUBLIC_API_BASE_URL: ''
|
||||
APP_NEXT_PUBLIC_FEEDBACK_ONLY: 'true'
|
||||
environment:
|
||||
NEXT_PUBLIC_API_BASE_URL: ${NEXT_PUBLIC_API_BASE_URL}
|
||||
INTERNAL_API_BASE_URL: http://api:4000
|
||||
SUPPORT_API_BASE_URL: http://secretary-api:8010
|
||||
SECRETARY_ABC_API_KEY: ${SECRETARY_ABC_API_KEY:-}
|
||||
ports:
|
||||
- '${WEB_PORT:-3030}:3000'
|
||||
depends_on:
|
||||
api:
|
||||
condition: service_started
|
||||
secretary-api:
|
||||
condition: service_started
|
||||
restart: unless-stopped
|
||||
|
||||
api:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: docker/api.dockerfile
|
||||
environment:
|
||||
APP_ADDRESS: 0.0.0.0
|
||||
APP_PORT: 4000
|
||||
ADMIN_WEB_URL: ${ADMIN_WEB_URL}
|
||||
BASE_URL: ${BASE_URL}
|
||||
JWT_SECRET: ${JWT_SECRET}
|
||||
INITIAL_SUPER_ADMIN_PHONE_NUMBER: ${INITIAL_SUPER_ADMIN_PHONE_NUMBER:-}
|
||||
ADMIN_CANDIDATE_EMAILS: ${ADMIN_CANDIDATE_EMAILS:-}
|
||||
GITEA_API_URL: ${GITEA_API_URL:-https://gitea.hmac.kr/api/v1}
|
||||
GITEA_API_TOKEN: ${GITEA_API_TOKEN:-}
|
||||
GITHUB_API_TOKEN: ${GITHUB_API_TOKEN:-}
|
||||
JIRA_API_EMAIL: ${JIRA_API_EMAIL:-}
|
||||
JIRA_API_TOKEN: ${JIRA_API_TOKEN:-}
|
||||
JIRA_WEBHOOK_SECRET: ${JIRA_WEBHOOK_SECRET:-}
|
||||
JIRA_ISSUE_TYPE: ${JIRA_ISSUE_TYPE:-Task}
|
||||
MYSQL_PRIMARY_URL: mysql://userfeedback:userfeedback@mysql:3306/userfeedback
|
||||
SMTP_ENABLED: ${SMTP_ENABLED:-false}
|
||||
SMTP_HOST: ${SMTP_HOST:-}
|
||||
SMTP_PORT: ${SMTP_PORT:-25}
|
||||
SMTP_SENDER: ${SMTP_SENDER:-}
|
||||
SMTP_USERNAME: ${SMTP_USERNAME:-}
|
||||
SMTP_PASSWORD: ${SMTP_PASSWORD:-}
|
||||
SMTP_TLS: ${SMTP_TLS:-false}
|
||||
SMTP_CIPHER_SPEC: ${SMTP_CIPHER_SPEC:-}
|
||||
SMTP_OPPORTUNISTIC_TLS: ${SMTP_OPPORTUNISTIC_TLS:-false}
|
||||
MASTER_API_KEY: ${MASTER_API_KEY:-}
|
||||
SUPPORT_API_BASE_URL: http://secretary-api:8010
|
||||
ACCESS_TOKEN_EXPIRED_TIME: ${ACCESS_TOKEN_EXPIRED_TIME:-10m}
|
||||
REFRESH_TOKEN_EXPIRED_TIME: ${REFRESH_TOKEN_EXPIRED_TIME:-1h}
|
||||
AUTO_MIGRATION: ${AUTO_MIGRATION:-true}
|
||||
OPENSEARCH_USE: ${OPENSEARCH_USE:-false}
|
||||
OPENSEARCH_NODE: ${OPENSEARCH_NODE:-}
|
||||
OPENSEARCH_USERNAME: ${OPENSEARCH_USERNAME:-}
|
||||
OPENSEARCH_PASSWORD: ${OPENSEARCH_PASSWORD:-}
|
||||
NAVER_WORKS_ENABLED: ${NAVER_WORKS_ENABLED:-false}
|
||||
NAVER_WORKS_API_BASE_URL: ${NAVER_WORKS_API_BASE_URL:-https://www.worksapis.com/v1.0}
|
||||
NAVER_WORKS_AUTH_URL: ${NAVER_WORKS_AUTH_URL:-https://auth.worksmobile.com/oauth2/v2.0/token}
|
||||
NAVER_WORKS_ACCESS_TOKEN: ${NAVER_WORKS_ACCESS_TOKEN:-}
|
||||
NAVER_WORKS_BOT_ID: ${NAVER_WORKS_BOT_ID:-}
|
||||
NAVER_WORKS_DEFAULT_ROOM_ID: ${NAVER_WORKS_DEFAULT_ROOM_ID:-}
|
||||
NAVER_WORKS_CLIENT_ID: ${NAVER_WORKS_CLIENT_ID:-}
|
||||
NAVER_WORKS_CLIENT_SECRET: ${NAVER_WORKS_CLIENT_SECRET:-}
|
||||
NAVER_WORKS_SERVICE_ACCOUNT: ${NAVER_WORKS_SERVICE_ACCOUNT:-}
|
||||
NAVER_WORKS_PRIVATE_KEY: ${NAVER_WORKS_PRIVATE_KEY:-}
|
||||
NAVER_WORKS_SCOPE: ${NAVER_WORKS_SCOPE:-bot.message bot}
|
||||
NAVER_WORKS_MAX_RETRIES: ${NAVER_WORKS_MAX_RETRIES:-3}
|
||||
NAVER_WORKS_MAX_MESSAGE_LENGTH: ${NAVER_WORKS_MAX_MESSAGE_LENGTH:-1000}
|
||||
depends_on:
|
||||
mysql:
|
||||
condition: service_healthy
|
||||
restart: unless-stopped
|
||||
|
||||
secretary-api:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: docker/secretary-api.dockerfile
|
||||
environment:
|
||||
APP_NAME: secretary-api
|
||||
APP_ENV: ${APP_ENV:-staging}
|
||||
APP_HOST: 0.0.0.0
|
||||
APP_PORT: 8010
|
||||
DOCS_ROOT_PATH: /secretary-docs
|
||||
DATABASE_URL: mysql+pymysql://baron_support:baron_support@mysql-secretary:3306/baron_support
|
||||
ABC_API_BASE_URL: http://api:4000
|
||||
ABC_API_KEY: ${SECRETARY_ABC_API_KEY:-}
|
||||
MASTER_API_KEY: ${MASTER_API_KEY:-}
|
||||
ADMIN_CANDIDATE_TENANT_ID: ${ADMIN_CANDIDATE_TENANT_ID:-}
|
||||
INITIAL_SUPER_ADMIN_PHONE_NUMBER: ${INITIAL_SUPER_ADMIN_PHONE_NUMBER:-}
|
||||
SSO_ISSUER: ${SSO_ISSUER:-}
|
||||
NODE_ENV: production
|
||||
HOSTNAME: 0.0.0.0
|
||||
# Keep browser requests on 10.13.10.4:8864 to avoid CORS.
|
||||
NEXT_PUBLIC_API_BASE_URL: ''
|
||||
NEXT_PUBLIC_FEEDBACK_ONLY: 'true'
|
||||
# Existing management console API.
|
||||
SUPPORT_CONSOLE_API_BASE_URL: ${SUPPORT_CONSOLE_API_BASE_URL:-https://feedback.hmac.kr/api/support}
|
||||
SSO_ISSUER: ${SSO_ISSUER:-https://sso.hmac.kr/oidc}
|
||||
SSO_AUTHORIZATION_ENDPOINT: ${SSO_AUTHORIZATION_ENDPOINT:-https://sso.hmac.kr/oidc/oauth2/auth}
|
||||
SSO_TOKEN_ENDPOINT: ${SSO_TOKEN_ENDPOINT:-https://sso.hmac.kr/oidc/oauth2/token}
|
||||
SSO_USERINFO_ENDPOINT: ${SSO_USERINFO_ENDPOINT:-https://sso.hmac.kr/oidc/userinfo}
|
||||
SSO_SCOPE: ${SSO_SCOPE:-openid profile email}
|
||||
# These are server-only values. Do not prefix them with NEXT_PUBLIC_ and
|
||||
# do not put them in the browser build.
|
||||
SSO_CLIENT_ID: ${SSO_CLIENT_ID:-}
|
||||
SSO_CLIENT_SECRET: ${SSO_CLIENT_SECRET:-}
|
||||
JWT_SECRET: ${JWT_SECRET}
|
||||
UPLOAD_ROOT_DIR: /app/uploads
|
||||
UPLOAD_MAX_FILE_SIZE_MB: ${UPLOAD_MAX_FILE_SIZE_MB:-30}
|
||||
depends_on:
|
||||
api:
|
||||
condition: service_started
|
||||
mysql-secretary:
|
||||
condition: service_healthy
|
||||
volumes:
|
||||
- ../uploads:/app/uploads
|
||||
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
|
||||
# 스테이징 외부 DB 접속용 포트입니다.
|
||||
JWT_SECRET: ${JWT_SECRET:-}
|
||||
SUPPORT_TENANT_ID: ${SUPPORT_TENANT_ID:-}
|
||||
ports:
|
||||
- '${MYSQL_PORT:-13306}:3306'
|
||||
- '${WEB_PORT:-8864}:3000'
|
||||
healthcheck:
|
||||
test:
|
||||
[
|
||||
'CMD-SHELL',
|
||||
'mysqladmin ping -h 127.0.0.1 -u root -p$$MYSQL_ROOT_PASSWORD --silent',
|
||||
]
|
||||
interval: 5s
|
||||
test: ['CMD-SHELL', 'wget -q -O - http://127.0.0.1:3000/api/health >/dev/null']
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 30
|
||||
start_period: 15s
|
||||
volumes:
|
||||
- mysql:/var/lib/mysql
|
||||
retries: 12
|
||||
start_period: 20s
|
||||
restart: unless-stopped
|
||||
|
||||
mysql-secretary:
|
||||
hostname: mysql-secretary
|
||||
image: mysql:8.0
|
||||
command:
|
||||
[
|
||||
'--default-authentication-plugin=mysql_native_password',
|
||||
'--collation-server=utf8mb4_bin',
|
||||
'--default-time-zone=+09:00',
|
||||
]
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: baron_support
|
||||
MYSQL_DATABASE: baron_support
|
||||
MYSQL_USER: baron_support
|
||||
MYSQL_PASSWORD: baron_support
|
||||
TZ: Asia/Seoul
|
||||
# 스테이징 외부 DB 접속용 포트입니다.
|
||||
ports:
|
||||
- '${MYSQL_SECRETARY_PORT:-13308}:3306'
|
||||
healthcheck:
|
||||
test:
|
||||
[
|
||||
'CMD-SHELL',
|
||||
'mysqladmin ping -h 127.0.0.1 -u root -p$$MYSQL_ROOT_PASSWORD --silent',
|
||||
]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 30
|
||||
start_period: 15s
|
||||
volumes:
|
||||
- mysql-secretary:/var/lib/mysql
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
mysql:
|
||||
mysql-secretary:
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# This Dockerfile is copy-pasted into our main docs at /docs/handbook/deploying-with-docker.
|
||||
# Make sure you update both files!
|
||||
ARG NPM_REGISTRY=https://registry.npmjs.org
|
||||
ARG APP_NEXT_PUBLIC_API_BASE_URL=https://feedback.hmac.kr
|
||||
ARG APP_NEXT_PUBLIC_FEEDBACK_ONLY=true
|
||||
FROM node:24.14.1-alpine AS base
|
||||
ARG NPM_REGISTRY
|
||||
ENV COREPACK_NPM_REGISTRY=${NPM_REGISTRY} \
|
||||
@@ -18,6 +20,8 @@ RUN turbo prune --scope=web --docker
|
||||
|
||||
# Add lockfile and package.json's of isolated subworkspace
|
||||
FROM base AS installer
|
||||
ARG APP_NEXT_PUBLIC_API_BASE_URL
|
||||
ARG APP_NEXT_PUBLIC_FEEDBACK_ONLY
|
||||
|
||||
RUN apk add --no-cache libc6-compat
|
||||
RUN apk --no-cache add --virtual .builds-deps build-base python3
|
||||
@@ -37,7 +41,7 @@ COPY --from=builder /app/out/full/ .
|
||||
COPY turbo.json ./
|
||||
|
||||
|
||||
COPY --from=builder /app/apps/web/.env.build /app/apps/web/.env.production
|
||||
RUN printf 'NEXT_PUBLIC_API_BASE_URL=%s\nNEXT_PUBLIC_FEEDBACK_ONLY=%s\n' "$APP_NEXT_PUBLIC_API_BASE_URL" "$APP_NEXT_PUBLIC_FEEDBACK_ONLY" > /app/apps/web/.env.production
|
||||
RUN SKIP_ENV_VALIDATION=true pnpm exec turbo run build --filter=web...
|
||||
|
||||
FROM base AS runner
|
||||
|
||||
Reference in New Issue
Block a user