Ctrl K
ComunidadGuías…

Dockerfile

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# syntax=docker/dockerfile:1.7

ARG NODE_IMAGE=node:24-bookworm-slim

FROM ${NODE_IMAGE} AS workspace

ENV PNPM_HOME=/pnpm
ENV PATH=${PNPM_HOME}:${PATH}
ENV NPM_CONFIG_REGISTRY=https://registry.npmmirror.com

# Prefer China mirrors so ECS builds are not gated on deb.debian.org / npmjs.
RUN sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources 2>/dev/null || \
    sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list && \
    sed -i 's|security.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources 2>/dev/null || \
    sed -i 's|security.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list && \
    apt-get update && \
    apt-get install --yes --no-install-recommends g++ make python3 && \
    npm install --global pnpm@11.9.0 --registry=https://registry.npmmirror.com && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /workspace

COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json tsconfig.base.json ./

RUN --mount=type=cache,id=tokems-pnpm-store,target=/pnpm/store \
    pnpm fetch --frozen-lockfile

COPY . .

ARG NUXT_PUBLIC_API_BASE=/api/v1
ARG NUXT_PUBLIC_ORGANIZATION_SLUG=geo-conference
ARG VITE_API_BASE=/api/v1
ARG VITE_ADMIN_BASE=/admin/
ARG VITE_SIMPLE_AUTH=false
ARG BUILD_SHA=unknown
ARG BUILD_TIME=unknown
ARG BUILD_MIGRATION=unknown
ARG BUILD_MIGRATION_HASH=unknown

ENV NUXT_PUBLIC_API_BASE=${NUXT_PUBLIC_API_BASE}
ENV NUXT_PUBLIC_ORGANIZATION_SLUG=${NUXT_PUBLIC_ORGANIZATION_SLUG}
ENV VITE_API_BASE=${VITE_API_BASE}
ENV VITE_ADMIN_BASE=${VITE_ADMIN_BASE}
ENV VITE_SIMPLE_AUTH=${VITE_SIMPLE_AUTH}
ENV BUILD_SHA=${BUILD_SHA}
ENV BUILD_TIME=${BUILD_TIME}
ENV BUILD_MIGRATION=${BUILD_MIGRATION}
ENV BUILD_MIGRATION_HASH=${BUILD_MIGRATION_HASH}

RUN --mount=type=cache,id=tokems-pnpm-store,target=/pnpm/store \
    pnpm install --offline --frozen-lockfile

RUN pnpm build

RUN node tooling/write-build-info.mjs --service admin --output /workspace/.build-info/admin/version.json && \
    node tooling/write-build-info.mjs --service gateway --output /workspace/.build-info/gateway/version.json

RUN --mount=type=cache,id=tokems-pnpm-store,target=/pnpm/store \
    pnpm --filter @conference/api deploy --prod --legacy /opt/deploy/api && \
    pnpm --filter @conference/worker deploy --prod --legacy /opt/deploy/worker

FROM ${NODE_IMAGE} AS api

ARG BUILD_SHA=unknown
ARG BUILD_TIME=unknown
ARG BUILD_MIGRATION=unknown
ARG BUILD_MIGRATION_HASH=unknown

LABEL org.opencontainers.image.source="https://github.com/yaojingang/TokEMS" \
      org.opencontainers.image.revision="${BUILD_SHA}" \
      org.opencontainers.image.created="${BUILD_TIME}" \
      com.tokems.service="api" \
      com.tokems.build.sha="${BUILD_SHA}" \
      com.tokems.build.time="${BUILD_TIME}" \
      com.tokems.build.migration="${BUILD_MIGRATION}" \
      com.tokems.build.migration-hash="${BUILD_MIGRATION_HASH}"

ENV NODE_ENV=production
ENV API_PORT=4100

WORKDIR /app

COPY --chown=node:node --from=workspace /opt/deploy/api/ ./

USER node

EXPOSE 4100

CMD ["node", "dist/main.js"]

FROM ${NODE_IMAGE} AS worker

ARG BUILD_SHA=unknown
ARG BUILD_TIME=unknown
ARG BUILD_MIGRATION=unknown
ARG BUILD_MIGRATION_HASH=unknown

LABEL org.opencontainers.image.source="https://github.com/yaojingang/TokEMS" \
      org.opencontainers.image.revision="${BUILD_SHA}" \
      org.opencontainers.image.created="${BUILD_TIME}" \
      com.tokems.service="worker" \
      com.tokems.build.sha="${BUILD_SHA}" \
      com.tokems.build.time="${BUILD_TIME}" \
      com.tokems.build.migration="${BUILD_MIGRATION}" \
      com.tokems.build.migration-hash="${BUILD_MIGRATION_HASH}"

