diff --git a/Dockerfile b/Dockerfile index d5aa950..eb625c3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,6 @@ +# Build shim-loader.js FROM node:20-slim AS build -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates \ - curl \ - binutils \ - xz-utils \ - && rm -rf /var/lib/apt/lists/* - WORKDIR /build COPY package.json package-lock.json ./ @@ -14,49 +8,37 @@ RUN npm ci --ignore-scripts COPY build.js ./ COPY shims/ ./shims/ -COPY scripts/ ./scripts/ -COPY server/ ./server/ RUN npm run build:shims - -ARG OBSIDIAN_VERSION=1.8.9 -RUN curl -fSL "https://github.com/obsidianmd/obsidian-releases/releases/download/v${OBSIDIAN_VERSION}/obsidian_${OBSIDIAN_VERSION}_amd64.deb" \ - -o /tmp/obsidian.deb \ - && mkdir -p /tmp/obsidian-deb \ - && ar x /tmp/obsidian.deb --output=/tmp/obsidian-deb \ - && mkdir -p /tmp/obsidian-pkg \ - && tar -xf /tmp/obsidian-deb/data.tar.xz -C /tmp/obsidian-pkg \ - && rm -rf /tmp/obsidian.deb /tmp/obsidian-deb - - -RUN npx --yes @electron/asar extract \ - /tmp/obsidian-pkg/opt/Obsidian/resources/obsidian.asar \ - /build/obsidian-app \ - && rm -rf /tmp/obsidian-pkg - -# Patch index.html -RUN node scripts/patch-obsidian.js /build/obsidian-app - -RUN cp dist/shim-loader.js /build/obsidian-app/shim-loader.js - -# Production image +# Production image. No Obsidian code included. +# On first run, the entrypoint downloads and patches Obsidian. FROM node:20-slim +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates curl binutils xz-utils \ + && rm -rf /var/lib/apt/lists/* + WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci --omit=dev --ignore-scripts COPY server/ ./server/ -COPY --from=build /build/obsidian-app ./obsidian-app +COPY scripts/ ./scripts/ +COPY images/ ./images/ +COPY --from=build /build/dist ./dist + +RUN chmod +x /app/scripts/entrypoint.sh ENV PORT=8080 ENV VAULT_ROOT=/vaults +ENV OBSIDIAN_VERSION=1.8.9 ENV OBSIDIAN_ASSETS_PATH=/app/obsidian-app EXPOSE 8080 VOLUME /vaults +VOLUME /app/obsidian-app -CMD ["node", "server/index.js"] +ENTRYPOINT ["/app/scripts/entrypoint.sh"] diff --git a/docker-compose.yml b/docker-compose.yml index dc40531..feccb34 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,11 +1,14 @@ services: ignis: - build: - context: . - args: - OBSIDIAN_VERSION: "1.8.9" + build: . ports: - "8082:8080" + environment: + - OBSIDIAN_VERSION=1.12.4 volumes: - ./vaults:/vaults + - obsidian-app:/app/obsidian-app restart: unless-stopped + +volumes: + obsidian-app: diff --git a/images/favicon.png b/images/favicon.png new file mode 100644 index 0000000..264c7e2 Binary files /dev/null and b/images/favicon.png differ diff --git a/images/ignis.png b/images/ignis.png new file mode 100644 index 0000000..7837234 Binary files /dev/null and b/images/ignis.png differ diff --git a/scripts/entrypoint.sh b/scripts/entrypoint.sh new file mode 100644 index 0000000..ef71ce3 --- /dev/null +++ b/scripts/entrypoint.sh @@ -0,0 +1,37 @@ +#!/bin/bash +set -e + +OBSIDIAN_DIR="/app/obsidian-app" +OBSIDIAN_VERSION="${OBSIDIAN_VERSION:-1.12.4}" + +if [ ! -f "$OBSIDIAN_DIR/index.html" ]; then + echo "[ignis] First run. Downloading Obsidian v${OBSIDIAN_VERSION}..." + + curl -fSL "https://github.com/obsidianmd/obsidian-releases/releases/download/v${OBSIDIAN_VERSION}/obsidian_${OBSIDIAN_VERSION}_amd64.deb" \ + -o /tmp/obsidian.deb + + echo "[ignis] Extracting .deb..." + mkdir -p /tmp/obsidian-deb /tmp/obsidian-pkg + ar x /tmp/obsidian.deb --output=/tmp/obsidian-deb + tar -xf /tmp/obsidian-deb/data.tar.xz -C /tmp/obsidian-pkg + + echo "[ignis] Unpacking asar..." + npx --yes @electron/asar extract \ + /tmp/obsidian-pkg/opt/Obsidian/resources/obsidian.asar \ + "$OBSIDIAN_DIR" + + echo "[ignis] Patching..." + node /app/scripts/patch-obsidian.js "$OBSIDIAN_DIR" + + cp /app/dist/shim-loader.js "$OBSIDIAN_DIR/shim-loader.js" + cp /app/images/favicon.png "$OBSIDIAN_DIR/favicon.png" + + + rm -rf /tmp/obsidian.deb /tmp/obsidian-deb /tmp/obsidian-pkg + + echo "[ignis] Obsidian v${OBSIDIAN_VERSION} ready." +else + echo "[ignis] Obsidian already set up." +fi + +exec node /app/server/index.js diff --git a/scripts/patch-obsidian.js b/scripts/patch-obsidian.js index 7b7c303..22c6a13 100644 --- a/scripts/patch-obsidian.js +++ b/scripts/patch-obsidian.js @@ -2,6 +2,7 @@ // Patches the extracted Obsidian asar for browser use: // 1. Removes Content-Security-Policy meta tag // 2. Injects shim-loader.js script (non-deferred, before all other scripts) +// 3. Injects favicon link const fs = require("fs"); const path = require("path"); @@ -26,6 +27,12 @@ function patchHtml(filePath) { "\n", ); + // Inject favicon into
+ html = html.replace( + "", + ' \n', + ); + // Inject shim-loader before the first