Skip to content

Commit 1d6a59a

Browse files
committed
feat: add docker image
1 parent b1150d5 commit 1d6a59a

File tree

8 files changed

+157
-0
lines changed

8 files changed

+157
-0
lines changed

.dockerignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
.git
2+
.github
3+
.vscode
4+
config.toml
5+
data.db
6+
docker/commands/
7+
target/

Dockerfile

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
FROM clux/muslrust:stable AS chef
2+
WORKDIR /app
3+
RUN cargo install cargo-chef
4+
5+
6+
FROM chef AS planner
7+
WORKDIR /app
8+
COPY . .
9+
RUN cargo chef prepare --recipe-path recipe.json
10+
11+
12+
FROM chef AS builder
13+
WORKDIR /app
14+
ARG UID=1000
15+
# Create the app user
16+
ENV USER=appuser
17+
ENV UID=$UID
18+
RUN adduser \
19+
--disabled-password \
20+
--gecos "" \
21+
--home "/nonexistent" \
22+
--shell "/sbin/nologin" \
23+
--no-create-home \
24+
--uid "${UID}" \
25+
"${USER}"
26+
# Build dependencies
27+
COPY --from=planner /app/recipe.json recipe.json
28+
RUN cargo chef cook --release --target x86_64-unknown-linux-musl --recipe-path recipe.json
29+
# Build the application
30+
# todo: it seems the previous cache layer is not working. The dependencies are compiled always.
31+
COPY . .
32+
RUN cargo build --release --target x86_64-unknown-linux-musl --bin torrust-tracker
33+
34+
35+
FROM alpine:latest
36+
WORKDIR /app
37+
RUN apk --no-cache add ca-certificates
38+
ENV TZ=Etc/UTC APP_USER=appuser
39+
COPY --from=builder /etc/passwd /etc/passwd
40+
COPY --from=builder /etc/group /etc/group
41+
COPY --from=builder --chown=$APP_USER \
42+
/app/target/x86_64-unknown-linux-musl/release/torrust-tracker \
43+
/app/torrust-tracker
44+
RUN chown -R $APP_USER:$APP_USER /app
45+
USER $APP_USER:$APP_USER
46+
EXPOSE 6969
47+
EXPOSE 1212
48+
ENTRYPOINT ["/app/torrust-tracker"]

bin/install.sh

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#!/bin/bash
2+
3+
# Generate the default settings file if it does not exist
4+
if ! [ -f "./config.toml" ]; then
5+
cp ./config.toml.local ./config.toml
6+
fi
7+
8+
# Generate the sqlite database if it does not exist
9+
if ! [ -f "./data.db" ]; then
10+
# todo: it should get the path from config.toml and only do it when we use sqlite
11+
touch ./data.db
12+
echo ";" | sqlite3 ./data.db
13+
fi
14+

config.toml.local

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
log_level = "info"
2+
mode = "public"
3+
db_driver = "Sqlite3"
4+
db_path = "data.db"
5+
announce_interval = 120
6+
min_announce_interval = 120
7+
max_peer_timeout = 900
8+
on_reverse_proxy = false
9+
external_ip = "0.0.0.0"
10+
tracker_usage_statistics = true
11+
persistent_torrent_completed_stat = false
12+
inactive_peer_cleanup_interval = 600
13+
remove_peerless_torrents = true
14+
15+
[[udp_trackers]]
16+
enabled = false
17+
bind_address = "0.0.0.0:6969"
18+
19+
[[http_trackers]]
20+
enabled = false
21+
bind_address = "0.0.0.0:6969"
22+
ssl_enabled = false
23+
ssl_cert_path = ""
24+
ssl_key_path = ""
25+
26+
[http_api]
27+
enabled = true
28+
bind_address = "127.0.0.1:1212"
29+
30+
[http_api.access_tokens]
31+
admin = "MyAccessToken"

docker/README.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Docker
2+
3+
## Requirements
4+
5+
- Docker version 20.10.21
6+
7+
## Dev environment
8+
9+
Build and run locally:
10+
11+
```s
12+
export TORRUST_TRACKER_USER_UID=1000
13+
./docker/bin/build.sh $TORRUST_TRACKER_USER_UID
14+
./bin/install.sh
15+
./docker/bin/run.sh $TORRUST_TRACKER_USER_UID
16+
```
17+
18+
Run using the pre-built public docker image:
19+
20+
```s
21+
export TORRUST_TRACKER_USER_UID=1000
22+
docker run -it \
23+
--user="$TORRUST_TRACKER_USER_UID" \
24+
-p 6969:6969 -p 1212:1212 \
25+
--mount type=bind,source="$(pwd)/data.db",target=/app/data.db \
26+
--mount type=bind,source="$(pwd)/config.toml",target=/app/config.toml \
27+
josecelano/torrust-tracker
28+
```
29+
30+
> NOTES:
31+
>
32+
> - You have to create the SQLite DB (`data.db`) and configuration (`config.toml`) before running the tracker. See `bin/install.sh`.
33+
> - You have to replace the user UID (`1000`) with yours.

docker/bin/build.sh

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/bin/bash
2+
3+
TORRUST_TRACKER_USER_UID=${TORRUST_TRACKER_USER_UID:-1000}
4+
5+
echo "Building docker image ..."
6+
echo "TORRUST_TRACKER_USER_UID: $TORRUST_TRACKER_USER_UID"
7+
8+
docker build \
9+
--build-arg UID="$TORRUST_TRACKER_USER_UID" \
10+
-t torrust-tracker .

docker/bin/install.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/bin/bash
2+
3+
./docker/bin/build.sh
4+
./bin/install.sh

docker/bin/run.sh

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/bin/bash
2+
3+
TORRUST_TRACKER_USER_UID=${TORRUST_TRACKER_USER_UID:-1000}
4+
5+
docker run -it \
6+
--user="$TORRUST_TRACKER_USER_UID" \
7+
-p 6969:6969 -p 1212:1212 \
8+
--mount type=bind,source="$(pwd)/data.db",target=/app/data.db \
9+
--mount type=bind,source="$(pwd)/config.toml",target=/app/config.toml \
10+
torrust-tracker

0 commit comments

Comments
 (0)