ENV NODE_ENV=production
LABEL com.tokems.worker-ready-protocol="1"

WORKDIR /app

COPY --chown=node:node --from=workspace /opt/deploy/worker/ ./

USER node

CMD ["node", "dist/main.js"]

FROM ${NODE_IMAGE} AS web

ARG BUILD_SHA=unknown
ARG BUILD_TIME=unknown
ARG BUILD_MIGRATION=unknown
ARG BUILD_MIGRATION_HASH=unknown

LABEL org.opencontainers.image.source="https://github.com/yaojingang/TokEMS" \
      org.opencontainers.image.revision="${BUILD_SHA}" \
      org.opencontainers.image.created="${BUILD_TIME}" \
      com.tokems.service="web" \
      com.tokems.build.sha="${BUILD_SHA}" \
      com.tokems.build.time="${BUILD_TIME}" \
      com.tokems.build.migration="${BUILD_MIGRATION}" \
      com.tokems.build.migration-hash="${BUILD_MIGRATION_HASH}"

ENV NODE_ENV=production
ENV HOST=0.0.0.0
ENV PORT=3000

WORKDIR /app

COPY --chown=node:node --from=workspace /workspace/apps/web/.output/ ./

USER node

EXPOSE 3000

CMD ["node", "server/index.mjs"]

FROM nginx:1.31-alpine AS admin

ARG BUILD_SHA=unknown
ARG BUILD_TIME=unknown
ARG BUILD_MIGRATION=unknown
ARG BUILD_MIGRATION_HASH=unknown

LABEL org.opencontainers.image.source="https://github.com/yaojingang/TokEMS" \
      org.opencontainers.image.revision="${BUILD_SHA}" \
      org.opencontainers.image.created="${BUILD_TIME}" \
      com.tokems.service="admin" \
      com.tokems.build.sha="${BUILD_SHA}" \
      com.tokems.build.time="${BUILD_TIME}" \
      com.tokems.build.migration="${BUILD_MIGRATION}" \
      com.tokems.build.migration-hash="${BUILD_MIGRATION_HASH}"

COPY docker/admin.nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=workspace /workspace/apps/admin/dist/ /usr/share/nginx/html/
COPY --from=workspace /workspace/.build-info/admin/version.json /usr/share/nginx/html/version.json

EXPOSE 8080

CMD ["nginx", "-g", "daemon off;"]

FROM nginx:1.31-alpine AS gateway

ARG BUILD_SHA=unknown
ARG BUILD_TIME=unknown
ARG BUILD_MIGRATION=unknown
ARG BUILD_MIGRATION_HASH=unknown

LABEL org.opencontainers.image.source="https://github.com/yaojingang/TokEMS" \
      org.opencontainers.image.revision="${BUILD_SHA}" \
      org.opencontainers.image.created="${BUILD_TIME}" \
      com.tokems.service="gateway" \
      com.tokems.build.sha="${BUILD_SHA}" \
      com.tokems.build.time="${BUILD_TIME}" \
      com.tokems.build.migration="${BUILD_MIGRATION}" \
      com.tokems.build.migration-hash="${BUILD_MIGRATION_HASH}"

COPY docker/gateway.nginx.conf /etc/nginx/conf.d/default.conf
COPY docker/gateway-object-storage.include /etc/nginx/tokems-object-storage.include
COPY --from=workspace /workspace/.build-info/gateway/version.json /usr/share/nginx/html/version.json

EXPOSE 8080

CMD ["nginx", "-g", "daemon off;"]

FROM ${NODE_IMAGE} AS notification-sink

ARG BUILD_SHA=unknown
ARG BUILD_TIME=unknown
ARG BUILD_MIGRATION=unknown
ARG BUILD_MIGRATION_HASH=unknown

LABEL org.opencontainers.image.source="https://github.com/yaojingang/TokEMS" \
      org.opencontainers.image.revision="${BUILD_SHA}" \
      org.opencontainers.image.created="${BUILD_TIME}" \
      com.tokems.service="notification-sink" \
      com.tokems.build.sha="${BUILD_SHA}" \
      com.tokems.build.time="${BUILD_TIME}" \
      com.tokems.build.migration="${BUILD_MIGRATION}" \
      com.tokems.build.migration-hash="${BUILD_MIGRATION_HASH}"

ENV NODE_ENV=production
ENV NOTIFICATION_SINK_PORT=4080

WORKDIR /app

COPY --chown=node:node tooling/local-notification-sink.mjs ./local-notification-sink.mjs

USER node

EXPOSE 4080

CMD ["node", "local-notification-sink.mjs"]