befly-tpl 3.5.2 → 3.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/pm2.config.cjs +3 -38
- package/.env.development +0 -72
- package/README.ts.md +0 -175
- package/SYSTEMD_DEPLOY.md +0 -455
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "befly-tpl",
|
|
3
|
-
"version": "3.5.
|
|
3
|
+
"version": "3.5.4",
|
|
4
4
|
"description": "Befly 3.0 TypeScript Template",
|
|
5
5
|
"private": false,
|
|
6
6
|
"publishConfig": {
|
|
@@ -31,12 +31,12 @@
|
|
|
31
31
|
],
|
|
32
32
|
"type": "module",
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"befly": "3.5.
|
|
34
|
+
"befly": "3.5.4"
|
|
35
35
|
},
|
|
36
36
|
"engines": {
|
|
37
37
|
"bun": ">=1.3.0"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "561c5e43741ceb111f677cf3d5ce2421a79d3975",
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"cross-env": "^10.1.0",
|
|
42
42
|
"dotenv": "^17.2.3"
|
package/pm2.config.cjs
CHANGED
|
@@ -1,40 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PM2 进程管理配置文件(CommonJS 格式)
|
|
3
|
-
* 使用 Bun 运行 TypeScript 文件
|
|
4
|
-
*
|
|
5
|
-
* 使用方法:
|
|
6
|
-
* 1. 启动:pm2 start pm2.config.cjs
|
|
7
|
-
* 2. 查看状态:pm2 status
|
|
8
|
-
* 3. 查看日志:pm2 logs befly
|
|
9
|
-
* 4. 重启:pm2 restart befly
|
|
10
|
-
* 5. 停止:pm2 stop befly
|
|
11
|
-
* 6. 删除:pm2 delete befly
|
|
12
|
-
* 7. 保存配置:pm2 save
|
|
13
|
-
* 8. 开机自启:pm2 startup
|
|
14
|
-
*
|
|
15
|
-
* 环境变量说明:
|
|
16
|
-
* - 使用 dotenv 模块读取 .env.production 文件
|
|
17
|
-
* - PM2 会在进程启动时直接注入这些环境变量
|
|
18
|
-
*
|
|
19
|
-
* 注意:PM2 配置文件必须使用 CommonJS 格式(.cjs),不支持 ESM
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
const dotenv = require('dotenv');
|
|
23
|
-
const path = require('path');
|
|
24
|
-
|
|
25
|
-
// 使用 dotenv 读取 .env.production 文件
|
|
26
|
-
const result = dotenv.config({
|
|
27
|
-
path: path.join(__dirname, '.env.production'),
|
|
28
|
-
override: true
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
if (result.error) {
|
|
32
|
-
console.error('读取 .env.production 失败:', result.error.message);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// 获取解析后的环境变量
|
|
36
|
-
const productionEnv = result.parsed || {};
|
|
37
|
-
|
|
38
1
|
module.exports = {
|
|
39
2
|
apps: [
|
|
40
3
|
{
|
|
@@ -56,7 +19,9 @@ module.exports = {
|
|
|
56
19
|
merge_logs: true,
|
|
57
20
|
|
|
58
21
|
// 从 .env.production 动态加载的环境变量(使用 Bun API)
|
|
59
|
-
env:
|
|
22
|
+
env: {
|
|
23
|
+
NODE_ENV: 'production'
|
|
24
|
+
}
|
|
60
25
|
}
|
|
61
26
|
]
|
|
62
27
|
};
|
package/.env.development
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
NODE_ENV="development"
|
|
2
|
-
# 调试模式 (1=开启, 0=关闭, development模式下默认开启)
|
|
3
|
-
DEBUG=1
|
|
4
|
-
# 项目名称
|
|
5
|
-
APP_NAME="易接口1"
|
|
6
|
-
APP_PORT=3000
|
|
7
|
-
# 监听端口
|
|
8
|
-
APP_HOST="127.0.0.1"
|
|
9
|
-
# 开发管理员邮箱
|
|
10
|
-
DEV_EMAIL="dev@qq.com"
|
|
11
|
-
# 开发管理员密码
|
|
12
|
-
DEV_PASSWORD="111111"
|
|
13
|
-
# 请求体大小
|
|
14
|
-
BODY_LIMIT=10
|
|
15
|
-
# 参数检查
|
|
16
|
-
PARAMS_CHECK=0
|
|
17
|
-
# Demo Addon 配置
|
|
18
|
-
DEMO_ENABLE=true
|
|
19
|
-
DEMO_DEFAULT_PRIORITY="medium"
|
|
20
|
-
DEMO_PAGE_SIZE=10
|
|
21
|
-
DEMO_MAX_PAGE_SIZE=100
|
|
22
|
-
# 日志配置
|
|
23
|
-
LOG_EXCLUDE_FIELDS="password,token"
|
|
24
|
-
LOG_DEBUG=1 # debug日志开关 (1=开启, 0=关闭)
|
|
25
|
-
LOG_DIR="./logs"
|
|
26
|
-
LOG_TO_CONSOLE=1
|
|
27
|
-
LOG_MAX_SIZE=52428800 # 50MB
|
|
28
|
-
# 时区
|
|
29
|
-
TZ="Asia/Shanghai"
|
|
30
|
-
# 跨域配置
|
|
31
|
-
CORS_ALLOWED_ORIGIN=""
|
|
32
|
-
CORS_ALLOWED_METHODS="GET, POST, PUT, DELETE, OPTIONS"
|
|
33
|
-
CORS_ALLOWED_HEADERS="Content-Type, Authorization, authorization, token"
|
|
34
|
-
CORS_EXPOSE_HEADERS="Content-Range, X-Content-Range, Authorization, authorization, token"
|
|
35
|
-
CORS_MAX_AGE=86400 # 1天
|
|
36
|
-
CORS_ALLOW_CREDENTIALS="true"
|
|
37
|
-
# 数据库配置(DB_* 通用参数)
|
|
38
|
-
DB_ENABLE=1
|
|
39
|
-
DB_TYPE="mysql" # 支持 sqlite | mysql | postgresql
|
|
40
|
-
DB_HOST="127.0.0.1"
|
|
41
|
-
DB_PORT=3306
|
|
42
|
-
DB_USER="root2"
|
|
43
|
-
DB_PASS="root2"
|
|
44
|
-
DB_NAME="test4"
|
|
45
|
-
DB_POOL_MAX=10
|
|
46
|
-
DB_DEBUG=0
|
|
47
|
-
DB_CONNECTION_TIMEOUT=5000 # 数据库连接超时时间(毫秒),默认5秒
|
|
48
|
-
# redis 配置
|
|
49
|
-
REDIS_ENABLE=1
|
|
50
|
-
REDIS_HOST="127.0.0.1"
|
|
51
|
-
REDIS_PORT=6379
|
|
52
|
-
REDIS_USERNAME=""
|
|
53
|
-
REDIS_PASSWORD=""
|
|
54
|
-
REDIS_DB=3
|
|
55
|
-
REDIS_KEY_PREFIX="befly"
|
|
56
|
-
# JWT 配置
|
|
57
|
-
JWT_SECRET="dbfaf2c3-7ade-5042-b843-eca8814714b3"
|
|
58
|
-
JWT_EXPIRES_IN="30d"
|
|
59
|
-
JWT_ALGORITHM="HS256"
|
|
60
|
-
# 邮箱配置
|
|
61
|
-
MAIL_HOST='demo.com'
|
|
62
|
-
MAIL_PORT=465
|
|
63
|
-
MAIL_POOL=1
|
|
64
|
-
MAIL_SECURE=1
|
|
65
|
-
MAIL_USER='demo@qq.com'
|
|
66
|
-
MAIL_PASS=''
|
|
67
|
-
MAIL_SENDER='易接口'
|
|
68
|
-
MAIL_ADDRESS='demo@qq.com'
|
|
69
|
-
# 上传配置
|
|
70
|
-
LOCAL_DIR="/wwwroot/static2/"
|
|
71
|
-
# 微信配置
|
|
72
|
-
PAY_NOTIFY_URL=""
|
package/README.ts.md
DELETED
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
# Befly 3.0 TypeScript 示例项目
|
|
2
|
-
|
|
3
|
-
这是一个完整的 Befly 3.0 TypeScript 项目示例,展示了如何使用框架的所有 TypeScript 特性。
|
|
4
|
-
|
|
5
|
-
## 📁 项目结构
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
tpl/
|
|
9
|
-
├── types/ # 类型定义
|
|
10
|
-
│ ├── index.ts # 导出所有类型
|
|
11
|
-
│ ├── models.ts # 数据模型类型
|
|
12
|
-
│ └── api.ts # API 请求/响应类型
|
|
13
|
-
├── apis/ # API 接口
|
|
14
|
-
│ ├── user/
|
|
15
|
-
│ │ ├── login.ts # 用户登录(公开)
|
|
16
|
-
│ │ └── list.ts # 用户列表(需管理员权限)
|
|
17
|
-
│ └── article/
|
|
18
|
-
│ ├── create.ts # 创建文章(需登录)
|
|
19
|
-
│ └── list.ts # 文章列表(公开)
|
|
20
|
-
├── tables/ # 表定义(JSON 格式)
|
|
21
|
-
├── plugins/ # 自定义插件
|
|
22
|
-
├── tests/ # 测试文件
|
|
23
|
-
├── main.ts # 项目入口
|
|
24
|
-
├── tsconfig.json # TypeScript 配置
|
|
25
|
-
└── package.json # 项目配置
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 🚀 快速开始
|
|
29
|
-
|
|
30
|
-
### 安装依赖
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
bun install
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
### 启动开发服务器
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
bun run dev
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
服务器将在 `http://localhost:3000` 启动。
|
|
43
|
-
|
|
44
|
-
## 📝 核心特性示例
|
|
45
|
-
|
|
46
|
-
### 1. 类型定义
|
|
47
|
-
|
|
48
|
-
项目使用完整的 TypeScript 类型定义,包括:
|
|
49
|
-
|
|
50
|
-
- **数据模型类型**(`types/models.ts`)
|
|
51
|
-
- **API 请求/响应类型**(`types/api.ts`)
|
|
52
|
-
- **继承 Befly 核心类型**(从 `befly/types` 导入)
|
|
53
|
-
|
|
54
|
-
### 2. 类型安全的 API 开发
|
|
55
|
-
|
|
56
|
-
```typescript
|
|
57
|
-
import { Api, Yes, No } from 'befly';
|
|
58
|
-
import type { BeflyContext, RequestContext } from 'befly/types';
|
|
59
|
-
import type { LoginRequest, LoginResponse } from '../types/api';
|
|
60
|
-
|
|
61
|
-
export default Api.POST(
|
|
62
|
-
'用户登录',
|
|
63
|
-
false,
|
|
64
|
-
{
|
|
65
|
-
/* 字段定义 */
|
|
66
|
-
},
|
|
67
|
-
['username', 'password'],
|
|
68
|
-
async (befly: BeflyContext, ctx: RequestContext) => {
|
|
69
|
-
const { username, password } = ctx.body as LoginRequest;
|
|
70
|
-
|
|
71
|
-
// 类型安全的数据库查询
|
|
72
|
-
const user = await befly.db.getOne<User>({
|
|
73
|
-
table: 'user',
|
|
74
|
-
where: { username }
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
return Yes<LoginResponse>('登录成功', response);
|
|
78
|
-
}
|
|
79
|
-
);
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### 3. 数据库操作
|
|
83
|
-
|
|
84
|
-
所有数据库操作都支持泛型:
|
|
85
|
-
|
|
86
|
-
```typescript
|
|
87
|
-
// 查询单条
|
|
88
|
-
const user = await befly.db.getOne<User>({
|
|
89
|
-
table: 'user',
|
|
90
|
-
where: { id: 1 }
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
// 查询列表
|
|
94
|
-
const result = await befly.db.getList<Article>({
|
|
95
|
-
table: 'article',
|
|
96
|
-
page: 1,
|
|
97
|
-
limit: 10
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
// 插入数据
|
|
101
|
-
const articleId = await befly.db.insData({
|
|
102
|
-
table: 'article',
|
|
103
|
-
data: { title: '标题', content: '内容' }
|
|
104
|
-
});
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
### 4. 认证与权限
|
|
108
|
-
|
|
109
|
-
```typescript
|
|
110
|
-
// 公开接口
|
|
111
|
-
export default Api.POST('接口名', false, ...);
|
|
112
|
-
|
|
113
|
-
// 需要登录
|
|
114
|
-
export default Api.POST('接口名', true, ...);
|
|
115
|
-
|
|
116
|
-
// 需要特定角色
|
|
117
|
-
export default Api.POST('接口名', ['admin', 'editor'], ...);
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
### 5. JWT 认证
|
|
121
|
-
|
|
122
|
-
```typescript
|
|
123
|
-
import { Jwt } from 'befly/utils/jwt';
|
|
124
|
-
|
|
125
|
-
// 生成 Token
|
|
126
|
-
const token = await Jwt.sign({ userId: '123', role: 'admin' }, { expiresIn: '7d' });
|
|
127
|
-
|
|
128
|
-
// 验证 Token
|
|
129
|
-
const payload = await Jwt.verify(token, secret);
|
|
130
|
-
|
|
131
|
-
// 检查权限
|
|
132
|
-
const hasAdmin = Jwt.hasRole(payload, 'admin');
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
## 📋 示例接口
|
|
136
|
-
|
|
137
|
-
### 用户相关
|
|
138
|
-
|
|
139
|
-
- `POST /user/login` - 用户登录(公开)
|
|
140
|
-
- `POST /user/list` - 获取用户列表(仅管理员)
|
|
141
|
-
|
|
142
|
-
### 文章相关
|
|
143
|
-
|
|
144
|
-
- `POST /article/create` - 创建文章(需登录)
|
|
145
|
-
- `POST /article/list` - 获取文章列表(公开)
|
|
146
|
-
|
|
147
|
-
## 🧪 测试
|
|
148
|
-
|
|
149
|
-
运行测试:
|
|
150
|
-
|
|
151
|
-
```bash
|
|
152
|
-
bun test
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
## 📚 相关文档
|
|
156
|
-
|
|
157
|
-
- [TypeScript 支持指南](../docs/10-TypeScript/01-TypeScript支持.md)
|
|
158
|
-
- [类型定义参考](../docs/10-TypeScript/02-类型定义参考.md)
|
|
159
|
-
- [最佳实践](../docs/10-TypeScript/03-最佳实践.md)
|
|
160
|
-
- [迁移指南](../docs/10-TypeScript/04-迁移指南.md)
|
|
161
|
-
|
|
162
|
-
## 💡 提示
|
|
163
|
-
|
|
164
|
-
1. **智能提示**:使用 VS Code 可获得完整的类型提示和自动补全
|
|
165
|
-
2. **类型检查**:TypeScript 会在编译时捕获大部分错误
|
|
166
|
-
3. **重构友好**:修改类型定义时,所有使用处会自动更新
|
|
167
|
-
4. **文档即代码**:类型定义本身就是最好的文档
|
|
168
|
-
|
|
169
|
-
## 🤝 贡献
|
|
170
|
-
|
|
171
|
-
欢迎提交 Issue 和 Pull Request!
|
|
172
|
-
|
|
173
|
-
## 📄 许可
|
|
174
|
-
|
|
175
|
-
MIT License
|
package/SYSTEMD_DEPLOY.md
DELETED
|
@@ -1,455 +0,0 @@
|
|
|
1
|
-
# Befly Systemd 部署指南
|
|
2
|
-
|
|
3
|
-
## 快速开始
|
|
4
|
-
|
|
5
|
-
### 1. 安装 Bun
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
# Linux/macOS
|
|
9
|
-
curl -fsSL https://bun.sh/install | bash
|
|
10
|
-
|
|
11
|
-
# 验证安装
|
|
12
|
-
bun --version
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
### 2. 部署项目
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
# 创建项目目录
|
|
19
|
-
sudo mkdir -p /var/www/befly
|
|
20
|
-
sudo chown -R www-data:www-data /var/www/befly
|
|
21
|
-
|
|
22
|
-
# 上传项目文件到服务器
|
|
23
|
-
# 方式1:使用 git
|
|
24
|
-
cd /var/www/befly
|
|
25
|
-
git clone <your-repo-url> .
|
|
26
|
-
|
|
27
|
-
# 方式2:使用 rsync
|
|
28
|
-
rsync -avz --exclude 'node_modules' ./ user@server:/var/www/befly/
|
|
29
|
-
|
|
30
|
-
# 安装依赖
|
|
31
|
-
cd /var/www/befly
|
|
32
|
-
bun install --production
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
### 3. 配置环境变量
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
# 复制环境变量模板
|
|
39
|
-
cp .env.development .env.production
|
|
40
|
-
|
|
41
|
-
# 编辑生产环境配置
|
|
42
|
-
nano .env.production
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### 4. 配置 systemd 服务
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
# 复制 service 文件
|
|
49
|
-
sudo cp befly.service /etc/systemd/system/
|
|
50
|
-
|
|
51
|
-
# 编辑配置(修改路径、用户等)
|
|
52
|
-
sudo nano /etc/systemd/system/befly.service
|
|
53
|
-
|
|
54
|
-
# 需要修改的配置项:
|
|
55
|
-
# - WorkingDirectory: 项目实际路径
|
|
56
|
-
# - User/Group: 运行用户
|
|
57
|
-
# - ExecStart: bun 的实际路径(使用 which bun 查看)
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### 5. 启动服务
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
# 重载 systemd 配置
|
|
64
|
-
sudo systemctl daemon-reload
|
|
65
|
-
|
|
66
|
-
# 启动服务
|
|
67
|
-
sudo systemctl start befly
|
|
68
|
-
|
|
69
|
-
# 查看状态
|
|
70
|
-
sudo systemctl status befly
|
|
71
|
-
|
|
72
|
-
# 设置开机自启
|
|
73
|
-
sudo systemctl enable befly
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
## 常用命令
|
|
77
|
-
|
|
78
|
-
### 服务管理
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
# 启动服务
|
|
82
|
-
sudo systemctl start befly
|
|
83
|
-
|
|
84
|
-
# 停止服务
|
|
85
|
-
sudo systemctl stop befly
|
|
86
|
-
|
|
87
|
-
# 重启服务
|
|
88
|
-
sudo systemctl restart befly
|
|
89
|
-
|
|
90
|
-
# 重载配置(不重启服务)
|
|
91
|
-
sudo systemctl reload befly
|
|
92
|
-
|
|
93
|
-
# 查看服务状态
|
|
94
|
-
sudo systemctl status befly
|
|
95
|
-
|
|
96
|
-
# 查看服务是否开机自启
|
|
97
|
-
sudo systemctl is-enabled befly
|
|
98
|
-
|
|
99
|
-
# 启用开机自启
|
|
100
|
-
sudo systemctl enable befly
|
|
101
|
-
|
|
102
|
-
# 禁用开机自启
|
|
103
|
-
sudo systemctl disable befly
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### 日志查看
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
# 实时查看日志
|
|
110
|
-
sudo journalctl -u befly -f
|
|
111
|
-
|
|
112
|
-
# 查看最近100行日志
|
|
113
|
-
sudo journalctl -u befly -n 100
|
|
114
|
-
|
|
115
|
-
# 查看今天的日志
|
|
116
|
-
sudo journalctl -u befly --since today
|
|
117
|
-
|
|
118
|
-
# 查看指定时间的日志
|
|
119
|
-
sudo journalctl -u befly --since "2025-01-01 00:00:00" --until "2025-01-01 23:59:59"
|
|
120
|
-
|
|
121
|
-
# 查看错误日志
|
|
122
|
-
sudo journalctl -u befly -p err
|
|
123
|
-
|
|
124
|
-
# 查看完整日志(包括被截断的内容)
|
|
125
|
-
sudo journalctl -u befly --no-pager
|
|
126
|
-
|
|
127
|
-
# 导出日志
|
|
128
|
-
sudo journalctl -u befly > befly.log
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
### 配置修改后重载
|
|
132
|
-
|
|
133
|
-
```bash
|
|
134
|
-
# 修改 service 文件后
|
|
135
|
-
sudo systemctl daemon-reload
|
|
136
|
-
sudo systemctl restart befly
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
## 配置说明
|
|
140
|
-
|
|
141
|
-
### 单进程模式
|
|
142
|
-
|
|
143
|
-
```ini
|
|
144
|
-
# Systemd 推荐单进程模式
|
|
145
|
-
ExecStart=/usr/local/bin/bun run befly start
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
**集群部署推荐使用 PM2**:Systemd 适合单进程部署,如需集群模式请使用 PM2(参见项目根目录的 PM2 相关文档)
|
|
149
|
-
|
|
150
|
-
### 用户和权限
|
|
151
|
-
|
|
152
|
-
```bash
|
|
153
|
-
# 创建专用用户(推荐)
|
|
154
|
-
sudo useradd -r -s /bin/false befly
|
|
155
|
-
|
|
156
|
-
# 设置目录权限
|
|
157
|
-
sudo chown -R befly:befly /var/www/befly
|
|
158
|
-
|
|
159
|
-
# 修改 service 文件
|
|
160
|
-
User=befly
|
|
161
|
-
Group=befly
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
### 资源限制调整
|
|
165
|
-
|
|
166
|
-
```ini
|
|
167
|
-
# 根据服务器配置调整
|
|
168
|
-
MemoryMax=4G # 4个Worker进程,每个约1G
|
|
169
|
-
MemoryHigh=3G # 内存高水位警告
|
|
170
|
-
LimitNOFILE=65536 # 高并发场景增加
|
|
171
|
-
CPUQuota=200% # 限制最多使用2个CPU核心
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
### 环境变量配置
|
|
175
|
-
|
|
176
|
-
```ini
|
|
177
|
-
# 在 service 文件中添加
|
|
178
|
-
Environment="NODE_ENV=production"
|
|
179
|
-
Environment="APP_PORT=3000"
|
|
180
|
-
Environment="APP_HOST=0.0.0.0"
|
|
181
|
-
Environment="DATABASE_URL=postgresql://..."
|
|
182
|
-
Environment="REDIS_URL=redis://..."
|
|
183
|
-
|
|
184
|
-
# 或使用环境文件
|
|
185
|
-
EnvironmentFile=/var/www/befly/.env.production
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
## 反向代理配置
|
|
189
|
-
|
|
190
|
-
### Nginx 配置示例
|
|
191
|
-
|
|
192
|
-
#### 单进程模式
|
|
193
|
-
|
|
194
|
-
```nginx
|
|
195
|
-
server {
|
|
196
|
-
listen 80;
|
|
197
|
-
server_name yourdomain.com;
|
|
198
|
-
|
|
199
|
-
# HTTPS 配置(推荐)
|
|
200
|
-
# listen 443 ssl http2;
|
|
201
|
-
# ssl_certificate /path/to/cert.pem;
|
|
202
|
-
# ssl_certificate_key /path/to/key.pem;
|
|
203
|
-
|
|
204
|
-
location / {
|
|
205
|
-
proxy_pass http://127.0.0.1:3000;
|
|
206
|
-
proxy_http_version 1.1;
|
|
207
|
-
|
|
208
|
-
# WebSocket 支持
|
|
209
|
-
proxy_set_header Upgrade $http_upgrade;
|
|
210
|
-
proxy_set_header Connection "upgrade";
|
|
211
|
-
|
|
212
|
-
# 传递客户端信息
|
|
213
|
-
proxy_set_header Host $host;
|
|
214
|
-
proxy_set_header X-Real-IP $remote_addr;
|
|
215
|
-
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
216
|
-
proxy_set_header X-Forwarded-Proto $scheme;
|
|
217
|
-
|
|
218
|
-
# 超时设置
|
|
219
|
-
proxy_connect_timeout 60s;
|
|
220
|
-
proxy_send_timeout 60s;
|
|
221
|
-
proxy_read_timeout 60s;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
# 静态文件(如果有)
|
|
225
|
-
location /static/ {
|
|
226
|
-
root /var/www/befly/public;
|
|
227
|
-
expires 30d;
|
|
228
|
-
add_header Cache-Control "public, immutable";
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
### Caddy 配置示例
|
|
234
|
-
|
|
235
|
-
```caddyfile
|
|
236
|
-
yourdomain.com {
|
|
237
|
-
reverse_proxy localhost:3000 localhost:3001 localhost:3002 localhost:3003 {
|
|
238
|
-
lb_policy least_conn
|
|
239
|
-
health_uri /health
|
|
240
|
-
health_interval 10s
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
## 监控和告警
|
|
246
|
-
|
|
247
|
-
### 基础监控脚本
|
|
248
|
-
|
|
249
|
-
```bash
|
|
250
|
-
#!/bin/bash
|
|
251
|
-
# 保存为 /usr/local/bin/befly-monitor.sh
|
|
252
|
-
|
|
253
|
-
SERVICE="befly"
|
|
254
|
-
EMAIL="admin@example.com"
|
|
255
|
-
|
|
256
|
-
# 检查服务状态
|
|
257
|
-
if ! systemctl is-active --quiet $SERVICE; then
|
|
258
|
-
echo "Service $SERVICE is down! Attempting restart..." | mail -s "Alert: Befly Service Down" $EMAIL
|
|
259
|
-
systemctl restart $SERVICE
|
|
260
|
-
fi
|
|
261
|
-
|
|
262
|
-
# 检查内存使用
|
|
263
|
-
MEMORY=$(systemctl show $SERVICE -p MemoryCurrent --value)
|
|
264
|
-
MEMORY_MB=$((MEMORY / 1024 / 1024))
|
|
265
|
-
if [ $MEMORY_MB -gt 3500 ]; then
|
|
266
|
-
echo "Service $SERVICE using ${MEMORY_MB}MB memory (high)" | mail -s "Warning: High Memory Usage" $EMAIL
|
|
267
|
-
fi
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
### 定时监控(crontab)
|
|
271
|
-
|
|
272
|
-
```bash
|
|
273
|
-
# 编辑 crontab
|
|
274
|
-
sudo crontab -e
|
|
275
|
-
|
|
276
|
-
# 每5分钟检查一次
|
|
277
|
-
*/5 * * * * /usr/local/bin/befly-monitor.sh
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
## 故障排查
|
|
281
|
-
|
|
282
|
-
### 服务启动失败
|
|
283
|
-
|
|
284
|
-
```bash
|
|
285
|
-
# 查看详细错误信息
|
|
286
|
-
sudo systemctl status befly -l
|
|
287
|
-
|
|
288
|
-
# 查看完整日志
|
|
289
|
-
sudo journalctl -u befly -n 100 --no-pager
|
|
290
|
-
|
|
291
|
-
# 检查配置文件语法
|
|
292
|
-
sudo systemd-analyze verify /etc/systemd/system/befly.service
|
|
293
|
-
|
|
294
|
-
# 测试启动命令
|
|
295
|
-
cd /var/www/befly
|
|
296
|
-
sudo -u www-data bun run befly start
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
### 权限问题
|
|
300
|
-
|
|
301
|
-
```bash
|
|
302
|
-
# 检查文件权限
|
|
303
|
-
ls -la /var/www/befly
|
|
304
|
-
|
|
305
|
-
# 修复权限
|
|
306
|
-
sudo chown -R www-data:www-data /var/www/befly
|
|
307
|
-
sudo chmod -R 755 /var/www/befly
|
|
308
|
-
|
|
309
|
-
# 检查日志目录权限
|
|
310
|
-
sudo mkdir -p /var/www/befly/logs
|
|
311
|
-
sudo chown -R www-data:www-data /var/www/befly/logs
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
### 端口占用
|
|
315
|
-
|
|
316
|
-
```bash
|
|
317
|
-
# 检查端口是否被占用
|
|
318
|
-
sudo netstat -tulpn | grep :3000
|
|
319
|
-
|
|
320
|
-
# 或使用 ss
|
|
321
|
-
sudo ss -tulpn | grep :3000
|
|
322
|
-
|
|
323
|
-
# 杀死占用端口的进程
|
|
324
|
-
sudo kill -9 <PID>
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
## 升级和维护
|
|
328
|
-
|
|
329
|
-
### 应用升级
|
|
330
|
-
|
|
331
|
-
```bash
|
|
332
|
-
# 拉取最新代码
|
|
333
|
-
cd /var/www/befly
|
|
334
|
-
git pull
|
|
335
|
-
|
|
336
|
-
# 安装新依赖
|
|
337
|
-
bun install --production
|
|
338
|
-
|
|
339
|
-
# 重启服务
|
|
340
|
-
sudo systemctl restart befly
|
|
341
|
-
|
|
342
|
-
# 查看状态
|
|
343
|
-
sudo systemctl status befly
|
|
344
|
-
```
|
|
345
|
-
|
|
346
|
-
### 日志清理
|
|
347
|
-
|
|
348
|
-
```bash
|
|
349
|
-
# 查看日志占用空间
|
|
350
|
-
sudo journalctl --disk-usage
|
|
351
|
-
|
|
352
|
-
# 清理旧日志(保留最近7天)
|
|
353
|
-
sudo journalctl --vacuum-time=7d
|
|
354
|
-
|
|
355
|
-
# 清理日志(保留最近1GB)
|
|
356
|
-
sudo journalctl --vacuum-size=1G
|
|
357
|
-
|
|
358
|
-
# 配置自动清理(编辑配置文件)
|
|
359
|
-
sudo nano /etc/systemd/journald.conf
|
|
360
|
-
|
|
361
|
-
# 添加配置
|
|
362
|
-
SystemMaxUse=1G
|
|
363
|
-
MaxRetentionSec=7day
|
|
364
|
-
```
|
|
365
|
-
|
|
366
|
-
## 安全建议
|
|
367
|
-
|
|
368
|
-
### 防火墙配置
|
|
369
|
-
|
|
370
|
-
```bash
|
|
371
|
-
# 使用 ufw
|
|
372
|
-
sudo ufw allow 80/tcp
|
|
373
|
-
sudo ufw allow 443/tcp
|
|
374
|
-
sudo ufw enable
|
|
375
|
-
|
|
376
|
-
# 或使用 firewalld
|
|
377
|
-
sudo firewall-cmd --permanent --add-service=http
|
|
378
|
-
sudo firewall-cmd --permanent --add-service=https
|
|
379
|
-
sudo firewall-cmd --reload
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
### 最小权限原则
|
|
383
|
-
|
|
384
|
-
```bash
|
|
385
|
-
# 禁止 befly 用户登录
|
|
386
|
-
sudo usermod -s /bin/false befly
|
|
387
|
-
|
|
388
|
-
# 限制目录访问
|
|
389
|
-
sudo chmod 750 /var/www/befly
|
|
390
|
-
```
|
|
391
|
-
|
|
392
|
-
### 定期更新
|
|
393
|
-
|
|
394
|
-
```bash
|
|
395
|
-
# 更新系统
|
|
396
|
-
sudo apt update && sudo apt upgrade -y # Debian/Ubuntu
|
|
397
|
-
# 或
|
|
398
|
-
sudo yum update -y # CentOS/RHEL
|
|
399
|
-
|
|
400
|
-
# 更新 Bun
|
|
401
|
-
bun upgrade
|
|
402
|
-
```
|
|
403
|
-
|
|
404
|
-
## 备份策略
|
|
405
|
-
|
|
406
|
-
```bash
|
|
407
|
-
#!/bin/bash
|
|
408
|
-
# 保存为 /usr/local/bin/befly-backup.sh
|
|
409
|
-
|
|
410
|
-
DATE=$(date +%Y%m%d_%H%M%S)
|
|
411
|
-
BACKUP_DIR="/var/backups/befly"
|
|
412
|
-
PROJECT_DIR="/var/www/befly"
|
|
413
|
-
|
|
414
|
-
# 创建备份目录
|
|
415
|
-
mkdir -p $BACKUP_DIR
|
|
416
|
-
|
|
417
|
-
# 备份配置和代码
|
|
418
|
-
tar -czf $BACKUP_DIR/befly_$DATE.tar.gz \
|
|
419
|
-
$PROJECT_DIR/.env.production \
|
|
420
|
-
$PROJECT_DIR/package.json \
|
|
421
|
-
$PROJECT_DIR/bun.lockb \
|
|
422
|
-
/etc/systemd/system/befly.service
|
|
423
|
-
|
|
424
|
-
# 保留最近30天的备份
|
|
425
|
-
find $BACKUP_DIR -name "befly_*.tar.gz" -mtime +30 -delete
|
|
426
|
-
```
|
|
427
|
-
|
|
428
|
-
## 性能优化
|
|
429
|
-
|
|
430
|
-
### Bun 优化
|
|
431
|
-
|
|
432
|
-
```bash
|
|
433
|
-
# 使用生产模式
|
|
434
|
-
NODE_ENV=production
|
|
435
|
-
|
|
436
|
-
# 禁用调试日志
|
|
437
|
-
DEBUG=0
|
|
438
|
-
```
|
|
439
|
-
|
|
440
|
-
### 系统优化
|
|
441
|
-
|
|
442
|
-
```bash
|
|
443
|
-
# 增加文件描述符限制
|
|
444
|
-
echo "* soft nofile 65536" | sudo tee -a /etc/security/limits.conf
|
|
445
|
-
echo "* hard nofile 65536" | sudo tee -a /etc/security/limits.conf
|
|
446
|
-
|
|
447
|
-
# 优化内核参数
|
|
448
|
-
sudo sysctl -w net.core.somaxconn=65535
|
|
449
|
-
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=8192
|
|
450
|
-
```
|
|
451
|
-
|
|
452
|
-
## 联系和支持
|
|
453
|
-
|
|
454
|
-
- 文档:https://github.com/chenbimo/befly
|
|
455
|
-
- 问题反馈:GitHub Issues
|