Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
- **PHP `register_argc_argv`**:精简 `php.ini` 未显式关闭该选项时 FPM 默认为 On,查询串会写入 `$_SERVER['argv']`,导致依赖「无 argv 才走 PATHINFO」的框架误判为 CLI 。各版本模板现默认 `register_argc_argv = Off`(与 dnmp 一致;CLI SAPI 仍强制 On)

### ✨ 新增
- **Docker 未就绪时的打开与安装**:运行状态横幅按本机探测区分未安装、已安装未启动、权限不足和自定义 `DOCKER_HOST`;可打开已安装的 Docker Desktop,或跳转对应平台的官方安装页
- **默认欢迎页**:工作区 `SOURCE_DIR=./www` → `/www` **始终挂载**(与站点卷共存);Nginx `default.conf` 以 `default_server` + `server_name _` 提供欢迎页,`fastcgi_pass` 使用短别名 `php`;模板 `src-tauri/www/index.html` 在应用配置时释放(已存在同名文件不覆盖)。未匹配域名的请求回落到该页
- **服务目录(Service Catalog)**:内置 `service_catalog.json` + 工作区 `.user-config/custom_services.json` 合并;生成按 `generator: php|nginx|image` 路由,服务 kind 为字符串(兼容历史 `PHP`/`MySQL` 序列化)
- **可选中间件**:MySQL 与 Redis 对齐——可删到 0;新工作区默认不启用 MySQL;未选中不写 `.env` / compose
Expand Down
34 changes: 34 additions & 0 deletions src-tauri/src/commands/docker.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
use crate::app_log;
use crate::docker::host_status::{self, DockerHostReport};
use crate::docker::manager::{DockerManager, PsContainer};

#[tauri::command]
Expand All @@ -7,6 +9,38 @@ pub async fn check_docker() -> Result<(), String> {
manager.check_docker_availability().await
}

/// 仪表盘用这一次调用区分引擎就绪、未安装、未启动、权限和自定义地址。
/// 不可用不是命令失败:状态在返回值里,避免失败路径再打一次 ping。
#[tauri::command]
pub async fn inspect_docker_host() -> DockerHostReport {
// `new()` 的错误是 `Box<dyn Error>`,不能留在 await 两侧,先收成 String。
let manager = match DockerManager::new() {
Ok(manager) => manager,
Err(e) => {
return host_status::report_from_ping(Some(format!(
"Docker installation not found: {e}"
)));
}
};
let ping_error = manager.check_docker_availability().await.err();
host_status::report_from_ping(ping_error)
}

/// 启动本机已安装的 Docker Desktop。不代为安装,也不拉起 Linux 上的 dockerd。
#[tauri::command]
pub fn open_docker_desktop() -> Result<(), String> {
match host_status::launch_docker_desktop() {
Ok(()) => {
app_log!(info, "docker", "Docker Desktop launch requested");
Ok(())
}
Err(e) => {
app_log!(warn, "docker", "failed to open Docker Desktop: {e}");
Err(e)
}
}
}

#[tauri::command]
pub async fn list_containers() -> Result<Vec<PsContainer>, String> {
check_docker().await?;
Expand Down
Loading