# Webman 部署说明（步骤 11）

> 对应迁移文档「步骤 11：入口与部署」

---

## 一、入口与启动

Webman **不使用** `public/index.php` 作为入口，而是通过命令行启动常驻进程：

```bash
# 进入项目目录
cd dafuweng-webman

# 启动（默认监听 8787 端口）
php start.php start

# 后台运行（daemon 模式）
php start.php start -d

# 停止
php start.php stop

# 重启
php start.php restart
```

- 入口脚本：`start.php`（项目根目录）
- 默认端口：**8787**（在 `config/process.php` 中配置）
- 修改端口：编辑 `config/process.php` 中 `listen => 'http://0.0.0.0:8787'`

---

## 二、public 目录静态资源

`public/` 目录需保留以下内容，供 Nginx 直接提供或前端引用：

| 路径 | 说明 |
|------|------|
| `install/` | 安装向导（index.html、assets 等） |
| `robots.txt` | 搜索引擎爬虫规则 |
| `favicon.ico` | 站点图标（可选） |
| `index.html` | 前端 SPA 入口（若已编译） |

**说明**：`index.php`、`router.php` 为 ThinkPHP 入口，Webman 不需要，无需复制。

---

## 三、Nginx 反向代理

将 Nginx 的 `root` 指向 Webman 的 **public** 目录，动态请求代理到 8787 端口。

### 配置示例

```nginx
upstream webman {
    server 127.0.0.1:8787;
    keepalive 10240;
}

server {
    server_name 你的域名;
    listen 80;
    access_log off;
    # 必须指向 webman 的 public 目录，不能是项目根目录
    root /path/to/dafuweng-webman/public;

    location / {
        try_files $uri $uri/ @proxy;
    }

    location @proxy {
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_pass http://webman;
    }

    # 拒绝访问 .php 文件（Webman 无 PHP 入口）
    location ~ \.php$ {
        return 404;
    }

    # 允许 .well-known（如 Let's Encrypt）
    location ~ ^/\.well-known/ {
        allow all;
    }

    # 拒绝隐藏文件/目录
    location ~ /\. {
        return 404;
    }
}
```

### 配置要点

- **root**：必须为 `dafuweng-webman/public`，否则可能暴露配置等敏感文件
- **try_files**：先查找静态文件，找不到再代理到 Webman
- **proxy_pass**：指向 `http://webman`（upstream 8787）

### HTTPS 示例

```nginx
server {
    listen 443 ssl http2;
    server_name 你的域名;
    root /path/to/dafuweng-webman/public;

    ssl_certificate     /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        try_files $uri $uri/ @proxy;
    }

    location @proxy {
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_pass http://webman;
    }
}
```

---

## 四、开发环境快速访问

不配置 Nginx 时，可直接访问：

- 接口：`http://127.0.0.1:8787/api/xxx`、`http://127.0.0.1:8787/admin/xxx`
- 静态：`http://127.0.0.1:8787/install/`、`http://127.0.0.1:8787/robots.txt`

Webman 会从 `public/` 目录提供静态文件。

---

## 五、安装检测说明

原 ThinkPHP 在 `public/index.php` 中做安装检测（无 `install.lock` 时跳转 `/install/`）。  
Webman 迁移后：

- 若使用 Nginx：安装检测逻辑需在 **路由/中间件** 或 **前端** 中实现
- 若直接访问 8787：可在 `app/common/middleware` 或 Api/Backend 基类中增加安装检测

---

## 六、参考

- [Webman 官方文档 - nginx 代理](https://workerman.net/doc/webman/others/nginx-proxy.html)
