FrankenPHP本身不内置开机自启能力,需借助系统机制实现:Windows推荐NSSM注册为服务,Linux使用systemd服务单元,Docker部署则依赖Docker daemon的restart: always策略。

FrankenPHP 本身是单二进制应用,不内置 Windows 服务注册或 Linux systemd 集成能力,因此不能直接“一键开机自启”,但可通过系统级机制可靠实现。关键在于:把它当作一个需要被系统守护的长期进程来管理,而不是依赖它自己提供服务注册功能。
以下分平台说明主流、稳定、生产可用的方式:
Windows 下让 FrankenPHP 开机自启
推荐使用「Windows 服务」方式,最接近原生体验,无需用户登录即可运行:
- 以管理员身份打开 PowerShell 或 CMD
- 下载并安装 NSSM(Non-Sucking Service Manager),解压后进入其目录
- 执行命令注册服务(路径按实际调整):
nssm install FrankenPHP
在弹出窗口中:- “Path”填:C:\path\to\frankenphp.exe
- “Startup directory”填:C:\your\php\project\root
- “Arguments”填:php-server --worker ./public/index.php(按需替换为 classic 模式或其它参数)
- “Service name”建议设为 FrankenPHP,“Display name”可写“FrankenPHP Web Server”
- 点击 “Install service”,完成后在 services.msc 中找到该服务,右键 → 属性 → 启动类型设为“自动”,再点“启动”
- 重启系统验证是否自动拉起(访问 http://localhost 应能响应)
Linux(systemd)下设置 FrankenPHP 自启
这是生产环境最标准的做法,适用于 Ubuntu/Debian/CentOS 等主流发行版:
立即学习“PHP免费学习笔记(深入)”;
- 创建服务文件:/etc/systemd/system/frankenphp.service
- 内容示例(请根据项目路径和模式调整):
[Unit] Description=FrankenPHP PHP Application Server After=network.target <p>[Service] Type=simple User=www-data WorkingDirectory=/var/www/myapp ExecStart=/usr/local/bin/frankenphp php-server --worker ./public/index.php Restart=always RestartSec=5 Environment=FRANKENPHP_CONFIG=/var/www/myapp/Caddyfile StandardOutput=journal StandardError=journal</p><p>[Install] WantedBy=multi-user.target</p>
- 启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable frankenphp
sudo systemctl start frankenphp - 检查状态:sudo systemctl status frankenphp,确认显示 active (running)
- 日志查看:journalctl -u frankenphp -f
Docker 方式部署(跨平台通用)
如果你用 Docker 运行 FrankenPHP(如官方镜像 dunglas/frankenphp),开机自启就交给 Docker daemon 管理:
- 确保 Docker 服务已设为开机自启:
Ubuntu/Debian:sudo systemctl enable docker
Windows WSL2 或 Desktop:Docker Desktop 默认开机启动 - 使用
restart: always的 compose.yaml 即可(无需额外配置):
services:
app:
image: dunglas/frankenphp
restart: always
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ./myapp:/app/public
- caddy_data:/data
# 其他配置...
- 运行 docker-compose up -d 后,即使宿主机重启,容器也会自动恢复运行
补充说明:为什么不用任务计划或启动文件夹?
这些方式在 Windows 上虽可行,但有明显短板:
- “启动文件夹 + BAT” 依赖用户登录,服务器无桌面环境时无效
- “任务计划程序” 若未勾选“不管用户是否登录都要运行”,会因登录会话结束而中断
- 两者均缺乏进程崩溃后的自动拉起能力,也不提供日志集成与状态监控
相比之下,Windows 服务(NSSM)和 Linux systemd 均支持自动重启、资源限制、依赖管理与完整生命周期控制,更适合生产级持续运行。



















