feat: add rolling logs and separate local and production profiles
This commit is contained in:
1 parent
e22e5c4024
commit
30c5f9f114
17 files changed
+621
-20
No files matched your search
@@ -20,12 +20,64 @@ mvn spring-boot:run
|
||||
默认地址:`http://localhost:8080`
|
||||
|
||||
本机敏感配置可放在仓库根目录的 `.hera-local.yml`,使用与 `application.yml` 相同的 YAML
|
||||
层级。后端从项目根目录启动时会自动加载,此文件已加入 Git 忽略清单;服务器使用环境变量配置。
|
||||
层级。默认启用 `local`,从当前启动目录读取该文件;此文件已加入 Git 忽略清单。
|
||||
|
||||
## 环境与部署
|
||||
|
||||
- `application.yml`:公共参数、上传限制与日志策略。
|
||||
- `application-local.yml`:本地环境,MySQL/Redis 默认使用公网 `101.43.139.56`,允许创建缺失表。
|
||||
- `application-prod.yml`:线上环境,MySQL/Redis 默认使用内网 `10.0.8.9`,不自动建表或改表。
|
||||
- `.hera-local.yml`:本机私有配置,仅 `local` 环境加载。
|
||||
- `.hera-prod.yml`:线上私有配置,仅 `prod` 环境加载,不会误读本地配置。
|
||||
|
||||
两套环境不能同时启用。地址和端口可通过 `DB_URL`、`REDIS_HOST`、`REDIS_PORT`、
|
||||
`SERVER_PORT` 覆盖,其他参数仍使用现有环境变量。线上必须配置至少 32 字节、非开发默认值的
|
||||
`hera.jwt-secret`(或 `HERA_JWT_SECRET`),不满足时拒绝启动。短信仍为 mock,正式上线前需接入厂商。
|
||||
环境隔离只隔离配置文件,不会自动创建两套数据库;需要数据隔离时应分别指定数据库和 Redis 逻辑库。
|
||||
|
||||
服务器使用 Java 8,将 JAR 与私有 `.hera-prod.yml` 放在同一启动目录,执行:
|
||||
|
||||
```bash
|
||||
chmod 600 .hera-prod.yml
|
||||
java -jar hera-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
|
||||
```
|
||||
|
||||
私有文件字段结构参考 `deploy/hera-prod.yml.example`;可以直接填写真实值,也可以使用环境变量占位符。
|
||||
本机已按现有密钥准备私有 `.hera-prod.yml`,未复制本地的公网连接地址覆盖线上内网地址。
|
||||
这两个私有文件均不进入 Git 或 JAR,不应放在 Nginx 可下载目录中。
|
||||
需要将私有文件置于其他目录时,可设置 `HERA_PROD_CONFIG=optional:file:/etc/hera/prod.yml`
|
||||
或对应的 `HERA_LOCAL_CONFIG`,默认仍从启动目录查找。
|
||||
环境变量占位符只在未被私有文件的同名直接值覆盖时生效;若要通过环境变量管理某字段,
|
||||
请删除私有文件中的直接值或将该值改成对应占位符。
|
||||
|
||||
## 日志
|
||||
|
||||
控制台与文件同时输出,时间使用北京时间。默认路径为启动目录的 `logs/`,
|
||||
可设置 `LOG_PATH=/var/log/hera`,启动用户必须具有目录写权限:
|
||||
|
||||
- `hera.log`:启动信息、请求摘要及异常等全部应用日志。
|
||||
- `hera-error.log`:仅 ERROR 级别日志,错误同时保留在 `hera.log`。
|
||||
- `archive/`:按日期和大小滚动后的 gzip 压缩日志。
|
||||
|
||||
默认每文件 20MB、保留 30 天,每个文件序列独立限制总量为 2GB(两个序列合计最高约 4GB,
|
||||
不含当前活动文件);支持 `LOG_MAX_FILE_SIZE`、`LOG_MAX_HISTORY`、`LOG_TOTAL_SIZE_CAP` 覆盖。
|
||||
应用日志不代替 Nginx 访问日志、指标和告警,磁盘仍需运维监控。
|
||||
|
||||
每个请求返回 `X-Request-Id`,对应日志中的 `requestId`。请求摘要记录方法、路由模板、
|
||||
状态码和耗时,不记录查询串、请求或响应正文、手机号、验证码、Token、Cookie、文件凭证等。
|
||||
未知路由只记 `<unmapped>`,不打印可能包含敏感信息的原始路径。异常日志保留类型、原因链类型和
|
||||
堆栈位置,但不打印异常消息,以免泄露 SQL 参数或包含微信密钥的 URL。
|
||||
默认不启用 SQL 参数与 HTTP wire DEBUG 日志,不建议在线上自行打开此类日志。
|
||||
|
||||
```bash
|
||||
tail -f logs/hera.log
|
||||
tail -f logs/hera-error.log
|
||||
```
|
||||
|
||||
## Redis
|
||||
|
||||
使用 Spring Data Redis 和 Lettuce,依赖版本由 Spring Boot 2.7.18 管理。
|
||||
默认地址为 `101.43.139.56:6379`,逻辑库为 `0`,连接与命令超时均为 3 秒。
|
||||
本地默认地址为 `101.43.139.56:6379`,线上为 `10.0.8.9:6379`,逻辑库为 `0`,连接与命令超时均为 3 秒。
|
||||
支持 `REDIS_HOST`、`REDIS_PORT`、`REDIS_USERNAME`、`REDIS_PASSWORD`、`REDIS_DATABASE`、
|
||||
`REDIS_SSL` 环境变量;本机密码配置在被 Git 忽略的 `.hera-local.yml` 中。
|
||||
|
||||
@@ -44,7 +96,8 @@ mvn spring-boot:run
|
||||
存储桶为 `hera-1319913268`,地域为 `ap-beijing`,桶权限保持私有读。
|
||||
运行环境必须配置 `TENCENT_COS_SECRET_ID`、`TENCENT_COS_SECRET_KEY`。
|
||||
推荐仅授权该桶 `hera/avatar/*`、`hera/files/*` 路径的 `cos:PutObject`、`cos:GetObject` 权限。
|
||||
密钥不写入配置文件或 Git。未配置密钥时允许服务启动,文件操作会返回配置错误。
|
||||
密钥只通过环境变量或被忽略的私有配置提供,不进入受版本管理的配置或 Git。
|
||||
未配置 COS 密钥时允许服务启动,文件操作会返回配置错误。
|
||||
|
||||
- `POST /api/user/avatar`:上传 JPG、PNG、WebP 头像,最大 5MB。
|
||||
- `POST /api/files`:通过 multipart 字段 `file` 上传普通文件,最大 5MB。
|
||||
@@ -75,8 +128,8 @@ mvn spring-boot:run
|
||||
## 开发说明
|
||||
|
||||
- 当前已默认关闭微信 mock,并接入微信 `jscode2session`。
|
||||
- 数据持久层使用 MyBatis Mapper XML,首次启动会执行 `schema.sql` 创建缺失的数据表。
|
||||
- 数据库连接默认指向 `101.43.139.56:3306/hera`,生产部署建议通过 `DB_URL`、`DB_USERNAME`、`DB_PASSWORD` 覆盖。
|
||||
- 数据持久层使用 MyBatis Mapper XML,本地启动会执行 `schema.sql` 创建缺失的数据表,线上默认不执行。
|
||||
- 本地数据库连接默认指向 `101.43.139.56:3306/hera`,线上默认内网 `10.0.8.9:3306/hera`,可通过环境参数覆盖。
|
||||
- `WECHAT_APP_SECRET` 请优先使用服务器环境变量配置,不建议提交到公开仓库。
|
||||
- `/api/auth/sms` 开发阶段返回 `mockCode`,接入短信厂商后移除返回值。
|
||||
- 正式上线前需要替换 `hera.jwt-secret`、短信服务实现和协议正文。
|
||||
|
||||
Reference in new issue
Block a user