Skip to content

Commit 65ad035

Browse files
author
adamanteye
authored
feat(docker): simplify docker compose for end users (#96)
* feat(docker): simplify docker compose for end users The previous docker-compose requires end user to manually handle permissions of taskchampion data dir. And this commit has directories automatically set up in docker-entrypoint.sh, just like what postgresql did in https://github.com/docker-library/postgres/blob/master/docker-entrypoint.sh * fix(docker): revert to anonymous data volume for compatibility * feat: use uid 1092 for taskchampion * fix(docker): revert mkdir This is embarrassing that subpaths are not automatically created. So we still need mkdir service in case of anonymous data volume. * fix(docker): typo
1 parent c47612b commit 65ad035

4 files changed

Lines changed: 42 additions & 19 deletions

File tree

.dockerignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
*
2+
!Cargo.toml
3+
!Cargo.lock
4+
!core/
5+
!server/
6+
!sqlite/
7+
!docker-entrypoint.sh

Dockerfile

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
# Versions must be major.minor
2-
ARG RUST_VERSION
3-
ARG ALPINE_VERSION
2+
# Default versions are as below
3+
ARG RUST_VERSION=1.78
4+
ARG ALPINE_VERSION=3.19
45

56
FROM docker.io/rust:${RUST_VERSION}-alpine${ALPINE_VERSION} AS builder
6-
COPY . /data
7+
COPY Cargo.lock Cargo.toml /data/
8+
COPY core /data/core/
9+
COPY server /data/server/
10+
COPY sqlite /data/sqlite/
711
RUN apk -U add libc-dev && \
812
cd /data && \
913
cargo build --release
1014

1115
FROM docker.io/alpine:${ALPINE_VERSION}
1216
COPY --from=builder /data/target/release/taskchampion-sync-server /bin
13-
RUN adduser -S -D -H -h /var/lib/taskchampion-sync-server -s /sbin/nologin -G users \
17+
RUN apk add --no-cache su-exec && \
18+
adduser -u 1092 -S -D -H -h /var/lib/taskchampion-sync-server -s /sbin/nologin -G users \
1419
-g taskchampion taskchampion && \
15-
install -d -m755 -o100 -g100 "/var/lib/taskchampion-sync-server"
20+
install -d -m1755 -o1092 -g1092 "/var/lib/taskchampion-sync-server"
1621
EXPOSE 8080
17-
VOLUME "/var/lib/taskchampion-sync-server"
18-
USER taskchampion
19-
ENTRYPOINT [ "taskchampion-sync-server" ]
22+
VOLUME /var/lib/task-champion-sync-server/data
23+
COPY docker-entrypoint.sh /bin
24+
ENTRYPOINT [ "/bin/docker-entrypoint.sh" ]
25+
CMD [ "/bin/taskchampion-sync-server" ]

docker-compose.yml

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
volumes:
22
data:
33

4+
45
services:
5-
# Make the necessary subdirectories of the `data` volume, and set ownership of the
6-
# `tss/taskchampion-sync-server` directory, as the server runs as user 100.
76
mkdir:
87
image: caddy:2-alpine
98
command: |
109
/bin/sh -c "
11-
mkdir -p /data/caddy/data /data/caddy/config /data/tss/taskchampion-sync-server &&
12-
chown -R 100:100 /data/tss/taskchampion-sync-server
13-
"
10+
mkdir -p /data/caddy/data /data/caddy/config /data/tss/taskchampion-sync-server"
1411
volumes:
1512
- type: volume
1613
source: data
@@ -48,18 +45,18 @@ services:
4845
tss:
4946
image: ghcr.io/gothenburgbitfactory/taskchampion-sync-server:0.5.0
5047
restart: unless-stopped
48+
environment:
49+
- "RUST_LOG=info"
50+
- "DATA_DIR=/var/lib/taskchampion-sync-server/data"
51+
- "LISTEN=0.0.0.0:8080"
5152
volumes:
5253
- type: volume
5354
source: data
54-
target: /tss
55+
target: /var/lib/taskchampion-sync-server/data
5556
read_only: false
5657
volume:
5758
nocopy: true
58-
subpath: tss
59-
environment:
60-
- "RUST_LOG=info"
61-
- "DATA_DIR=/tss/taskchampion-sync-server"
62-
- "LISTEN=0.0.0.0:8080"
59+
subpath: tss/taskchampion-sync-server
6360
depends_on:
6461
mkdir:
6562
condition: service_completed_successfully

docker-entrypoint.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!/bin/sh
2+
set -e
3+
echo "starting entrypoint script..."
4+
if [ "$1" = "/bin/taskchampion-sync-server" ]; then
5+
echo "setting data directories"
6+
mkdir -p "/var/lib/taskchampion-sync-server/data"
7+
chown -R 1092:1092 "/var/lib/taskchampion-sync-server/data"
8+
chmod -R 700 "/var/lib/taskchampion-sync-server/data"
9+
if [ "$(id -u)" = "0" ]; then
10+
echo "switching to user 'taskchampion'"
11+
exec su-exec taskchampion "$@"
12+
fi
13+
fi

0 commit comments

Comments
 (0)