Files
certd/packages/ui/Dockerfile
T

111 lines
4.2 KiB
Docker
Raw Normal View History

ARG base_type=alpine
2025-12-29 16:44:00 +08:00
# 根据 base_type 参数选择基础镜像系列
FROM --platform=linux/amd64 node:22-alpine AS base-amd64-alpine
FROM --platform=linux/arm64 node:22-alpine AS base-arm64-alpine
FROM --platform=linux/arm/v7 node:22-alpine AS base-arm-v7-alpine
FROM --platform=linux/amd64 node:22-trixie-slim AS base-amd64-slim
FROM --platform=linux/arm64 node:22-trixie-slim AS base-arm64-slim
FROM --platform=linux/arm/v7 node:22-alpine AS base-arm-v7-slim
FROM base-${TARGETARCH}${TARGETVARIANT:+-}${TARGETVARIANT}-${base_type} AS builder
2025-12-29 16:44:00 +08:00
2024-07-20 19:38:15 +08:00
WORKDIR /workspace/
2024-07-21 03:21:51 +08:00
COPY . /workspace/
2026-05-11 09:39:04 +08:00
# pnpm v11打包会报错([ERR_PNPM_IGNORED_BUILDS] Ignored build scripts),暂时固定10.33.4版本。
# https://pnpm.io/zh/migration
RUN npm install -g pnpm@10.33.4
2024-07-20 19:38:15 +08:00
2024-07-26 22:01:42 +08:00
RUN cp /workspace/certd-client/dist/* /workspace/certd-server/public/ -rf
RUN cd /workspace/certd-server && pnpm install && npm run build-on-docker
RUN rm -rf /workspace/certd-server/node_modules
2025-09-27 08:26:18 +08:00
ARG base_type=alpine
# ------------------------------------------------------------------
# 构建生产环境镜像
# ------------------------------------------------------------------
FROM base-${TARGETARCH}${TARGETVARIANT:+-}${TARGETVARIANT}-${base_type}
EXPOSE 7001
EXPOSE 7002
2025-12-29 16:44:00 +08:00
ARG base_type=alpine
2026-06-17 00:26:50 +08:00
# 根据基础镜像发行版选择包管理器
# trixie-slim -> apt-get, alpine -> apk
2026-06-16 23:41:40 +08:00
RUN if [ -f /etc/debian_version ]; then \
2026-06-17 00:26:50 +08:00
apt-get update \
&& apt-get install -y --no-install-recommends \
2026-06-16 23:41:40 +08:00
ca-certificates \
wget \
openssl \
netcat-openbsd \
iputils-ping \
dnsutils \
iproute2 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*; \
elif [ -f /etc/alpine-release ]; then \
apk add --no-cache openssl wget ca-certificates; \
2026-06-16 23:41:40 +08:00
else \
echo "Unsupported base image"; exit 1; \
fi
2024-07-20 19:38:15 +08:00
WORKDIR /app/
2026-06-17 00:26:50 +08:00
ENV TERM=xterm
2025-12-29 16:44:00 +08:00
ENV LEGO_VERSION=4.30.1
2025-04-12 03:03:26 +08:00
ENV LEGO_DOWNLOAD_DIR=/app/tools/lego
ENV JKS_GO_VERSION=1.0.3
ENV JKS_GO_DOWNLOAD_DIR=/app/tools/jks-go
ENV ALIYUN_CLIENT_CONNECT_TIMEOUT=10000
ENV ALIYUN_CLIENT_READ_TIMEOUT=20000
2024-11-04 13:32:02 +08:00
RUN mkdir -p $LEGO_DOWNLOAD_DIR
# 根据架构下载不同的文件
2026-06-14 23:18:37 +08:00
RUN ARCH=$(uname -m) && \
if [ "$ARCH" = "x86_64" ]; then \
wget -O $LEGO_DOWNLOAD_DIR/lego_v${LEGO_VERSION}_linux_amd64.tar.gz https://github.com/go-acme/lego/releases/download/v${LEGO_VERSION}/lego_v${LEGO_VERSION}_linux_amd64.tar.gz; \
elif [ "$ARCH" = "aarch64" ]; then \
wget -O $LEGO_DOWNLOAD_DIR/lego_v${LEGO_VERSION}_linux_arm64.tar.gz https://github.com/go-acme/lego/releases/download/v${LEGO_VERSION}/lego_v${LEGO_VERSION}_linux_arm64.tar.gz; \
else \
2026-06-17 00:39:04 +08:00
# armv7 不支持lego 不要再尝试了
2026-06-14 23:18:37 +08:00
echo "Unsupported architecture: $ARCH"; \
fi
2024-10-30 16:12:08 +08:00
RUN mkdir -p $JKS_GO_DOWNLOAD_DIR
# 根据架构下载jks-go
RUN ARCH=$(uname -m) && \
if [ "$ARCH" = "x86_64" ]; then \
wget -O $JKS_GO_DOWNLOAD_DIR/jks-go_linux_amd64 https://github.com/certd/jks-go/releases/download/v${JKS_GO_VERSION}/jks-go_linux_amd64 && \
chmod +x $JKS_GO_DOWNLOAD_DIR/jks-go_linux_amd64 && \
ln -s $JKS_GO_DOWNLOAD_DIR/jks-go_linux_amd64 /usr/local/bin/jks-go; \
elif [ "$ARCH" = "aarch64" ]; then \
wget -O $JKS_GO_DOWNLOAD_DIR/jks-go_linux_arm64 https://github.com/certd/jks-go/releases/download/v${JKS_GO_VERSION}/jks-go_linux_arm64 && \
chmod +x $JKS_GO_DOWNLOAD_DIR/jks-go_linux_arm64 && \
ln -s $JKS_GO_DOWNLOAD_DIR/jks-go_linux_arm64 /usr/local/bin/jks-go; \
elif [ "$ARCH" = "armv7l" ]; then \
wget -O $JKS_GO_DOWNLOAD_DIR/jks-go_linux_arm_armv7 https://github.com/certd/jks-go/releases/download/v${JKS_GO_VERSION}/jks-go_linux_arm_armv7 && \
chmod +x $JKS_GO_DOWNLOAD_DIR/jks-go_linux_arm_armv7 && \
ln -s $JKS_GO_DOWNLOAD_DIR/jks-go_linux_arm_armv7 /usr/local/bin/jks-go; \
else \
echo "Unsupported architecture: $ARCH"; \
fi
2025-04-12 03:03:26 +08:00
ENV TZ=Asia/Shanghai
ENV NODE_ENV=production
ENV MIDWAY_SERVER_ENV=production
RUN npm install -g pnpm@10.33.4
COPY --from=builder /workspace/certd-server/ /app/
2026-07-05 19:51:08 +08:00
RUN pnpm install --production
COPY ./patch/ssh2/*.js /app/node_modules/.pnpm/node_modules/ssh2/lib/protocol/
2026-01-14 11:37:20 +08:00
CMD ["node", "--optimize-for-size", "./bootstrap.js"]