FrankenPHP生产环境部署指南:从Docker到服务器配置
frankenphp The modern PHP app server 项目地址: https://gitcode.com/gh_mirrors/fr/frankenphp
前言
在现代PHP应用部署中,容器化技术已经成为标准实践。本文将详细介绍如何使用FrankenPHP这一创新的PHP运行时,将你的PHP应用部署到生产环境。我们将从Docker配置开始,逐步讲解服务器准备、域名设置到最终部署的全过程。
一、应用容器化准备
1.1 创建Dockerfile
首先需要在项目根目录创建Dockerfile,这是容器化的基础配置文件:
FROM dunglas/frankenphp
# 设置服务器域名(替换为你的实际域名)
ENV SERVER_NAME=your-domain.com
# 使用PHP生产环境配置
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
# 复制项目文件到容器
COPY . /app/public
对于不同的框架,复制策略可能不同:
- 普通PHP项目:复制到/public目录
- Symfony/Laravel项目:需要复制整个项目目录
1.2 配置Docker Compose
创建compose.yaml文件定义服务:
services:
php:
image: dunglas/frankenphp
restart: always
ports:
- "80:80" # HTTP端口
- "443:443" # HTTPS端口
- "443:443/udp" # HTTP/3支持
volumes:
- caddy_data:/data # Caddy证书存储
- caddy_config:/config # Caddy配置存储
volumes:
caddy_data:
caddy_config:
这个配置实现了:
- 自动重启保证服务可用性
- 暴露HTTP/HTTPS标准端口
- 支持HTTP/3协议
- 持久化存储证书和配置
二、服务器准备
2.1 服务器选择建议
虽然教程以云服务提供商为例,但任何满足以下条件的Linux服务器均可:
- 支持Docker和Docker Compose
- 至少1GB内存(生产环境建议2GB以上)
- 稳定的网络连接
2.2 服务器初始化步骤
-
通过SSH连接服务器:
ssh root@服务器IP
-
验证Docker环境:
docker --version docker-compose --version
-
确保服务器防火墙开放了80和443端口
三、域名与HTTPS配置
3.1 DNS记录设置
必须为服务器IP添加A记录:
your-domain.com. IN A 服务器IP
3.2 HTTPS证书自动获取
FrankenPHP内置了以下HTTPS特性:
- 自动从Let's Encrypt获取证书
- 自动续期证书
- 默认启用HTTP/2和HTTP/3
注意:Let's Encrypt不支持裸IP地址,必须配置域名
四、应用部署流程
4.1 代码上传方式
有多种方式可以将代码部署到服务器:
-
Git直接克隆(推荐有版本控制的项目)
git clone 你的项目仓库
-
使用SCP上传(适合简单项目)
scp -r ./project root@服务器IP:/path
-
CI/CD自动化部署(生产环境推荐)
4.2 启动服务
进入项目目录后执行:
docker compose up -d --wait
这个命令会:
- 在后台(-d)启动服务
- 等待服务就绪(--wait)
- 自动构建镜像(如果需要)
4.3 部署后验证
-
检查服务状态:
docker compose ps
-
查看日志:
docker compose logs
-
访问你的域名验证是否正常工作
五、高级部署场景
5.1 多节点部署
对于高可用需求,可以考虑:
-
Docker Swarm集群部署
- 兼容现有compose.yaml
- 提供基础的服务发现和负载均衡
-
Kubernetes部署
- 使用专为FrankenPHP优化的Helm图表
- 适合大规模生产环境
5.2 性能优化建议
-
调整PHP-FPM配置:
pm.max_children = 50 pm.start_servers = 5
-
启用OPcache:
opcache.enable=1 opcache.memory_consumption=128
-
考虑使用Redis等缓存方案
六、常见问题解决
-
HTTPS证书问题:
- 确认DNS解析已生效
- 检查服务器80/443端口可访问
- 查看Caddy日志获取具体错误
-
部署缓存问题:
docker compose build --no-cache
-
文件权限问题:
- 确保项目文件对Docker进程可读
- 必要时调整volume权限
结语
通过本文的指导,你应该已经掌握了使用FrankenPHP部署PHP应用到生产环境的完整流程。从Docker配置到服务器部署,FrankenPHP提供了开箱即用的现代化PHP运行环境,大大简化了部署复杂度。对于特定框架如Symfony或Laravel,可能需要根据框架特点进行适当调整,但核心原理是相通的。
frankenphp The modern PHP app server 项目地址: https://gitcode.com/gh_mirrors/fr/frankenphp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考