Instead of cloning emdash-patch repo, clone official emdash and apply 4-line sed patch to built virtual_astro_middleware.mjs. This avoids workspace:* dependency issues that were breaking the backend. The sed patch fixes apiSuccess() wrapper mismatch for media browser and image upload in the visual editor toolbar.
71 lines
2.8 KiB
Docker
71 lines
2.8 KiB
Docker
FROM node:22-alpine AS deps
|
|
|
|
RUN apk add --no-cache python3 make g++ sqlite git
|
|
|
|
WORKDIR /app
|
|
|
|
# 1. Clone official emdash repo
|
|
RUN git clone --depth=1 https://github.com/emdash-cms/emdash.git emdash
|
|
|
|
# 2. Clone blog template source
|
|
RUN git clone --depth=1 https://git.moreminimore.com/kunthawat/emdash-blog-template.git blog-template
|
|
|
|
WORKDIR /app/emdash
|
|
|
|
# Add blog template as workspace package
|
|
RUN cp -r /app/blog-template packages/blog-template
|
|
|
|
RUN corepack enable && corepack prepare pnpm@9.0.0 --activate
|
|
RUN echo "node-linker=hoisted" >> .npmrc
|
|
RUN pnpm install
|
|
|
|
# Build all packages
|
|
RUN cd packages/core && pnpm build
|
|
RUN cd packages/auth && pnpm build
|
|
RUN cd packages/blocks && pnpm install && pnpm build
|
|
RUN cd packages/admin && pnpm build
|
|
RUN cd packages/plugins/audit-log && pnpm build
|
|
RUN cd packages/gutenberg-to-portable-text && pnpm install && pnpm build
|
|
RUN cd packages/blog-template && rm -rf dist && pnpm build
|
|
|
|
# Final stage
|
|
FROM deps
|
|
|
|
WORKDIR /app/emdash
|
|
|
|
ENV NODE_ENV=production
|
|
ENV HOST=0.0.0.0
|
|
|
|
COPY --from=0 /app/emdash/node_modules ./node_modules
|
|
COPY --from=0 /app/emdash/packages/blog-template/dist ./dist
|
|
|
|
EXPOSE 4321
|
|
|
|
# Apply patch AFTER build - sed-based replacement in virtual_astro_middleware.mjs
|
|
COPY --from=0 /app/emdash/packages/core/src/visual-editing/toolbar.ts /tmp-toolbar.ts
|
|
RUN cd /app/emdash && \
|
|
sed -i 's/var items = data\.items || \[\];/var items = (data.data \&\& data.data.items) || data.items || [];/' ./dist/server/virtual_astro_middleware.mjs && \
|
|
sed -i 's/if (!data\.item) throw new Error("Upload failed");/if (!data.data || !data.data.item) throw new Error("Upload failed: no item returned");/' ./dist/server/virtual_astro_middleware.mjs && \
|
|
sed -i 's/var item = data\.item;/var item = data.data.item;/' ./dist/server/virtual_astro_middleware.mjs && \
|
|
sed -i 's/selectMediaItem(item, annotation, element, imgEl);/return selectMediaItem(item, annotation, element, imgEl);/' ./dist/server/virtual_astro_middleware.mjs && \
|
|
echo "Patches applied"
|
|
|
|
# Copy and adapt entrypoint
|
|
COPY entrypoint.sh /entrypoint.sh
|
|
RUN chmod +x /entrypoint.sh && \
|
|
sed -i 's|cd /app|cd /app/emdash|g' /entrypoint.sh && \
|
|
sed -i 's|pnpm exec emdash seed|pnpm exec emdash seed packages/blog-template/seed/seed.json|g' /entrypoint.sh && \
|
|
sed -i 's|DB_PATH="/app/storage/data.db"|DB_PATH="/app/emdash/data.db"|g' /entrypoint.sh
|
|
|
|
# Copy seed file and create storage directory
|
|
COPY --from=0 /app/emdash/packages/blog-template/seed ./seed
|
|
RUN mkdir -p /app/emdash/uploads
|
|
|
|
# Copy audit-log plugin
|
|
COPY --from=0 /app/emdash/packages/plugins/audit-log ./node_modules/@emdash-cms/plugin-audit-log
|
|
|
|
# Copy gutenberg-to-portable-text
|
|
COPY --from=0 /app/emdash/packages/core/node_modules/@emdash-cms/gutenberg-to-portable-text ./node_modules/@emdash-cms/gutenberg-to-portable-text
|
|
|
|
ENTRYPOINT ["/entrypoint.sh"]
|