
上一篇文章介绍了一个完整的开发系统全流程现在在介绍一下我们开发好一个系统应该对什么领域的信息在什么地方去进行数据持久化的留痕准备1.在开发环境相关的找相关资源去哪里下载资源怎么配置环境2.对操作系统Windows以及文件夹编辑操作系统的环境变量层面文件夹相关的位置maven位置npm装的包的位置软件安装的位置源代码相关的位置2.对相关代码资源留痕本地文件夹位置远程git仓库3.服务器领域云服务器位置相关ip账号密码在云服务器领域做配置相关服务器层面的软件docker-nginxdocker-mysqldocker-redis相关账号密码信息存储相关docker打包存储上一篇文章讲的是“从 0 到 1 把系统开发出来”。这一篇讲的是系统开发好之后如何为环境、代码、服务器、账号、数据做持久化留痕。留痕不是写流水账而是建立一张“资产地图”以后你、同事、运维、甚至半年后的自己拿到这份留痕就能恢复环境、重建服务、排查问题、交接系统。核心原则先记住公开信息进 Git代码、配置模板、部署脚本、文档。敏感信息进密码管理器/Vault密码、密钥、Token、证书私钥。只记录“在哪里”不记录“值”文档里写“生产 MySQL 密码在 Vault 的 secret/prod/mysql/app”不要写密码本身。能版本化的都版本化Dockerfile、docker-compose、Nginx 配置、SQL 初始化脚本。能备份的都要能恢复数据库、Redis、Docker 卷、镜像、云盘快照。一、开发环境资源留痕1. 下载源与版本建议在项目里建一个docs/environment.md记录资源下载来源版本安装位置备注JDKAdoptium / Oracle / 华为云镜像17D:\Apps\Java\jdk-17JAVA_HOMEMavenApache 官网 / 阿里云镜像3.9.9D:\Apps\apache-maven-3.9.9MAVEN_HOMENodeNode 官网 / nvm-windows20 LTSD:\Apps\nodejsNODE_HOMEDockerDocker Desktop / 官网最新稳定版C:\Program Files\Docker开启 WSL2MySQLDocker 镜像8.0Docker 容器数据卷 mysql-dataRedisDocker 镜像7.xDocker 容器数据卷 redis-dataNginxDocker 镜像1.25Docker 容器配置挂载不要只记“我装过”要记清楚版本、路径、环境变量、配置文件位置、下载地址。2. Windows 环境变量留痕Windows 环境变量位置图形界面此电脑 → 属性 → 高级系统设置 → 环境变量用户变量只对当前用户生效系统变量对所有用户生效命令行查看set、setx、PowerShell[Environment]::GetEnvironmentVariable(Path,User)[Environment]::GetEnvironmentVariable(Path,Machine)建议在docs/windows-env.md记录变量名示例值作用用户/系统是否敏感JAVA_HOMED:\Apps\Java\jdk-17Java 根目录系统否MAVEN_HOMED:\Apps\apache-maven-3.9.9Maven 根目录系统否NODE_HOMED:\Apps\nodejsNode 根目录系统否Path%JAVA_HOME%\bin;%MAVEN_HOME%\bin;%NODE_HOME%命令可用系统否注意不要把生产密码写进系统环境变量。系统环境变量适合路径、开关、本地开发配置生产密钥应放 Vault、云 Secrets Manager、Docker secrets 或 K8s Secret。3. 文件夹与路径留痕建议统一目录例如D:\Apps\ 软件安装 D:\Apps\Java\ JDK D:\Apps\apache-maven\ Maven D:\Apps\nodejs\ Node D:\workspace\ 源代码 D:\workspace\company\ 公司项目 D:\data\ 本地数据、备份、临时文件Maven 相关Maven 安装位置D:\Apps\apache-maven-3.9.9本地仓库C:\Users\你的用户名\.m2\repository配置文件C:\Users\你的用户名\.m2\settings.xml项目级.mvn/wrapper/maven-wrapper.properties留痕settings.xml如果含私服密码只提交脱敏模板mvnw、mvnw.cmd提交到 Git。npm 相关Node 安装位置D:\Apps\nodejsnpm 全局包C:\Users\你的用户名\AppData\Roaming\npmnpm 缓存C:\Users\你的用户名\AppData\Local\npm-cache用户配置C:\Users\你的用户名\.npmrc项目配置项目根目录.npmrc留痕package.json、package-lock.json/pnpm-lock.yaml/yarn.lock必须提交.npmrc如果含 token不提交只提交.npmrc.example。常用命令mvn-vmvn help:effective-settingsnpmconfig listnpmroot-gnpmconfig get cachenode-vnpm-v二、代码资源留痕本地代码目录建议D:\workspace\company\project-a D:\workspace\company\project-b D:\workspace\personal\...远程 Git 仓库要记录仓库地址gitgitlab.example.com:group/project.git平台GitLab / GitHub / Gitee / 自建 Git分支策略main、dev、feature、release保护分支main 不允许直接 pushCI/CD流水线文件.gitlab-ci.yml、Jenkinsfile、.github/workflows大文件Git LFS子模块.gitmodules项目里建议放这些文档README.md 项目说明、启动方式 docs/architecture.md 架构图、模块说明 docs/environment.md 开发环境、版本、下载源 docs/windows-env.md Windows 环境变量 docs/servers.md 服务器清单 docs/credentials-locations.md 密码存放位置不写值 docs/deployment.md 部署流程 docs/backup-restore.md 备份恢复 docs/runbook.md 故障处理手册.gitignore必须包含.env .env.* !.env.example *.pem *.key *.p12 settings.xml .npmrc node_modules/ target/ dist/ logs/ data/三、服务器领域留痕1. 云服务器基础信息在docs/servers.md记录环境云厂商地域实例 ID公网 IP内网 IP系统规格安全组负责人生产阿里云杭州i-xxx1.2.3.410.0.0.1Ubuntu 22.042C4Gsg-xxx张三测试腾讯云上海ins-xxx5.6.7.810.0.1.1CentOS 72C2Gsg-yyy李四云控制台要留痕云账号主账号、RAM 子账号、MFA地域、VPC、交换机、安全组实例 ID、快照策略、云盘、带宽域名、DNS、SSL 证书到期时间账号密码不要写进 Git。只在文档里写“在 1Password / Vault / 云 Secrets Manager 的哪个条目”。2. 服务器上的软件与目录常见目录/opt/app/ 应用部署目录 /opt/app/docker-compose.yml /opt/app/.env 敏感权限 600 /data/mysql/ MySQL 数据 /data/redis/ Redis 数据 /data/nginx/logs/ Nginx 日志 /etc/nginx/conf.d/ Nginx 配置 /backup/ 备份目录服务器软件留痕Dockerdocker -v、docker compose versionNginxdocker-nginx配置、证书、日志、端口MySQLdocker-mysql版本、端口、数据卷、账号Redisdocker-redis版本、端口、密码、持久化方式防火墙开放端口3306、6379 不要公网暴露SSH优先密钥登录禁止 root 密码登录3. Docker 与持久化Docker 相关留痕重点Dockerfile提交 Gitdocker-compose.yml提交 Git.env.example提交 Git.env不提交Nginx 配置提交 GitMySQL 初始化 SQL 提交 GitRedis 配置提交 Git镜像仓库地址、命名空间、镜像名、Tag 规则写进文档镜像 Tag 建议registry.cn-hangzhou.aliyuncs.com/ns/app:2026.10.13 registry.cn-hangzhou.aliyuncs.com/ns/app:git-abc1234不要只用latest。数据卷示例services:mysql:image:mysql:8.0volumes:-mysql-data:/var/lib/mysql-./mysql/init:/docker-entrypoint-initdb.denv_file:-.envrestart:alwaysredis:image:redis:7volumes:-redis-data:/data-./redis/redis.conf:/usr/local/etc/redis/redis.confcommand:redis-server /usr/local/etc/redis/redis.confrestart:alwaysnginx:image:nginx:1.25volumes:-./nginx/conf.d:/etc/nginx/conf.d-./nginx/certs:/etc/nginx/certs-./nginx/logs:/var/log/nginxports:-80:80-443:443restart:alwaysvolumes:mysql-data:redis-data:Docker 镜像打包存储dockersave app:tag|gzipapp-tag.tar.gzdockerloadapp-tag.tar.gz生产更推荐推送到私有仓库Harbor、阿里云 ACR、腾讯云 TCR。四、账号密码与敏感信息留痕敏感信息包括服务器 SSH 密码/密钥云账号 AK/SKMySQL root 和应用账号Redis 密码Nginx SSL 私钥Git TokenCI/CD Secrets第三方 API Key存放位置建议类型推荐存放位置个人密码1Password / Bitwarden / KeePassXC团队共享密码Vault / 云 Secrets Manager生产容器密钥Docker secrets / K8s SecretCI/CDGitLab CI Variables / Jenkins Credentials本地开发.env不提交 Gitdocs/credentials-locations.md只写位置名称用途存放位置最后轮换负责人生产 MySQL应用连接Vault: secret/prod/mysql/app2026-10-01张三云账号控制台1Password: 云平台/生产/主账号有 MFA李四SSL 私钥HTTPSVault: secret/prod/nginx/ssl2026-09-01王五绝对不要在 Git、聊天记录、Excel、桌面 txt 里放明文密码。五、备份与恢复留痕数据持久化不只是“存着”还要能恢复。MySQLmysqldump --single-transaction--routines--triggers-uroot-pdbbackup.sql mysql-uroot-pdbbackup.sqlRedis开启 RDB/AOF备份dump.rdb、appendonly.aof恢复时替换数据文件并重启Docker 卷dockerrun--rm-vmysql-data:/data-v${PWD}:/backup alpine\tarczf /backup/mysql-data.tar.gz-C/data.云服务器云盘快照对象存储异地备份保留策略7 天、30 天、365 天定期做恢复演练六、最终检查清单一个系统开发好后至少留下这些docs/environment.md开发环境、下载源、版本。docs/windows-env.mdWindows 环境变量、Maven、npm 路径。docs/servers.md云服务器、IP、实例 ID、安全组。docs/credentials-locations.md密码存放位置不写值。docs/deployment.md部署步骤。docs/backup-restore.md备份与恢复。Git 仓库代码、Dockerfile、docker-compose、Nginx 配置、SQL 初始化。.env.example环境变量模板。.gitignore排除敏感文件和构建产物。密码管理器/Vault所有密码、密钥、Token。Docker 镜像仓库镜像 Tag 规则、保留策略。数据备份MySQL、Redis、Docker 卷、云盘快照。一句话总结留痕的目标不是“记录所有东西”而是让任何一个有权限的人拿到 Git 仓库 密码管理器 云控制台就能把系统重新跑起来。