Skip to content

Commit 98bd1a5

Browse files
committed
refac
1 parent 68f0fa1 commit 98bd1a5

3 files changed

Lines changed: 127 additions & 8 deletions

File tree

Dockerfile.openshift

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
FROM python:3.12.13-slim AS builder
2+
3+
WORKDIR /src
4+
5+
COPY pyproject.toml README.md uv.lock* ./
6+
COPY open_terminal/ open_terminal/
7+
8+
RUN pip install --no-cache-dir --prefix=/install .
9+
10+
11+
FROM python:3.12.13-slim
12+
13+
ENV PYTHONDONTWRITEBYTECODE=1
14+
ENV PYTHONUNBUFFERED=1
15+
ENV HOME=/home/user
16+
ENV SHELL=/bin/bash
17+
ENV USER=user
18+
ENV XDG_CONFIG_HOME=/home/user/.config
19+
ENV XDG_STATE_HOME=/home/user/.local/state
20+
ENV XDG_CACHE_HOME=/home/user/.cache
21+
ENV PATH="/home/user/.local/bin:${PATH}"
22+
23+
RUN apt-get update && apt-get install -y --no-install-recommends \
24+
bash \
25+
ca-certificates \
26+
curl \
27+
git \
28+
jq \
29+
less \
30+
procps \
31+
tini \
32+
&& rm -rf /var/lib/apt/lists/*
33+
34+
COPY --from=builder /install /usr/local
35+
36+
WORKDIR /app
37+
COPY pyproject.toml README.md ./
38+
COPY open_terminal/ open_terminal/
39+
COPY entrypoint-openshift.sh /app/entrypoint-openshift.sh
40+
41+
RUN pip install --no-cache-dir --no-deps . \
42+
&& mkdir -p /home/user/.local/bin /home/user/.config /home/user/.local/state /home/user/.cache \
43+
&& chgrp -R 0 /home/user /app \
44+
&& chmod -R g=u /home/user /app \
45+
&& chmod +x /app/entrypoint-openshift.sh
46+
47+
WORKDIR /home/user
48+
49+
EXPOSE 8000
50+
51+
USER 1001
52+
53+
ENTRYPOINT ["/usr/bin/tini", "--", "/app/entrypoint-openshift.sh"]
54+
CMD ["run"]

README.md

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,25 +26,29 @@ That's it — you're up and running at `http://localhost:8000`.
2626
2727
#### Image Variants
2828

29-
| | `latest` | `slim` | `alpine` |
30-
|---|---|---|---|
31-
| **Best for** | AI agent sandboxes | Production / hardened | Edge / CI / minimal footprint |
32-
| **Size** | ~4 GB | ~430 MB | ~230 MB |
33-
| **Bundled tooling** | Node.js, gcc, ffmpeg, LaTeX, Docker CLI, data science libs | git, curl, jq | git, curl, jq |
34-
| **Install packages at runtime** | ✔ (has `sudo`) |||
35-
| **Multi-user mode** ||||
36-
| **Egress firewall** ||||
29+
| | `latest` | `slim` | `alpine` | `openshift` |
30+
|---|---|---|---|---|
31+
| **Best for** | AI agent sandboxes | Production / hardened | Edge / CI / minimal footprint | OpenShift restricted SCC |
32+
| **Size** | ~4 GB | ~430 MB | ~230 MB | ~430 MB |
33+
| **Bundled tooling** | Node.js, gcc, ffmpeg, LaTeX, Docker CLI, data science libs | git, curl, jq | git, curl, jq | git, curl, jq |
34+
| **Install packages at runtime** | ✔ (has `sudo`) ||||
35+
| **Multi-user mode** |||||
36+
| **Egress firewall** |||||
3737

3838
**`slim`** and **`alpine`** have the same feature set. Slim uses Debian (glibc) for broader binary compatibility; Alpine uses musl libc and is smaller, but some C-extension pip packages may need to compile from source.
3939

4040
```bash
4141
docker run -d -p 8000:8000 -e OPEN_TERMINAL_API_KEY=secret ghcr.io/open-webui/open-terminal:slim
4242
docker run -d -p 8000:8000 -e OPEN_TERMINAL_API_KEY=secret ghcr.io/open-webui/open-terminal:alpine
43+
docker run -d -p 8000:8000 -e OPEN_TERMINAL_API_KEY=secret ghcr.io/open-webui/open-terminal:openshift
4344
```
4445

4546
> [!NOTE]
4647
> Slim and Alpine don't support `OPEN_TERMINAL_PACKAGES` / `OPEN_TERMINAL_PIP_PACKAGES` / `OPEN_TERMINAL_NPM_PACKAGES`. To add packages, extend [Dockerfile.slim](Dockerfile.slim) or [Dockerfile.alpine](Dockerfile.alpine).
4748
49+
> [!NOTE]
50+
> The OpenShift image is for restricted non-root pod policies. It does not support runtime package installs, Docker socket access, the iptables egress firewall, or `OPEN_TERMINAL_MULTI_USER=true`. Build a custom image ahead of time when OpenShift users need extra tools.
51+
4852
#### Updating
4953

5054
```bash

entrypoint-openshift.sh

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#!/bin/sh
2+
set -e
3+
4+
file_env() {
5+
var="$1"
6+
file_var="${var}_FILE"
7+
default="${2:-}"
8+
9+
eval current_value="\${$var:-}"
10+
eval file_value="\${$file_var:-}"
11+
eval var_is_set="\${$var+set}"
12+
eval file_is_set="\${$file_var+set}"
13+
14+
if [ "$var_is_set" = "set" ] && [ "$file_is_set" = "set" ]; then
15+
printf >&2 'error: both %s and %s are set, but they are mutually exclusive\n' "$var" "$file_var"
16+
exit 1
17+
fi
18+
19+
value="$default"
20+
if [ -n "$current_value" ]; then
21+
value="$current_value"
22+
elif [ -n "$file_value" ]; then
23+
value="$(cat "$file_value")"
24+
fi
25+
26+
export "$var=$value"
27+
unset "$file_var"
28+
}
29+
30+
warn_unsupported() {
31+
var="$1"
32+
eval value="\${$var:-}"
33+
if [ -n "$value" ]; then
34+
printf >&2 'warning: %s is not supported by the OpenShift image and will be ignored\n' "$var"
35+
unset "$var"
36+
fi
37+
}
38+
39+
file_env OPEN_TERMINAL_API_KEY
40+
41+
if [ "${OPEN_TERMINAL_MULTI_USER:-}" = "true" ] || [ "${OPEN_TERMINAL_MULTI_USER:-}" = "1" ]; then
42+
printf >&2 'error: OPEN_TERMINAL_MULTI_USER is not supported by the OpenShift image\n'
43+
exit 1
44+
fi
45+
46+
warn_unsupported OPEN_TERMINAL_ALLOWED_DOMAINS
47+
warn_unsupported OPEN_TERMINAL_PACKAGES
48+
warn_unsupported OPEN_TERMINAL_PIP_PACKAGES
49+
warn_unsupported OPEN_TERMINAL_NPM_PACKAGES
50+
51+
export HOME="${HOME:-/home/user}"
52+
export SHELL="${SHELL:-/bin/bash}"
53+
export USER="${USER:-user}"
54+
export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
55+
export XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}"
56+
export XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}"
57+
export PATH="$HOME/.local/bin:$PATH"
58+
59+
mkdir -p "$HOME" "$HOME/.local/bin" "$XDG_CONFIG_HOME" "$XDG_STATE_HOME" "$XDG_CACHE_HOME" 2>/dev/null || true
60+
61+
exec open-terminal "$@"

0 commit comments

Comments
 (0)