Files
li 1b24994e74 feat: 后端全量更新 - 含所有本次需求
- Contract.php: 返回合约账户余额(balance_contract)
- My.php: 地址管理增加BTC/ETH
- AppContract.php: 一键平仓(closeall)
- AppProxy.php: 代理专属注册链接 + 分级权限(L1/L2)
- site.php: 手续费减半(0.018→0.009)
- agent_permission_setup.sql: 代理权限SQL
- crypto_news_crawler.py: 新闻自动采集脚本
2026-03-30 20:16:32 +08:00

272 lines
11 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 部署说明(FastAdmin / ThinkPHP5
本文档用于指导你将本项目部署到生产环境(Linux + Nginx/Apache + PHP-FPM + MySQL + Redis)。项目为 **FastAdminThinkPHP 5.0.x** 多模块应用,Web 根目录为 `public/`
## 1. 技术栈与关键组件
- **后端框架**ThinkPHP 5.0.x`topthink/framework ~5.0.24`
- **后台框架**FastAdmin(含插件机制 addons
- **数据库**:MySQL(配置文件 `application/database.php`,默认表前缀 `fa_`
- **缓存/队列**Redis
- Redis 业务配置:`application/config.php``redis`
- 队列配置:`application/extra/queue.php``connector=redis`,默认 `select=5`
- **队列**`topthink/think-queue 1.1.6`(命令:`php think queue:listen` / `php think queue:work --daemon`
- **定时任务**:项目内存在 API 形式的定时任务入口(见 `application/api/controller/Cron.php`),以及 K 线生成脚本(见根目录 `NewTradeKline*.php``TradeKline.php`
## 2. 服务器与运行环境要求
- **PHP**>= 7.0(建议 7.2/7.4,更高版本需要你自行验证兼容性)
- **PHP 扩展**(至少):
- `pdo_mysql`
- `curl`
- `json`
- 以及常用扩展:`mbstring``openssl``gd`/`imagick`(如涉及图片处理)
- **MySQL**5.7/8.0(推荐 5.7 起)
- **Redis**5.x/6.x
- **Web Server**Nginx 或 Apache
## 3. 代码发布目录建议
假设你发布到:
- 项目目录:`/www/wwwroot/exchange-admin`(示例)
- Web 根目录:`/www/wwwroot/exchange-admin/public`
注意:ThinkPHP/FastAdmin **必须** 将站点根指向 `public/`,不要直接指向项目根目录。
## 4. 目录结构说明(部署相关)
部署与运维时,重点关注下面这些目录/文件的用途:
- **`public/`**
- Web 根目录(Nginx/Apache 的 `root` 必须指向这里)
- 包含 `index.php` 应用入口
- 上传目录通常在 `public/uploads/`(按实际生成)
- **`application/`**
- ThinkPHP 应用代码(多模块)
- 常见模块:
- `application/admin/`:后台模块
- `application/api/`API 模块
- `application/index/`:前台模块
- 核心配置:
- `application/config.php`:应用配置(含 `redis` 等)
- `application/database.php`:数据库配置(通过 `Env::get('database.xxx', ...)`
- 扩展配置:`application/extra/`(如 `queue.php``site.php``upload.php`
- 目录用途细分(重点:控制器在哪、对应哪个模块):
- `application/admin/`
- `controller/`:后台控制器(典型:`app\admin\controller\Index``Dashboard`
- `model/`:后台模块模型
- `view/`:后台页面模板
- `command/`:后台相关 CLI 命令(安装/资源压缩/插件等)
- `config.php`:后台模块的补充配置(会覆盖/补充全局配置)
- `application/api/`
- `controller/`API 控制器(典型:`app\api\controller\Index``Cron``Job`
- `job/`:队列任务类(如 `app\api\job\Dismiss`,由 `think-queue` 消费执行)
- `common.php` / `config.php`API 模块内的补充逻辑与配置
- `application/index/`
- `controller/`:前台控制器(典型:`app\index\controller\Index`
- `view/`:前台模板
- `application/kefu/`
- `controller/`:客服/网关相关启动类(Workerman/GatewayWorker,典型:`app\kefu\controller\Sgateway`
- `application/common/`
- `controller/`:控制器基类与公共逻辑
- `Backend.php`:后台控制器基类(`app\common\controller\Backend`
- `Api.php`API 控制器基类(`app\common\controller\Api`
- `Frontend.php`:前台控制器基类(`app\common\controller\Frontend`
- `model/`:公共模型
- `view/`:公共视图/模板
- `application/extra/`
- `queue.php`:队列配置
- `site.php`:站点配置(后台“系统配置”常会生成/覆盖此文件)
- `upload.php`:上传配置
- `addons.php`:插件 Hook/路由相关配置
- 模块/控制器与 URL 的关系(常见规则):
- ThinkPHP5 默认格式:`/{module}/{controller}/{action}`
- 例如:
- `application/api/controller/Index.php` -> `/api/index/*`
- `application/admin/controller/Index.php` -> 后台入口文件 + `/index/*`
- `public/index.php` 为统一入口;后台入口通常是 `public/admin.php`(安装后可能被重命名为随机文件名)。
- **`addons/`**
- FastAdmin 插件目录(启用/禁用插件会影响系统行为与路由)
- **`runtime/`**
- 运行时目录(日志、缓存等)
- **生产环境通常需要可写权限**(由 PHP-FPM 运行用户写入)
- **`vendor/`**
- Composer 依赖(生产环境需要完整存在;一般不建议放到 Web 根可访问路径下)
- **`think`**
- ThinkPHP 控制台入口(命令行)
- 常用:安装 `php think install`、队列 `php think queue:work --daemon`
部署建议:
- **只暴露 `public/` 为 Web 根**,其余目录不要通过 Web Server 直接访问。
- 确保 `runtime/``public/uploads/` 对 PHP-FPM 用户可写。
## 5. 环境配置(.env
根目录存在示例文件:`.env.sample`,你可以复制为 `.env`
- **Linux**`cp .env.sample .env`
- **Windows**:复制并重命名
示例内容(节选):
- `app.debug` / `app.trace`
- `database.hostname` / `database.database` / `database.username` / `database.password` / `database.hostport` / `database.prefix`
说明:
- `application/config.php``application/database.php` 会通过 `think\Env::get()` 读取环境变量(即 `.env` 或系统环境变量)。
- 生产环境请确保:`[app] debug=false`
## 6. 初始化安装(推荐:命令行安装)
本项目内置 FastAdmin 安装命令:`php think install`(见 `application/admin/command/Install.php`)。
### 6.1 方式 A:命令行安装(推荐)
在项目根目录执行:
- `php think install --hostname=127.0.0.1 --hostport=3306 --database=YOUR_DB --username=YOUR_USER --password=YOUR_PASS --prefix=fa_`
安装过程会自动:
- 创建数据库(若权限允许)
- 导入初始化 SQL`application/admin/command/Install/fastadmin.sql`
- 写入/更新 `application/database.php` 中的 `Env::get('database.xxx', '...')` 默认值
-`public/admin.php` **重命名为随机文件名**(提升安全性)
- 写入安装锁:`application/admin/command/Install/install.lock`
安装完成后终端会输出:
- 后台入口(随机文件名)
- 后台账号与密码
### 6.2 方式 B:手工导入 SQL(不推荐,除非你很清楚自己在做什么)
你也可以手工导入:
- `application/admin/command/Install/fastadmin.sql`
然后自行配置数据库连接、后台入口等。但因为安装命令还会改写 `application/database.php` 和重命名后台入口文件,手工方式更容易遗漏步骤。
## 7. Nginx 配置示例
请按你的域名与证书路径调整,重点是:
- `root` 指向 `public/`
- `index` 包含 `index.php`
- `try_files` 将请求转发到 `index.php`ThinkPHP 路由)
示例:
```nginx
server {
listen 80;
server_name example.com;
root /www/wwwroot/exchange-admin/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000; # 按实际 php-fpm 调整
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\. {
deny all;
}
}
```
## 8. 目录权限与运行权限
生产环境常见需要可写的目录(以实际情况为准):
- `runtime/`
- `public/uploads/`(上传文件)
建议:
- 让 PHP-FPM 运行用户(如 `www`/`nginx`)对上述目录具备写权限。
## 8. 队列(Redis)部署
本项目已配置 `application/extra/queue.php` 使用 Redis 队列。
### 8.1 启动队列消费者
在项目根目录:
- **监听模式**`php think queue:listen`
- **Work 模式**`php think queue:work --daemon`
建议生产环境使用 **Supervisor** 守护进程常驻(或 systemd),保证进程异常退出可自动拉起。
### 8.2 关键注意点
- Redis 连接参数来源:`application/extra/queue.php`(读取 `Env::get('redis.host')``Env::get('redis.port')`
- 本项目队列 Redis DB 索引默认:`select => 5`
## 9. 定时任务 / Cron 部署
项目中存在两类定时/循环任务:
### 9.1 API 形式定时任务(`application/api/controller/Cron.php`
`Cron.php` 内部通过宝塔面板 API`addons/btpanel`)去创建 crontab,并大量使用 `curl` 调用 `https://cs.400110.cn/api/...` 这类接口。
建议你按实际业务:
- 确认定时任务目标域名(`Cron.php` 里的 `$url`)是否为你的生产域
- 明确定时任务应当在 **业务服务器内部** 调用还是由外部定时器触发
### 9.2 K 线生成脚本(根目录 `NewTradeKline*.php` / `TradeKline.php`
这些脚本通过 `define('BIND_MODULE', 'api/xxx/index')` 绑定到 API 模块执行。
常见用法(参考 `Cron.php` 中的示例):
- `php NewTradeKlines.php start -d`
- `php NewTradeKlines.php stop`
说明:这些命令风格类似 **Workerman** 的启动方式,建议用守护进程/面板托管,避免意外退出。
## 10. HTTPS 证书与私钥
根目录存在:
- `server.key`
- `server.pem`
生产环境请确保:
- 私钥文件权限严格控制
- 不要将真实生产私钥提交到公开仓库
## 11. 安全与敏感信息检查(强烈建议)
我在配置里看到了疑似明文敏感信息(例如 `application/extra/site.php` 中的 `mail_smtp_pass` 等)。生产部署前请务必:
- 替换为你自己的邮箱/短信/第三方平台配置
- **避免明文写死**,优先改为 `.env` 或服务器环境变量注入
- 检查 `application/extra/site.php``application/database.php`、各插件配置是否包含生产密钥
## 12. 常见问题排查
- **访问首页跳转安装**:检查 `application/admin/command/Install/install.lock` 是否存在;未安装时 `public/index.php` 会跳转到 `install.php`
- **500 / 空白页**:先确认 PHP 版本与扩展;再看 `runtime/log/` 下日志(或 ThinkPHP 日志目录)。
- **上传失败**:检查 `public/uploads` 权限,以及 `application/extra/upload.php` 的限制(大小、后缀)。
- **队列不执行**:确认 Redis 可用、`queue.php``select` 是否一致,且 `php think queue:work --daemon` 常驻。
---
如你希望我把 Supervisor/systemd 的完整配置也写进来,请告诉我:你的生产环境是 **CentOS/Ubuntu/Debian** 哪一种,以及 PHP-FPM 的服务名与运行用户(`www-data`/`nginx`/`www`)。