From 14f0cd54353829e5388f137701046d650ee511bb Mon Sep 17 00:00:00 2001 From: Zef Hemel Date: Mon, 27 Nov 2023 14:44:39 +0000 Subject: [PATCH] Fixes --- Dockerfile | 10 +++++++--- docker-entrypoint.sh | 34 ++++++++++++++++++---------------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4d9684b6..b83a3239 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,12 @@ -FROM lukechannings/deno:v1.38.2 +FROM lukechannings/deno:v1.38.3 # The volume that will keep the space data -# Create a volume first: + +# Either create a volume: # docker volume create myspace # Then bind-mount it when running the container with the -v flag, e.g.: # docker run -v myspace:/space -p3000:3000 -it zefhemel/silverbullet +# Or simply mount an existing folder into the container: +# docker run -v /path/to/my/folder:/space -p3000:3000 -it zefhemel/silverbullet VOLUME /space # Accept TARGETARCH as argument @@ -13,7 +16,6 @@ ARG TARGETARCH ENV TINI_VERSION v0.19.0 ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-${TARGETARCH} /tini - # Make sure the deno user has access to the space volume RUN mkdir -p /space \ && chmod +x /tini \ @@ -34,11 +36,13 @@ RUN mkdir -p /space \ # Port map this when running, e.g. with -p 3002:3000 (where 3002 is the host port) EXPOSE 3000 +# Always binding to this IP, otherwise the server wouldn't be available ENV SB_HOSTNAME 0.0.0.0 ENV SB_FOLDER /space # Copy the bundled version of silverbullet into the container ADD ./dist/silverbullet.js /silverbullet.js +# As well as the docker-entrypoint.sh script ADD ./docker-entrypoint.sh /docker-entrypoint.sh # Run the server, allowing to pass in additional argument at run time, e.g. diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 468255e1..5cecc20e 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -1,25 +1,27 @@ -#!/bin/bash +#!/bin/bash -e -# Check if UID and GID are passed as environment variables -if [ -z "$UID" ]; then +# Check if UID and GID are passed as environment variables, if not, extract from the space folder owner +if [ -z "$PUID" ]; then # Get the UID of the folder owner - UID=$(stat -c "%u" "$SB_FOLDER") + PUID=$(stat -c "%u" "$SB_FOLDER") + echo "Will run SilverBullet with UID $PUID, inferred from the owner of $SB_FOLDER (set PUID environment variable to override)" fi - -if [ -z "$GID" ]; then +if [ -z "$PGID" ]; then # Get the GID of the folder owner - GID=$(stat -c "%g" "$SB_FOLDER") + PGID=$(stat -c "%g" "$SB_FOLDER") fi -echo "Doing this as $UID, $GID" - -ls -l /space - -if [ "$UID" -eq 0 ]; then - # If the UID is 0, the user is root +if [ "$PUID" -eq "0" ]; then + echo "Will run SilverBullet as root" deno run -A --unstable /silverbullet.js $@ - exit else - useradd -M -u $UID -g $GID silverbullet - su silverbullet -s /bin/bash -c "deno run -A --unstable /silverbullet.js $@" + # Create silverbullet user and group ad-hoc mapped to PUID and PGID + groupadd -g $PGID silverbullet + useradd -M -u $PUID -g $PGID silverbullet + # And make sure /deno-dir (Deno cache) is accessible + chown -R $PUID:$PGID /deno-dir + # And run via su as the newly mapped 'silverbullet' user + args="$@" + su silverbullet -s /bin/bash -c "deno run -A --unstable /silverbullet.js $args" fi +