FrankenPHP项目Docker镜像使用完全指南

FrankenPHP项目Docker镜像使用完全指南

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

前言

FrankenPHP是一个创新的PHP运行时环境,它基于Caddy服务器构建,提供了高性能的PHP执行能力。本文将全面介绍如何使用Docker来部署和管理FrankenPHP应用。

FrankenPHP Docker镜像概述

FrankenPHP官方提供了基于Debian和Alpine Linux的Docker镜像,支持多种CPU架构。这些镜像基于官方PHP镜像构建,提供了开箱即用的PHP运行环境。

镜像版本体系

FrankenPHP镜像遵循严格的版本标签规范:

dunglas/frankenphp:<frankenphp-version>-php<php-version>-<os>

其中:

  • <frankenphp-version>:FrankenPHP的版本号,支持主版本(1)、次版本(1.2)和补丁版本(1.2.3)
  • <php-version>:PHP版本号,支持8.2、8.3和8.4
  • <os>:操作系统类型,bookworm表示Debian Bookworm,alpine表示Alpine Linux

对于生产环境,推荐使用Debian版本,因为它提供了更好的兼容性和稳定性。

基础使用指南

创建简单的Dockerfile

要使用FrankenPHP镜像,只需创建一个简单的Dockerfile:

FROM dunglas/frankenphp

# 将项目文件复制到容器中
COPY . /app/public

然后构建并运行容器:

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

安装PHP扩展

FrankenPHP镜像内置了docker-php-extension-installer工具,可以方便地安装PHP扩展:

FROM dunglas/frankenphp

# 安装常用PHP扩展
RUN install-php-extensions \
    pdo_mysql \  # MySQL数据库支持
    gd \         # 图像处理
    intl \       # 国际化支持
    zip \        # ZIP压缩
    opcache      # PHP性能优化

高级配置技巧

自定义Caddy模块

由于FrankenPHP基于Caddy构建,我们可以通过xcaddy工具添加自定义Caddy模块:

FROM dunglas/frankenphp:builder AS builder

# 使用xcaddy构建自定义FrankenPHP二进制文件
RUN CGO_ENABLED=1 \
    XCADDY_SETCAP=1 \
    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  # 添加Brotli压缩支持

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

启用Worker模式

FrankenPHP支持Worker模式,可以显著提高PHP应用的性能:

FROM dunglas/frankenphp

# 设置环境变量启用Worker模式
ENV FRANKENPHP_CONFIG="worker ./public/index.php"

开发环境配置

使用数据卷挂载

在开发过程中,可以使用数据卷挂载实现代码热更新:

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

使用Docker Compose

对于更复杂的开发环境,推荐使用Docker Compose:

services:
  php:
    image: dunglas/frankenphp
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"  # HTTP/3支持
    volumes:
      - ./:/app/public  # 代码挂载
      - caddy_data:/data
      - caddy_config:/config
    tty: true  # 开发模式下启用彩色日志

volumes:
  caddy_data:
  caddy_config:

安全最佳实践

非root用户运行

为了增强安全性,建议以非root用户运行FrankenPHP:

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 /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 /config/caddy

USER ${USER}

然后在环境变量中指定端口:

SERVER_NAME=:8000

镜像更新策略

FrankenPHP Docker镜像会定期更新:

  1. 每当发布新版本时
  2. 每天UTC时间4点检查并更新基础PHP镜像

开发版本镜像

对于需要最新功能的开发者,可以使用开发版镜像:

  • latest*标签:对应main分支最新代码
  • sha-<commit-hash>:特定提交的构建

结语

通过本文,您应该已经掌握了使用Docker部署FrankenPHP应用的全套方法。从基础使用到高级配置,从开发环境搭建到生产环境安全加固,FrankenPHP的Docker镜像提供了灵活而强大的解决方案。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

郁铎舒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值