TiddlyWiki5/Dockerfile
himmel 25f0bf2cf0 Add Docker support with docker-compose and automated release workflow
- Add Dockerfile (Node Alpine, unprivileged user, configurable via env vars)
- Add docker-compose.yml with named volume and environment variable support
- Add docker/entrypoint.sh for wiki init and --listen argument assembly
- Add bin/docker-publish.sh for manual multi-platform image publishing
- Add .github/workflows/docker-publish.yml for automated Docker Hub release on GitHub Release publish
- Add editions/tw5.com howto tiddler documenting Docker usage

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 09:49:44 +00:00

47 lines
1.4 KiB
Docker

ARG NODE_LTS_VERSION=22
FROM node:${NODE_LTS_VERSION}-alpine
# Build arguments (overridable at build time)
ARG TIDDLYWIKI_DATA_DIR=/data
ARG TIDDLYWIKI_PORT=8080
# Runtime environment variables
ENV TIDDLYWIKI_DATA_DIR=${TIDDLYWIKI_DATA_DIR} \
TIDDLYWIKI_PORT=${TIDDLYWIKI_PORT} \
TIDDLYWIKI_HOST=0.0.0.0 \
TIDDLYWIKI_USERNAME="" \
TIDDLYWIKI_PASSWORD="" \
TIDDLYWIKI_READERS="(anon)" \
TIDDLYWIKI_WRITERS="(authenticated)"
WORKDIR /app
# Install production dependencies only (no network install of tiddlywiki itself)
COPY package.json package-lock.json ./
RUN npm ci --omit=dev
# Copy source
COPY . .
# Symlink CLI so 'tiddlywiki' is available on PATH
RUN chmod +x tiddlywiki.js && \
ln -s /app/tiddlywiki.js /usr/local/bin/tiddlywiki
# Create unprivileged user with fixed UID/GID 1000 (matches the default first user
# on most Linux hosts, so bind-mounted directories work without --user override)
RUN addgroup -g 1000 -S tiddlywiki && \
adduser -u 1000 -S -G tiddlywiki tiddlywiki && \
mkdir -p "${TIDDLYWIKI_DATA_DIR}" && \
chown tiddlywiki:tiddlywiki "${TIDDLYWIKI_DATA_DIR}"
COPY docker/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
USER tiddlywiki
WORKDIR ${TIDDLYWIKI_DATA_DIR}
EXPOSE ${TIDDLYWIKI_PORT}
# Use Docker's built-in init process (docker run --init / compose: init: true)
ENTRYPOINT ["/entrypoint.sh"]