Aaron Brown commited on
Commit
8691b5f
Β·
1 Parent(s): eaa2876

Fix HF Space build: switch to python:3.11-slim-bookworm base

Browse files

deadsnakes PPA gpg import fails in HF build sandbox. Use
python:3.11-slim-bookworm which ships Python 3.11 natively.
Also handle MariaDB (Bookworm default) in start.sh and fix
uvicorn module path to open_range.server.app.

Files changed (2) hide show
  1. Dockerfile +7 -13
  2. start.sh +34 -23
Dockerfile CHANGED
@@ -1,27 +1,21 @@
1
  # =============================================================================
2
  # OpenRange β€” Production All-in-One Dockerfile
3
  # =============================================================================
4
- # Single-stage build on Ubuntu 22.04 with Python 3.11 + all range services.
5
- # Installs uv for Python dependency management, then all system services.
6
  # =============================================================================
7
 
8
- FROM ubuntu:22.04
9
 
10
  ENV DEBIAN_FRONTEND=noninteractive
11
 
12
  # ── 1. System packages: services + security tools ────────────────────────────
13
 
14
  RUN apt-get update && apt-get install -y --no-install-recommends \
15
- # Python 3.11 via deadsnakes PPA
16
- software-properties-common \
17
- && add-apt-repository -y ppa:deadsnakes/ppa \
18
- && apt-get update && apt-get install -y --no-install-recommends \
19
- python3.11 python3.11-venv python3.11-dev \
20
  # Web
21
  nginx \
22
- php8.1-fpm php8.1-mysql php8.1-ldap php8.1-xml php8.1-mbstring \
23
  # Database
24
- mysql-server \
25
  # LDAP
26
  slapd ldap-utils \
27
  # Logging
@@ -37,13 +31,12 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
37
  netcat-openbsd dnsutils tcpdump curl wget sshpass \
38
  iputils-ping whois \
39
  # Utilities
