Having issues setting up Caddy v2 with PHP-FPM in Docker

1. Caddy version: v2.6.2 h1:wKoFIxpmOJLGl3QXoo6PNbYvGW4xLEgo32GPBEjWL8o=

2. How I installed, and run Caddy: Docker builder

a. System environment: Docker

b. Command:

caddy run --config docker/Caddyfile

c. Service/unit/compose file:

FROM caddy:builder as builder
RUN xcaddy build \
    --with github.com/baldinof/caddy-supervisor

FROM php:8.1-fpm-alpine

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY --from=builder /usr/bin/caddy /usr/bin/caddy

RUN apk add --no-cache autoconf bash openssl-dev g++ make pcre-dev icu-dev zlib-dev libzip-dev vim && \
 docker-php-ext-install bcmath intl opcache zip sockets && \
 apk del --purge autoconf g++ make && \
 mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"

WORKDIR /usr/src/app

COPY . .

RUN composer install \
    --no-dev \
    --optimize-autoloader \
    --no-plugins \
    --prefer-dist \
    --no-progress \
    --no-interaction

ENV PORT=80

RUN caddy validate --config=docker/Caddyfile  \
    && cp docker/php-fpm.conf /usr/local/etc/php-fpm.d/zz-docker.conf  \
    && chmod -R 777 bootstrap/cache storage

EXPOSE 80 443

CMD ["caddy", "run", "--config", "docker/Caddyfile"]

d. My complete Caddy config:

{
    log {
        output stdout
        format console
        level DEBUG
    }
    supervisor {
        php-fpm {
            restart_policy always
            redirect_stdout stdout
            redirect_stderr stderr
        }
    }
}

*:{$PORT} {
    root * /usr/src/app/public
    php_fastcgi /var/run/php-fpm.sock {
        dial_timeout 60s
        capture_stderr
    }
}

3. The problem I’m having:

I get a blank white page when viewing the site after running the Docker container

4. Error messages and/or full log output:

twm_1  | {"level":"info","ts":1674692610.1530328,"msg":"using provided configuration","config_file":"docker/Caddyfile","config_adapter":""}
twm_1  | {"level":"warn","ts":1674692610.154689,"msg":"Caddyfile input is not formatted; run the 'caddy fmt' command to fix inconsistencies","adapter":"caddyfile","file":"docker/Caddyfile","line":2}
twm_1  | {"level":"info","ts":1674692610.1551828,"msg":"redirected default logger","from":"stderr","to":"stdout"}
twm_1  | 2023/01/26 00:23:30.157        INFO    admin   admin endpoint started  {"address": "localhost:2019", "enforce_origin": false, "origins": ["//[::1]:2019", "//127.0.0.1:2019", "//localhost:2019"]}
twm_1  | 2023/01/26 00:23:30.158        WARN    http    server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server {"server_name": "srv0", "http_port": 80}
twm_1  | 2023/01/26 00:23:30.165        DEBUG   supervisor      module provisioned      {"supervisors": [{"Options":{"Command":"php-fpm","Replica":0,"Args":[],"Dir":"","Env":[],"RedirectStdout":{"type":"stdout"},"RedirectStderr":{"type":"stderr"},"RestartPolicy":"always","TerminationGracePeriod":10000000000,"User":""}}]}
twm_1  | 2023/01/26 00:23:30.165        DEBUG   http    starting server loop    {"address": "[::]:80", "tls": false, "http3": false}
twm_1  | 2023/01/26 00:23:30.165        INFO    http.log        server running  {"name": "srv0", "protocols": ["h1", "h2", "h3"]}
twm_1  | 2023/01/26 00:23:30.165        DEBUG   supervisor      module started
twm_1  | 2023/01/26 00:23:30.166        INFO    autosaved config (load with --resume flag)      {"file": "/root/.config/caddy/autosave.json"}
twm_1  | 2023/01/26 00:23:30.167        INFO    serving initial configuration
twm_1  | 2023/01/26 00:23:30.169        INFO    supervisor      process started {"command": ["php-fpm"], "replica": 0, "pid": 9}
twm_1  | 2023/01/26 00:23:30.178        INFO    tls.cache.maintenance   started background certificate maintenance      {"cache": "0xc00041d260"}
twm_1  | 2023/01/26 00:23:30.178        INFO    tls     cleaning storage unit   {"description": "FileStorage:/root/.local/share/caddy"}
twm_1  | 2023/01/26 00:23:30.178        INFO    tls     finished cleaning storage units
twm_1  | [26-Jan-2023 00:23:30] NOTICE: fpm is running, pid 9
twm_1  | [26-Jan-2023 00:23:30] NOTICE: ready to handle connections

5. What I already tried:

I’ve rewritten the setup about 3 times at this point, it was working before with Caddy v1 but now I’ve swapped to Caddy v2 it does not work. I’ve tried restarting PHP-FPM and Caddy and I’ve tried a multitude of different configs and I really do not understand why this does not work.

6. Links to relevant resources:

You also need file_server.

Caddy doesn’t enable a file server by default, so you need to add that directive for Caddy to serve static files.

Since you’re using a different base image, you’ll need to do some additional configuration to make sure Caddy is properly set up. See the things in the base image:

  • Make sure ca-certificates and mailcap are installed as well (not sure if the PHP image comes with them).

  • Make sure to set XDG_CONFIG_HOME and XDG_DATA_HOME so that Caddy’s storage is in a predictable place

  • Make sure to set up a volume for Caddy’s storage so that you don’t lose your issued certs and keys when running in production.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.