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: 新闻自动采集脚本
This commit is contained in:
li
2026-03-30 20:16:32 +08:00
commit 1b24994e74
6721 changed files with 1308571 additions and 0 deletions
Executable
+271
View File
@@ -0,0 +1,271 @@
# 部署说明(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`)。