feat: 初步增加frankenphp构建二进制

This commit is contained in:
augushong
2025-08-09 21:58:18 +08:00
parent 4c79daf501
commit 7b5a84bcc3
5 changed files with 164 additions and 2548 deletions

2543
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -54,24 +54,24 @@ if (!function_exists('__url')) {
}
}
if(!function_exists('flow_url')) {
if (!function_exists('flow_url')) {
/**
* 基于当前页面的GET参数构建url
* 基于当前页面的GET参数构建url.
* @param string $url
* @param array $vars
* @param bool $suffix
* @param bool $domain
* @return string
* */
function flow_url($url, array $vars = [], $suffix = true, $domain = false){
function flow_url($url, array $vars = [], $suffix = true, $domain = false)
{
$default_vars = Request::get();
$vars = array_merge($default_vars, $vars);
return __url($url, $vars, $suffix, $domain);
}
}
if (!function_exists('password')) {
/**
* 密码加密算法.

105
extend/ua/build/BuildDoc.md Normal file
View File

@@ -0,0 +1,105 @@
## 核心需求
**将FrankenPHP + ThinkPHP应用打包成单一二进制文件支持一行命令启动多种服务**
## 详细要求
### 1. 打包方式
- 使用FrankenPHP的embed机制将ThinkPHP代码打包到Go二进制文件中
- 最终产出一个独立的可执行文件包含所有ThinkPHP代码和依赖
- 支持跨平台编译Linux和Windows
### 2. 服务启动模式
```bash
# 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. 使用示例
```bash
# 构建
./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进程 + 命令行工具)打包成一个跨平台的独立二进制文件,支持系统服务管理和一键部署。**

34
extend/ua/build/Readme.md Normal file
View File

@@ -0,0 +1,34 @@
## 一般二进制
使用frankenphp官方的方式打包为二进制。
支持php-fpm、php-cli但需要手动运行命令。
### 执行构建复制产物
```bash
docker build -f .\extend\ua\build\static-build.Dockerfile -t ulthon-admin-builder .
docker build -f ./extend/ua/build/static-build.Dockerfile -t ulthon-admin-builder .
docker run -it --name ulthon-admin-build-container ulthon-admin-builder bash
```
新启动一个终端
```bash
docker cp ulthon-admin-build-container:/go/src/app/dist/frankenphp-linux-x86_64 ./frankenphp-linux-x86_64
docker rm ulthon-admin-build-container
```
### 运行
#### linux
将二进制拷贝到目录,增加执行权限,运行。
```
./frankenphp-linux-x86_64 php-server -l :9000
```
## ulthon_admin二进制
> 仍然是frankenphp官方最佳实践之一。
构建出完全适配ulthon_admin的二进制文件只需要一行命令就可以运行系统所有需求比如php-fpm、定时器、多进程命令等。同时也支持单独运行。
支持安装自动启动、后台运行等特性。

View File

@@ -0,0 +1,20 @@
FROM dunglas/frankenphp:static-builder-gnu
# 设置代理
# ENV http_proxy http://192.168.0.106:1090
# ENV https_proxy http://192.168.0.106:1090
# # 如果你的内部网络不需要代理,可以设置 no_proxy
# ENV no_proxy localhost,127.0.0.1,dl.static-php.dev
RUN rm -rf /go/src/app/dist/static-php-cli
# 复制应用代码
WORKDIR /go/src/app/dist/app
COPY . .
# 构建静态二进制文件包含项目所需的所有PHP扩展
WORKDIR /go/src/app/
RUN EMBED=dist/app/ \
PHP_EXTENSIONS=ctype,curl,dom,fileinfo,filter,gd,iconv,json,libxml,mbstring,opcache,openssl,pdo,pdo_sqlite,simplexml,tokenizer,xml,xmlreader,xmlwriter,zip,zlib \
PHP_VERSION=8.2 \
./build-static.sh