mirror of
https://github.com/Jermolene/TiddlyWiki5.git
synced 2026-03-20 05:40:27 -07:00
- 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>
47 lines
1.4 KiB
Docker
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"]
|