33 lines
2.7 KiB
Markdown
33 lines
2.7 KiB
Markdown
---
|
||
title: 部署形态与配置契约
|
||
type: fact
|
||
permalink: main/projects/d44c219a-0b31-4de1-b160-323eb34a4c6a/部署形态与配置契约
|
||
stable_id: b7e0eb44-e38f-40a3-8736-3a7a9de84818
|
||
scope: project
|
||
memory_type: fact
|
||
project_id: d44c219a-0b31-4de1-b160-323eb34a4c6a
|
||
usage_profile_id: 7aee455b-24cc-4008-bdaf-443721e6f939
|
||
status: active
|
||
revision: 1
|
||
request_id: artveris-migrate-2026-09-03-fact-04
|
||
created_at: '2026-09-03T03:37:59.263398+00:00'
|
||
updated_at: '2026-09-03T03:37:59.263398+00:00'
|
||
tags:
|
||
- deployment
|
||
- config
|
||
- install
|
||
- docker
|
||
- baota
|
||
---
|
||
|
||
配置契约:唯一配置文件 = 运行目录下单一 `.env`(带中文注释,示例 `.env.example`),无 JSON 配置/config 目录;业务可调项(平台名/客户端地址/存储/链/备份/轮播间隔等)在系统设置表,优先于 .env。关键 env:`DATABASE_URL`、`REDIS_*`、`JWT_SECRET`、`SETTING_ENCRYPTION_KEY`、`STORAGE_DRIVER=local|oss`、`BLOCKCHAIN_DRIVER=mock|tianhe`、`BASE_URL`、`API_PORT`。
|
||
安装向导:无 .env 时 API 进 `InstallAppModule` 安装模式(只托管 admin 静态),访问 `/admin` 自动进向导:填对外地址/端口/MySQL/Redis/管理员 → 自动建库+`migrate deploy`+建超管 → 最后一步写 .env → 退出由 PM2/Docker 重启进正式模式。
|
||
|
||
三种部署形态共享上述契约:
|
||
1. 本地 `scripts/dev.py`。
|
||
2. 宝塔/PM2 非 Docker 发布包 `python scripts/build.py`(全新 `artveris-fresh-*`,含 `init.sh`/`init.ps1`、`server.cjs`、`ecosystem.config.cjs`、`README-deploy.md`)/ `--upgrade`(`artveris-upgrade-*`,含 `upgrade.sh`/`upgrade.ps1`,只替代码),产物在 `.release/`。init 会配国内 npm/Prisma 镜像、corepack 准备 pnpm 10、装生产依赖、prisma generate。宝塔 PM2 项目:启动文件 `server.cjs`,运行目录=发布根,实例 1。
|
||
3. 离线 Docker 包 `build_docker.py`(API/MySQL 8/Redis 7/Nginx 四镜像 + compose,Nginx 单入口 `127.0.0.1:18080`,数据 bind-mount `data/{storage,backups,mysql,redis,tmp}`,`up.sh [upgrade|fresh|clean]`)+ `remote.py` SSH 部署;密钥记忆在 `.deploy/deploy-secrets.json`(gitignore)。Docker 基础镜像 `node:24-slim`。
|
||
|
||
反向代理必须:`client_max_body_size 0; proxy_read_timeout 3600s; proxy_send_timeout 3600s; proxy_request_buffering off;`(大 ZIP 出库导入)。
|
||
安全:四角色 RBAC(SUPER_ADMIN 全通/OPERATOR 写/AUDITOR 审核/VIEWER 只读),JWT 每请求回库校验;限流登录 10/min、公开溯源 60/min/IP;安全头 nosniff 等;无效短码 Redis 负缓存;操作日志拦截全部写操作且递归脱敏密钥。
|
||
预览:后台点追溯码进 `/trace/preview/:code`,类 TOTP 令牌 HMAC(jwt.secret, 窗口号) 10 分钟周期接受当前+上一窗口,接口零副作用。 |