Aaron Brown commited on
Commit
8b07a89
Β·
1 Parent(s): 49d1c75

Fix runtime errors: Python path, MySQL perms, PHP-FPM detection

Browse files

- Use same base image for builder and runtime (Python 3.11 compat)
- Use python3 -m uvicorn instead of venv shebang
- Auto-detect PHP-FPM binary name (varies by distro)
- Fix MySQL log directory permissions (chown mysql:mysql)
- Create /var/run/mysqld with correct ownership at build time
- Remove set -e so service timeouts don't kill startup

Files changed (2) hide show
  1. Dockerfile +14 -37
  2. start.sh +26 -19
Dockerfile CHANGED
@@ -37,56 +37,33 @@ RUN --mount=type=cache,target=/root/.cache/uv \
37
  fi
38
 
39
  # ---------------------------------------------------------------------------
40
- # Stage 2: Runtime β€” Ubuntu 22.04 with all range services
41
  # ---------------------------------------------------------------------------
42
- FROM ubuntu:22.04
43
 
44
  ENV DEBIAN_FRONTEND=noninteractive
45
 
46
  # Install ALL service packages in one RUN layer
47
  RUN apt-get update && apt-get install -y --no-install-recommends \
48
- # Web
49
  nginx \
50
- php8.1-fpm \
51
- php8.1-mysql \
52
- php8.1-ldap \
53
- php8.1-xml \
54
- php8.1-mbstring \
55
- # Database
56
- mysql-server \
57
- # LDAP
58
- slapd \
59
- ldap-utils \
60
- # Logging
61
  rsyslog \
62
- # File sharing
63
  samba \
64
- # Mail
65
  postfix \
66
- # SSH
67
  openssh-server \
