diff --git a/Dockerfile b/Dockerfile index 80728d6..c909355 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,23 +1,18 @@ -# 基础阶段:安装依赖和构建应用 FROM node:22.14-alpine AS base - -# 配置 alpine 镜像源 & 安装依赖 +# 运行时依赖 RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories -RUN apk add cairo pango giflib libjpeg pixman +RUN apk add cairo pango giflib ttf-dejavu # 依赖缓存阶段 FROM base AS deps WORKDIR /app -# 安装依赖 -RUN apk add build-base g++ cairo-dev pango-dev giflib-dev - -# 启用 pnpm & 配置镜像源 -RUN corepack enable pnpm -RUN pnpm config set registry https://registry.npmmirror.com +RUN apk add build-base g++ cairo-dev pango-dev giflib-dev COPY package.json pnpm-lock.yaml* ./ +RUN corepack enable pnpm +RUN pnpm config set registry https://registry.npmmirror.com RUN pnpm install --frozen-lockfile # 构建阶段 @@ -25,12 +20,10 @@ FROM base AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules -COPY . . +COPY .. . -# 环境变量设置 ENV NEXT_TELEMETRY_DISABLED=1 -# 构建应用 RUN corepack enable pnpm RUN pnpm run build @@ -38,28 +31,21 @@ RUN pnpm run build FROM base AS runner WORKDIR /app -# 环境变量设置 ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 -# 添加非 root 用户 RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs -# 复制必要文件 COPY --from=builder /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static -# 切换到非 root 用户 USER nextjs -# 暴露端口 EXPOSE 3000 -# 设置环境变量 ENV PORT=3000 ENV HOSTNAME="0.0.0.0" -# 启动命令 CMD ["node", "server.js"] diff --git a/src/app/(auth)/login/captcha.tsx b/src/app/(auth)/login/captcha.tsx index 431a02d..643819b 100644 --- a/src/app/(auth)/login/captcha.tsx +++ b/src/app/(auth)/login/captcha.tsx @@ -2,7 +2,6 @@ import {useCallback, useEffect, useState} from 'react' import {Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle} from '@/components/ui/dialog' import {Button} from '@/components/ui/button' import {Input} from '@/components/ui/input' -import Image from 'next/image' export type CaptchaProps = { showCaptcha: boolean @@ -45,7 +44,7 @@ export default function Captcha(props: CaptchaProps) {