# Use Alpine as the base image FROM node:22-alpine3.21 AS builder # Set metadata (optional but good practice) LABEL maintainer="you@example.com" WORKDIR /build # get all the deps RUN apk add --no-cache \ bash \ ca-certificates \ openjdk21-jre-headless \ git \ curl RUN curl -LO https://github.com/clojure/brew-install/releases/latest/download/linux-install.sh \ && chmod +x linux-install.sh \ && ./linux-install.sh RUN git clone https://github.com/logseq/logseq.git --depth 1 \ && cd logseq \ && yarn install WORKDIR /build/logseq RUN git config --global --add safe.directory '*' \ && git config --global user.email "builder@local" \ && git config --global user.name "Docker Builder" \ && git remote add 4shutosh https://github.com/4shutosh/logseq.git \ && git fetch 4shutosh self_host/21_march_2026 \ && git cherry-pick 477061ffb WORKDIR /build/logseq/deps/db-sync #build db-sync RUN yarn install \ && yarn build:node-adapter \ && yarn install --production #copy to /logseq-sync for final image RUN mkdir -p /logseq-sync/worker \ && mv worker/dist /logseq-sync/worker \ && mv node_modules package.json yarn.lock start.sh /logseq-sync #final image FROM node:22-alpine3.21 COPY --from=builder /logseq-sync /logseq-sync COPY start.sh /logseq-sync RUN apk add --no-cache \ bash \ curl WORKDIR /logseq-sync EXPOSE 8787 HEALTHCHECK CMD curl --fail http://localhost:8787/health || exit 1 # Default command CMD ["bash", "start.sh"]