mirror of
https://gitee.com/ulthon/ulthon_admin.git
synced 2026-07-01 15:32:48 +08:00
2.8 KiB
2.8 KiB
核心需求
将FrankenPHP + ThinkPHP应用打包成单一二进制文件,支持一行命令启动多种服务
详细要求
1. 打包方式
- 使用FrankenPHP的embed机制将ThinkPHP代码打包到Go二进制文件中
- 最终产出:一个独立的可执行文件,包含所有ThinkPHP代码和依赖
- 支持跨平台编译:Linux和Windows
2. 服务启动模式
# Linux
./frankphp serve -daemon -port 8080
# Windows
frankphp.exe serve -daemon -port 8080
一行命令同时启动:
- FrankenPHP的PHP-FPM模式(HTTP服务器)
- ThinkPHP应用程序(如Workerman等Worker进程)
- 进入后台守护进程模式
3. 命令系统支持
系统管理命令:
serve- 启动所有服务stop- 停止守护进程restart- 重启服务status- 查看运行状态version- 版本信息install- 安装为系统自动启动服务uninstall- 卸载系统自动启动服务
ThinkPHP框架命令:
- 支持think命令:
./frankphp make:controller,./frankphp migrate:run - 支持自定义命令:
./frankphp my-command --option=value - 直接执行PHP脚本:
./frankphp php script.php
4. 守护进程特性
- 后台运行
- PID文件管理
- 信号处理(SIGTERM, SIGHUP等)
- 进程监控和重启机制
5. 多服务并发运行
- HTTP服务:FrankenPHP处理ThinkPHP Web请求
- Worker服务:运行Workerman等长驻进程
- 所有服务在同一进程中并发运行
6. 自动启动服务管理
Linux系统:
- 生成systemd服务文件
- 支持
systemctl enable/disable - 开机自动启动
Windows系统:
- 注册为Windows服务
- 支持服务管理器控制
- 开机自动启动
7. ThinkPHP框架集成
- 支持ThinkPHP的think命令行工具
- 兼容ThinkPHP的目录结构
- 支持ThinkPHP的配置文件
- 集成ThinkPHP的命令系统
8. 技术实现细节
- 使用Go的
embed包嵌入ThinkPHP文件 - 运行时提取文件到临时目录
- 使用goroutine并发管理多个服务
- 跨平台的服务安装/卸载实现
- 统一的日志输出和错误处理
9. 部署便利性
- 单文件部署,无需PHP环境
- 跨平台编译支持(Linux/Windows)
- 支持系统服务管理
- 一键安装自动启动
- 一行命令启动完整应用栈
10. 使用示例
# 构建
./build.sh
# 启动服务
./frankphp serve -daemon -port 8080
# ThinkPHP命令
./frankphp make:controller User
./frankphp migrate:run
# 安装为系统服务
sudo ./frankphp install
# 卸载系统服务
sudo ./frankphp uninstall
# Windows下
frankphp.exe install
frankphp.exe uninstall
核心价值:将ThinkPHP应用环境(HTTP服务器 + Worker进程 + 命令行工具)打包成一个跨平台的独立二进制文件,支持系统服务管理和一键部署。