FrankenPHP Docker镜像使用完全指南

FrankenPHP Docker镜像使用完全指南

frankenphp The modern PHP app server frankenphp 项目地址: https://gitcode.com/gh_mirrors/fr/frankenphp

前言

FrankenPHP是一个基于Caddy服务器的现代化PHP运行时环境,通过Docker镜像可以快速部署PHP应用。本文将全面介绍如何定制和使用FrankenPHP的Docker镜像。

FrankenPHP镜像基础

FrankenPHP的Docker镜像基于官方PHP镜像构建,提供两种Linux发行版选择:

  1. Debian Bookworm - 推荐用于生产环境,稳定性更好
  2. Alpine Linux - 体积更小,适合资源受限的环境

镜像支持PHP 8.2、8.3和8.4版本,标签命名遵循以下模式:

dunglas/frankenphp:<frankenphp版本>-php<php版本>-<操作系统>

例如:dunglas/frankenphp:1.2.3-php8.3-bookworm

快速开始

基础使用

创建一个简单的Dockerfile:

FROM dunglas/frankenphp

COPY . /app/public

构建并运行容器:

docker build -t my-php-app .
docker run -it --rm --name my-running-app my-php-app

开发环境配置

在开发时,建议挂载本地目录作为卷:

docker run -v $PWD:/app/public -p 80:80 -p 443:443 -p 443:443/udp --tty my-php-app

使用Docker Compose更便捷:

services:
  php:
    image: dunglas/frankenphp
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./:/app/public
      - caddy_data:/data
      - caddy_config:/config
    tty: true

volumes:
  caddy_data:
  caddy_config:

高级配置

安装PHP扩展

镜像内置了docker-php-extension-installer脚本,可以轻松添加扩展:

FROM dunglas/frankenphp

RUN install-php-extensions \
    pdo_mysql \
    gd \
    intl \
    zip \
    opcache

自定义Caddy模块

FrankenPHP基于Caddy构建,可以添加任何Caddy模块:

FROM dunglas/frankenphp:builder AS builder

COPY --from=caddy:builder /usr/bin/xcaddy /usr/bin/xcaddy

RUN CGO_ENABLED=1 \
    XCADDY_SETCAP=1 \
    XCADDY_GO_BUILD_FLAGS="-ldflags='-w -s' -tags=nobadger,nomysql,nopgx" \
    CGO_CFLAGS=$(php-config --includes) \
    CGO_LDFLAGS="$(php-config --ldflags) $(php-config --libs)" \
    xcaddy build \
        --output /usr/local/bin/frankenphp \
        --with github.com/dunglas/frankenphp=./ \
        --with github.com/dunglas/frankenphp/caddy=./caddy/ \
        --with github.com/dunglas/caddy-cbrotli
        # 添加更多模块

FROM dunglas/frankenphp AS runner
COPY --from=builder /usr/local/bin/frankenphp /usr/local/bin/frankenphp

Worker模式配置

设置环境变量启用Worker模式:

FROM dunglas/frankenphp

ENV FRANKENPHP_CONFIG="worker ./public/index.php"

安全最佳实践

非root用户运行

建议在生产环境中以非root用户运行容器:

FROM dunglas/frankenphp

ARG USER=appuser

RUN useradd ${USER}; \
    setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp; \
    chown -R ${USER}:${USER} /data/caddy && chown -R ${USER}:${USER} /config/caddy

USER ${USER}

非特权端口运行

如果不需要使用80/443端口,可以完全移除权限:

FROM dunglas/frankenphp

ARG USER=appuser

RUN useradd ${USER}; \
    setcap -r /usr/local/bin/frankenphp; \
    chown -R ${USER}:${USER} /data/caddy && chown -R ${USER}:${USER} /config/caddy

USER ${USER}

然后设置SERVER_NAME环境变量为:8000等非特权端口。

镜像更新策略

FrankenPHP镜像会在以下情况下自动更新:

  1. 有新版本发布时
  2. 每天UTC时间4点检查官方PHP镜像更新

开发版本

开发版本镜像会随主分支提交自动构建,提供latest标签和基于Git提交哈希的标签。

总结

FrankenPHP Docker镜像提供了灵活、安全的PHP运行环境,通过本文介绍的各种配置方法,可以满足从开发到生产的不同需求场景。无论是简单的PHP应用还是需要高度定制的环境,都能找到合适的部署方案。

frankenphp The modern PHP app server frankenphp 项目地址: https://gitcode.com/gh_mirrors/fr/frankenphp

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晏其潇Aileen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值