From 4478a1713dc4b9b91ef0beced4acc16ee43c4162 Mon Sep 17 00:00:00 2001 From: Vaica <94612053+zqlit@users.noreply.github.com> Date: Sun, 21 Jun 2026 22:30:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=95=9C=E5=83=8F=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- write-server/Dockerfile | 17 +++++++++-------- write-server/entrypoint.sh | 12 ++++++++++++ 2 files changed, 21 insertions(+), 8 deletions(-) create mode 100644 write-server/entrypoint.sh diff --git a/write-server/Dockerfile b/write-server/Dockerfile index a7e29721..6c69432e 100644 --- a/write-server/Dockerfile +++ b/write-server/Dockerfile @@ -32,8 +32,8 @@ RUN npm run build FROM node:20-alpine AS runner WORKDIR /app -# Install Hugo -RUN apk add --no-cache hugo +# Install Hugo and su-exec (for entrypoint) +RUN apk add --no-cache hugo su-exec # Create non-root user RUN addgroup --system --gid 1001 nodejs && \ @@ -47,12 +47,12 @@ COPY --from=builder /app/.next/static ./.next/static # Copy package.json for version info COPY --from=builder /app/package.json ./ -# Create necessary directories -RUN mkdir -p /app/logs /app/backups && \ - chown -R nextjs:nodejs /app +# Copy entrypoint script +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh -# Switch to non-root user -USER nextjs +# Create necessary directories +RUN mkdir -p /app/logs /app/backups /app/recycle/posts /app/recycle/meta # Expose port EXPOSE 8016 @@ -66,5 +66,6 @@ ENV HOSTNAME="0.0.0.0" HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:8016/api/stats || exit 1 -# Start application +# Start application via entrypoint (fixes permissions, drops to nextjs) +ENTRYPOINT ["/entrypoint.sh"] CMD ["node", "server.js"] diff --git a/write-server/entrypoint.sh b/write-server/entrypoint.sh new file mode 100644 index 00000000..d7290494 --- /dev/null +++ b/write-server/entrypoint.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Docker entrypoint script +# 修复挂载目录权限后以 nextjs 用户启动应用 + +# 创建必要的子目录(以 root 身份) +mkdir -p /app/recycle/posts /app/recycle/meta /app/logs /app/backups + +# 修复权限 +chown -R nextjs:nodejs /app/recycle /app/logs /app/backups + +# 以 nextjs 用户启动应用 +exec su-exec nextjs "$@"