68
- # Security tools
69
- nmap \
70
- sqlmap \
71
- hydra \
72
- nikto \
73
- netcat-openbsd \
74
- dnsutils \
75
- tcpdump \
76
- curl \
77
- wget \
78
- sshpass \
79
- iputils-ping \
80
- whois \
81
- # Python
82
- python3 \
83
- python3-pip \
84
- # Utilities
85
- jq \
86
- procps \
87
- iproute2 \
88
  && rm -rf /var/lib/apt/lists/*
89
 
 
 
 
 
 
90
  WORKDIR /app
91
 
92
  # Copy the Python virtual environment from builder
 
37
  fi
38
 
39
  # ---------------------------------------------------------------------------
40
+ # Stage 2: Runtime β€” same base image (Python 3.11) + range services
41
  # ---------------------------------------------------------------------------
42
+ FROM ${BASE_IMAGE}
43
 
44
  ENV DEBIAN_FRONTEND=noninteractive
45
 
46
  # Install ALL service packages in one RUN layer
47
  RUN apt-get update && apt-get install -y --no-install-recommends \
 
48
  nginx \
49
+ php-fpm php-mysql php-ldap php-xml php-mbstring \
50
+ default-mysql-server \
51
+ slapd ldap-utils \
 
 
 
 
 
 
 
 
52
  rsyslog \
 
53
  samba \
 
54
  postfix \
 
55
  openssh-server \
56
+ nmap sqlmap hydra nikto \
57
+ netcat-openbsd dnsutils tcpdump curl wget sshpass \
58
+ iputils-ping whois \
59
+ jq procps iproute2 \
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  && rm -rf /var/lib/apt/lists/*
61
 
62
+ # Create directories and fix permissions for services
63
+ RUN mkdir -p /var/log/siem/consolidated /run/sshd /run/php /var/run/mysqld /var/log/mysql \
64
+ && (chown mysql:mysql /var/log/siem /var/run/mysqld /var/log/mysql 2>/dev/null || true) \
65
+ && chmod 755 /var/log/siem
66
+
67
  WORKDIR /app
68
 
69
  # Copy the Python virtual environment from builder
start.sh CHANGED
@@ -8,7 +8,7 @@
8
  # 3. exec uvicorn as PID 1
9
  # =============================================================================
10
 
11
- set -euo pipefail
12
 
13
  LOGDIR="/var/log/siem"
14
  CONSOLIDATED="${LOGDIR}/consolidated"
@@ -32,6 +32,7 @@ echo "[start.sh] Creating required directories..."
32
  mkdir -p "${CONSOLIDATED}"
33
  mkdir -p /run/php
34
  mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqld
 
35
  mkdir -p /var/run/sshd
36
  mkdir -p /var/run/slapd
37
  mkdir -p /var/lib/samba/private
@@ -66,24 +67,30 @@ done
66
  # ── 3. PHP-FPM ──────────────────────────────────────────────────────────────
67
 
68
  echo "[start.sh] Starting PHP-FPM..."
69
- php-fpm8.1 --nodaemonize --force-stderr \
70
- > "${LOGDIR}/php-fpm.log" 2>&1 &
71
- PIDS+=($!)
 
 
 
72
 
73
- # Poll for PHP-FPM socket
74
- echo -n "[start.sh] Waiting for PHP-FPM readiness"
75
- for i in $(seq 1 15); do
76
- if [ -S /run/php/php8.1-fpm.sock ]; then
77
- echo " ready (${i}s)"
78
- break
79
- fi
80
- echo -n "."
81
- sleep 1
82
- if [ "$i" -eq 15 ]; then
83
- echo " TIMEOUT"
84
- echo "[start.sh] WARNING: PHP-FPM socket not found after 15s"
85
- fi
86
- done
 
 
 
87
 
88
  # ── 4. Nginx ────────────────────────────────────────────────────────────────
89
 
@@ -197,4 +204,4 @@ echo "============================================================"
197
  # ── 10. exec uvicorn as PID 1 ──────────────────────────────────────────────
198
 
199
  cd /app/env
200
- exec uvicorn server.app:app --host 0.0.0.0 --port 8000
 
8
  # 3. exec uvicorn as PID 1
9
  # =============================================================================
10
 
11
+ set -uo pipefail
12
 
13
  LOGDIR="/var/log/siem"
14
  CONSOLIDATED="${LOGDIR}/consolidated"
 
32
  mkdir -p "${CONSOLIDATED}"
33
  mkdir -p /run/php
34
  mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqld
35
+ chown mysql:mysql "${LOGDIR}" /var/log/mysql 2>/dev/null || true
36
  mkdir -p /var/run/sshd
37
  mkdir -p /var/run/slapd
38
  mkdir -p /var/lib/samba/private
 
67
  # ── 3. PHP-FPM ──────────────────────────────────────────────────────────────
68
 
69
  echo "[start.sh] Starting PHP-FPM..."
70
+ # Find the correct php-fpm binary (varies by distro)
71
+ PHP_FPM=$(command -v php-fpm8.2 || command -v php-fpm8.1 || command -v php-fpm || echo "")
72
+ if [ -n "$PHP_FPM" ]; then
73
+ $PHP_FPM --nodaemonize --force-stderr \
74
+ > "${LOGDIR}/php-fpm.log" 2>&1 &
75
+ PIDS+=($!)
76
 
77
+ # Poll for PHP-FPM socket (path varies)
78
+ echo -n "[start.sh] Waiting for PHP-FPM readiness"
79
+ for i in $(seq 1 15); do
80
+ if ls /run/php/php*-fpm.sock >/dev/null 2>&1; then
81
+ echo " ready (${i}s)"
82
+ break
83
+ fi
84
+ echo -n "."
85
+ sleep 1
86
+ if [ "$i" -eq 15 ]; then
87
+ echo " TIMEOUT"
88
+ echo "[start.sh] WARNING: PHP-FPM socket not found after 15s"
89
+ fi
90
+ done
91
+ else
92
+ echo "[start.sh] PHP-FPM not installed, skipping"
93
+ fi
94
 
95
  # ── 4. Nginx ────────────────────────────────────────────────────────────────
96
 
 
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