## cac-lsphp — per-site DETACHED lsphp (LSAPI) backend for the shared-ols tier. ## ## The LiteSpeed analogue of cac-fpm: a slim, single-tenant PHP backend that ## runs `lsphp -b 0.0.0.0:9000` (detached LSAPI mode) and NOTHING ELSE — no ## webserver. The shared OpenLiteSpeed container (shared-ols) sits in front and ## reaches this over the docker network via an extProcessor of type lsapi, ## address :9000 — structurally identical to how shared-httpd ## reaches a cac-fpm container's php-fpm on :9000. ## ## Built on the SAME LiteSpeed prebuilt base as cac-litespeed so the lsphp ## binary + extension set are byte-for-byte the runtime customers already get ## on the litespeed tier (memcached, redis, imagick, mbstring, mysqlnd, intl, ## gd, soap, bcmath, gmp, sodium, opcache, ... + lsphpNN-ldap added below). ## We do NOT strip the bundled OpenLiteSpeed binaries: the "no webserver" ## guarantee comes from the ENTRYPOINT (it only ever execs lsphp), and deleting ## OLS files from the upstream image risks breaking lsphp's shared libs for no ## real benefit. Only :9000 is EXPOSEd, and OLS is never started. ## ## See the design spec + PoC: whp docs/superpowers/plans/2026-06-09-ols-lsphp-tier.md ## and the LSAPI path-parity finding (feedback_ols_lsapi_no_script_filename_remap). ARG OLS_VERSION=1.8.4 ARG PHPVER=83 FROM litespeedtech/openlitespeed:${OLS_VERSION}-lsphp${PHPVER} ARG PHPVER=83 ENV PHPVER=${PHPVER} ## Match the cac-litespeed extension surface exactly: the only ext the prebuilt ## base lacks is lsphpNN-ldap. setpriv (util-linux) is already on the Ubuntu ## base; we add nothing else the sidecar doesn't need. All apt cache cleaned in ## the same layer to keep the image small. RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ ca-certificates \ lsphp${PHPVER}-ldap && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* ## Scripts + the SHARED production lsphp ini (reused verbatim from the litespeed ## image — same runtime, same tuning). Scripts layer last (they change most). COPY ./scripts/entrypoint-lsphp.sh \ ./scripts/detect-memory-lsphp.sh \ ./scripts/healthcheck-lsphp.sh \ /scripts/ RUN chmod +x /scripts/entrypoint-lsphp.sh /scripts/detect-memory-lsphp.sh /scripts/healthcheck-lsphp.sh ## Apply production lsphp ini overrides into lsphp's scan dir (path varies by ## PHP minor version; ask lsphp directly — same idiom as Dockerfile.litespeed). COPY ./configs/litespeed/lsphp-overrides.ini /etc/lsws-templates/lsphp-overrides.ini RUN bash -c 'set -e; \ SCAN_DIR=$(/usr/local/lsws/lsphp${PHPVER}/bin/lsphp -i 2>/dev/null | awk -F"=> " "/^Scan this dir/ {print \$2; exit}"); \ mkdir -p "$SCAN_DIR"; \ cp /etc/lsws-templates/lsphp-overrides.ini "$SCAN_DIR/99-prod-overrides.ini"; \ echo "wrote overrides to $SCAN_DIR"' EXPOSE 9000 ## TCP-connect + lsphp-alive check (LSAPI isn't FastCGI, so no cgi-fcgi ping). HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \ CMD /scripts/healthcheck-lsphp.sh ENTRYPOINT ["/scripts/entrypoint-lsphp.sh"]