mirror of
https://gitee.com/ulthon/ulthon_admin.git
synced 2026-07-01 07:22:49 +08:00
feat: 初步增加frankenphp构建二进制
This commit is contained in:
2543
composer.lock
generated
2543
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -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
105
extend/ua/build/BuildDoc.md
Normal 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
34
extend/ua/build/Readme.md
Normal 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、定时器、多进程命令等。同时也支持单独运行。
|
||||
|
||||
支持安装自动启动、后台运行等特性。
|
||||
20
extend/ua/build/static-build.Dockerfile
Normal file
20
extend/ua/build/static-build.Dockerfile
Normal 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
|
||||
Reference in New Issue
Block a user