40
- jq procps iproute2 git ca-certificates \
41
  && rm -rf /var/lib/apt/lists/*
42
 
43
  # ── 2. Install uv for Python dependency management ──────────────────────────
44
 
45
- RUN curl -LsSf https://astral.sh/uv/install.sh | sh \
46
- && mv /root/.local/bin/uv /usr/local/bin/uv
47
 
48
  # ── 3. Create directories and fix permissions ────────────────────────────────
49
 
@@ -59,6 +52,7 @@ COPY . /app/env
59
  WORKDIR /app/env
60
 
61
  RUN uv venv --python python3.11 /app/.venv \
 
62
  && if [ -f uv.lock ]; then \
63
  uv sync --frozen --no-editable; \
64
  else \
 
1
  # =============================================================================
2
  # OpenRange β€” Production All-in-One Dockerfile
3
  # =============================================================================
4
+ # Python 3.11 base + all range services installed via apt.
5
+ # No PPA needed β€” python:3.11-slim-bookworm ships Python 3.11 natively.
6
  # =============================================================================
7
 
8
+ FROM python:3.11-slim-bookworm
9
 
10
  ENV DEBIAN_FRONTEND=noninteractive
11
 
12
  # ── 1. System packages: services + security tools ────────────────────────────
13
 
14
  RUN apt-get update && apt-get install -y --no-install-recommends \
 
 
 
 
 
15
  # Web
16
  nginx \
 
17
  # Database
18
+ default-mysql-server default-mysql-client \
19
  # LDAP
20
  slapd ldap-utils \
21
  # Logging
 
31
  netcat-openbsd dnsutils tcpdump curl wget sshpass \
32
  iputils-ping whois \
33
  # Utilities
34
+ jq procps iproute2 git ca-certificates bash \
35
  && rm -rf /var/lib/apt/lists/*
36
 
37
  # ── 2. Install uv for Python dependency management ──────────────────────────
38
 
39
+ RUN pip install --no-cache-dir uv
 
40
 
41
  # ── 3. Create directories and fix permissions ────────────────────────────────
42
 
 
52
  WORKDIR /app/env
53
 
54
  RUN uv venv --python python3.11 /app/.venv \
55
+ && . /app/.venv/bin/activate \
56
  && if [ -f uv.lock ]; then \
57
  uv sync --frozen --no-editable; \
58
  else \
start.sh CHANGED
@@ -39,30 +39,41 @@ mkdir -p /var/lib/samba/private
39
  mkdir -p /var/log/nginx
40
  mkdir -p /var/log/mysql
41
 
42
- # ── 2. MySQL ────────────────────────────────────────────────────────────────
43
-
44
- echo "[start.sh] Starting MySQL..."
45
- if [ ! -d /var/lib/mysql/mysql ]; then
46
- echo "[start.sh] Initializing MySQL data directory..."
47
- mysqld --initialize-insecure --user=mysql 2>&1 | tee "${LOGDIR}/mysql.log"
48
- fi
 
 
 
 
 
 
 
49
 
50
- mysqld --user=mysql --log-error="${LOGDIR}/mysql.log" &
51
- PIDS+=($!)
52
 
53
- echo -n "[start.sh] Waiting for MySQL readiness"
54
- for i in $(seq 1 30); do
55
- if mysqladmin ping --silent 2>/dev/null; then
56
- echo " ready (${i}s)"
57
- break
58
- fi
59
- echo -n "."
60
- sleep 1
61
- if [ "$i" -eq 30 ]; then
62
- echo " TIMEOUT"
63
- echo "[start.sh] WARNING: MySQL did not become ready in 30s"
64
- fi
65
- done
 
 
 
 
66
 
67
  # ── 3. PHP-FPM ──────────────────────────────────────────────────────────────
68
 
@@ -204,4 +215,4 @@ echo "============================================================"
204
  # ── 10. exec uvicorn as PID 1 ──────────────────────────────────────────────
205
 
206
  cd /app/env
207
- exec python3 -m uvicorn server.app:app --host 0.0.0.0 --port 8000
 
39
  mkdir -p /var/log/nginx
40
  mkdir -p /var/log/mysql
41
 
42
+ # ── 2. MySQL / MariaDB ────────────────────────────────────────────────────
43
+
44
+ echo "[start.sh] Starting MySQL/MariaDB..."
45
+ # Detect which daemon is available (MariaDB on Bookworm, MySQL on Jammy)
46
+ MYSQLD=$(command -v mariadbd || command -v mysqld || echo "")
47
+ if [ -n "$MYSQLD" ]; then
48
+ if [ ! -d /var/lib/mysql/mysql ]; then
49
+ echo "[start.sh] Initializing database data directory..."
50
+ if command -v mariadb-install-db >/dev/null 2>&1; then
51
+ mariadb-install-db --user=mysql 2>&1 | tee "${LOGDIR}/mysql.log"
52
+ else
53
+ mysqld --initialize-insecure --user=mysql 2>&1 | tee "${LOGDIR}/mysql.log"
54
+ fi
55
+ fi
56
 
57
+ $MYSQLD --user=mysql --log-error="${LOGDIR}/mysql.log" &
58
+ PIDS+=($!)
59
 
60
+ echo -n "[start.sh] Waiting for database readiness"
61
+ ADMIN_CMD=$(command -v mariadb-admin || command -v mysqladmin || echo "")
62
+ for i in $(seq 1 30); do
63
+ if [ -n "$ADMIN_CMD" ] && $ADMIN_CMD ping --silent 2>/dev/null; then
64
+ echo " ready (${i}s)"
65
+ break
66
+ fi
67
+ echo -n "."
68
+ sleep 1
69
+ if [ "$i" -eq 30 ]; then
70
+ echo " TIMEOUT"
71
+ echo "[start.sh] WARNING: Database did not become ready in 30s"
72
+ fi
73
+ done
74
+ else
75
+ echo "[start.sh] MySQL/MariaDB not installed, skipping"
76
+ fi
77
 
78
  # ── 3. PHP-FPM ──────────────────────────────────────────────────────────────
79
 
 
215
  # ── 10. exec uvicorn as PID 1 ──────────────────────────────────────────────
216
 
217
  cd /app/env
218
+ exec python3 -m uvicorn open_range.server.app:app --host 0.0.0.0 --port 8000