Skip to content

Commit fb24f22

Browse files
ttulttulKen Simpsonyiwang
authored
Add secure Docker Compose setup for localgpt (#2)
* Add secure Docker Compose setup for localgpt * Fix Docker build toolchain and Linux desktop backend features May still need updates due to XDG Base Directory Specification #18 --------- Co-authored-by: Ken Simpson <ksimpson@Kens-Mac-mini.local> Co-authored-by: Yi Wang <142937+yiwang@users.noreply.github.com>
1 parent 792f709 commit fb24f22

3 files changed

Lines changed: 100 additions & 0 deletions

File tree

.dockerignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
target
2+
.git
3+
node_modules
4+
.localgpt
5+
.localgpt-cache

Dockerfile

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
FROM ubuntu:24.04 AS builder
2+
3+
ENV DEBIAN_FRONTEND=noninteractive
4+
ENV RUSTUP_HOME=/usr/local/rustup
5+
ENV CARGO_HOME=/usr/local/cargo
6+
ENV PATH=/usr/local/cargo/bin:${PATH}
7+
8+
RUN apt-get update \
9+
&& apt-get install -y --no-install-recommends ca-certificates curl build-essential pkg-config libssl-dev \
10+
&& rm -rf /var/lib/apt/lists/*
11+
12+
RUN curl -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain stable
13+
14+
WORKDIR /app
15+
16+
COPY Cargo.toml Cargo.lock ./
17+
COPY src ./src
18+
COPY ui ./ui
19+
20+
RUN cargo build --release
21+
22+
FROM ubuntu:24.04 AS runtime
23+
24+
ENV DEBIAN_FRONTEND=noninteractive
25+
26+
RUN apt-get update \
27+
&& apt-get install -y --no-install-recommends ca-certificates bash git ripgrep \
28+
&& rm -rf /var/lib/apt/lists/*
29+
30+
RUN groupadd --system --gid 10001 localgpt \
31+
&& useradd --system --uid 10001 --gid localgpt --create-home --home-dir /home/localgpt localgpt \
32+
&& mkdir -p /home/localgpt/.localgpt /home/localgpt/.cache/localgpt \
33+
&& chown -R localgpt:localgpt /home/localgpt
34+
35+
COPY --from=builder /app/target/release/localgpt /usr/local/bin/localgpt
36+
37+
USER localgpt:localgpt
38+
WORKDIR /home/localgpt
39+
40+
ENTRYPOINT ["localgpt"]

docker-compose.yml

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
name: localgpt
2+
3+
services:
4+
localgpt:
5+
build:
6+
context: .
7+
dockerfile: Dockerfile
8+
image: localgpt:local
9+
container_name: localgpt
10+
init: true
11+
restart: unless-stopped
12+
13+
ports:
14+
- "127.0.0.1:31327:31327"
15+
16+
environment:
17+
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-}
18+
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
19+
FASTEMBED_CACHE_DIR: /home/localgpt/.cache/localgpt/models
20+
21+
volumes:
22+
- ./.localgpt:/home/localgpt/.localgpt
23+
- ./.localgpt-cache:/home/localgpt/.cache/localgpt
24+
- ./:/home/localgpt/.localgpt/workspace/repo:rw
25+
26+
working_dir: /home/localgpt/.localgpt/workspace
27+
28+
command:
29+
- /bin/sh
30+
- -lc
31+
- |
32+
set -eu
33+
mkdir -p /home/localgpt/.localgpt/workspace
34+
35+
if [ ! -f /home/localgpt/.localgpt/config.toml ]; then
36+
localgpt config init
37+
fi
38+
39+
localgpt config set heartbeat.enabled false
40+
localgpt config set server.enabled true
41+
localgpt config set server.bind 0.0.0.0
42+
localgpt config set server.port 31327
43+
localgpt config set memory.workspace /home/localgpt/.localgpt/workspace
44+
45+
exec localgpt daemon start --foreground
46+
47+
read_only: true
48+
tmpfs:
49+
- /tmp:rw,noexec,nosuid,nodev,size=256m
50+
- /run:rw,nosuid,nodev,size=16m
51+
cap_drop:
52+
- ALL
53+
security_opt:
54+
- no-new-privileges:true
55+
pids_limit: 256

0 commit comments

Comments
 (0)