FrankenPHP项目Docker镜像使用完全指南
frankenphp The modern PHP app server 项目地址: 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镜像会定期更新:
- 每当发布新版本时
- 每天UTC时间4点检查并更新基础PHP镜像
开发版本镜像
对于需要最新功能的开发者,可以使用开发版镜像:
latest*
标签:对应main分支最新代码sha-<commit-hash>
:特定提交的构建
结语
通过本文,您应该已经掌握了使用Docker部署FrankenPHP应用的全套方法。从基础使用到高级配置,从开发环境搭建到生产环境安全加固,FrankenPHP的Docker镜像提供了灵活而强大的解决方案。
frankenphp The modern PHP app server 项目地址: https://gitcode.com/gh_mirrors/fr/frankenphp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考