unit icon indicating copy to clipboard operation
unit copied to clipboard

failed to start prototype "php_app", Failed to apply new configuration

Open ianchen07 opened this issue 1 year ago • 0 comments

We are building our own unit-php image, based on php:8.3-zts-alpine3.20.

Docker file:

FROM public.ecr.aws/docker/library/php:8.3-zts-alpine3.20 AS base

ENV UNIT_VERSION=1.34.1

RUN apk update && apk add --no-cache
gcc
g++
make
linux-headers
libxml2-dev
pcre-dev
openssl-dev
zlib-dev
libstdc++
musl-dev
git
bash
openssh
build-base
autoconf
p7zip
gettext
&& curl -fsSL https://unit.nginx.org/download/unit-$UNIT_VERSION.tar.gz -o /tmp/unit.tar.gz
&& tar -xzf /tmp/unit.tar.gz -C /tmp/
&& cd /tmp/unit-$UNIT_VERSION
&& ./configure --prefix=/usr --statedir=/var/lib/unit --control=unix:/var/run/unit/control.unit.sock --runstatedir=/var/run --pid=/var/run/unit/unit.pid --logdir=/var/log --log=/dev/stdout --tmpdir=/var/tmp --modulesdir=/usr/lib/unit/modules
&& make
&& make install
&& ./configure php --module=php83 --config=/usr/local/bin/php-config --lib-path=/usr/local/lib/php
&& make php83
&& make install
&& rm -rf /tmp/unit*
&& apk del gcc g++ make musl-dev

RUN pecl install redis xdebug-3.3.1 uopz && echo "extension=uopz.so" > /usr/local/etc/php/conf.d/uopz.ini &&
docker-php-ext-install soap pdo_mysql opcache mysqli &&
docker-php-ext-enable redis xdebug soap pdo_mysql opcache mysqli

RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer --version=2.6.6

RUN mkdir -p /etc/unit COPY ./docker/unit-config.json /etc/unit/config.json COPY ./docker/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh RUN chmod +x /usr/local/bin/docker-entrypoint.sh

EXPOSE 80

RUN mkdir -p /var/symfony/cache RUN mkdir -p /var/symfony/logs RUN chmod -R 777 /var/symfony

COPY . /code/ WORKDIR /code

RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts RUN --mount=type=ssh php -d memory_limit=-1 which composer install --prefer-dist --no-interaction

ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] CMD ["unitd", "--no-daemon", "--control", "unix:/var/run/control.unit.sock"]

Problem: The unitd process can be initiated successfully by running inside container: unitd --control unix:/var/run/unit/control.unit.sock but when trying to update config: curl -X PUT --unix-socket /var/run/unit/control.unit.sock --data-binary @/etc/unit/config.json http://localhost/config I got error: 2025/01/24 02:43:17 [warn] 34#34 failed to start prototype "php_app" 2025/01/24 02:43:17 [alert] 34#34 failed to apply new conf { error": "Failed to apply new configuration." }

The /etc/unit/config.json I have is: { "listeners": { "*:80": { "pass": "applications/php_app" } }, "applications": { "php_app": { "type": "php", "root": "/code/public/" } } }

Logs: /code # /usr/local/bin/docker-entrypoint.sh ====== 1. Launching Unit daemon to perform initial configuration... ====== 2025/01/24 02:43:17 [info] 19#19 unit 1.34.1 started 2025/01/24 02:43:17 [info] 27#27 discovery started 2025/01/24 02:43:17 [notice] 27#27 module: php 8.3.16 "/usr/lib/unit/modules/php83.unit.so" 2025/01/24 02:43:17 [info] 25#25 controller started 2025/01/24 02:43:17 [notice] 25#25 process 27 exited with code 0 2025/01/24 02:43:17 [info] 34#34 router started 2025/01/24 02:43:17 [info] 34#34 OpenSSL 3.3.2 3 Sep 2024, 30300020 { "certificates": {}, "config": { "listeners": {}, "routes": [], "applications": {} },

    "status": {
            "modules": {
                    "php": {
                            "version": "8.3.16",
                            "lib": "/usr/lib/unit/modules/php83.unit.so"
                    }
            },

            "connections": {
                    "accepted": 0,
                    "active": 0,
                    "idle": 0,
                    "closed": 0
            },

            "requests": {
                    "total": 0
            },

            "applications": {}
    }

} ====== 2. Waiting for Unit to be fully initialized... ====== Unit is ready. ====== 3. Applying configuration from /etc/unit/config.json... ====== 2025/01/24 02:43:17 [alert] 25#25 process 53 exited on signal 11 2025/01/24 02:43:17 [warn] 34#34 failed to start prototype "php_app" 2025/01/24 02:43:17 [alert] 34#34 failed to apply new conf /usr/local/bin/docker-entrypoint.sh: Error: HTTP response status code is '500' }error": "Failed to apply new configuration."

I can't find any thread related to the failed to start prototype "php_app", does anyone have any idea or similar experience?

ianchen07 avatar Jan 24 '25 02:01 ianchen07