资讯动态

Bitwarden server 如何用 dev/migrate.ps1 为 MSSQL、PostgreSQL、MySQL、MariaDB 和 SQLite 执行数据库迁移

发布时间:2026/9/14 8:17:53 来源:尧图企业网站定制
Bitwarden server 如何用 dev/migrate.ps1 为 MSSQL、PostgreSQL、MySQL、MariaDB 和 SQLite 执行数据库迁移【免费下载链接】serverBitwarden infrastructure/backend (API, database, Docker, etc).项目地址: https://gitcode.com/GitHub_Trending/ser/server在 Bitwarden server 仓库中本地跑通服务之前需要先让数据库 schema 与当前代码版本一致。dev/migrate.ps1是仓库提供的迁移入口它的注释说明其职责是 “Creates the vault_dev database, and runs all the migrations”创建 vault_dev 数据库并执行全部迁移并且可以分别面向 MSSQL、PostgreSQL、MySQL、MariaDB、SQLite 五种数据库。本文按“准备密钥文件 → 配置连接串 → 执行迁移 → 判断结果”的顺序给出从 dev/migrate.ps1 出发的完整操作路径。脚本做了什么先看 dev/migrate.ps1 的行为边界避免误用参数-all、-postgres、-mysql、-mariadb、-mssql、-sqlite、-selfhost、-test均为开关。脚本开头设置$ErrorActionPreference Stop任何一步出错即中止不会带着错误继续执行后面的数据库。若指定了-all或任意 EF 类数据库-postgres/-mysql/-mariadb/-sqlite脚本会先执行dotnet ef探测工具不存在时自动执行dotnet tool install dotnet-ef -g安装。连接串不从命令行传入而是从 .NET User Secrets 读取dotnet user-secrets list --json --project $currentDir/../src/Api即读取src/Api项目的 user secrets。不带任何开关运行时脚本默认走 MSSQL 分支if (!$all -and !$(Get-IsEFDatabase)) { $mssql $true }这对应脚本头部的pwshshebang 所面向的本地开发场景。MSSQL 使用基于 SQL 脚本的顺序迁移dotnet run --project ../util/MsSqlMigratorUtility/ $msSqlConnectionString。util/MsSqlMigratorUtility/README.md 说明该工具基于 Migrator 库和 DbUp 按顺序执行 SQL 脚本并记录已执行的脚本以避免重复运行。PostgreSQL、SQLite、MySQL、MariaDB 使用 Entity Framework 迁移脚本Set-Location到对应目录util/PostgresMigrations、util/SqliteMigrations、util/MySqlMigrations后执行dotnet ef database update --connection $connectionString。其中 MariaDB 与 MySQL 共用mySql连接串配置项脚本注释说明二者在服务配置中互斥但可独立用于集成测试。-test开关面向集成测试数据库从 user secrets 的databases:N:connectionString读取连接串找不到时会输出Connection string for a test 数据库名 database not found in secrets.json!MSSQL 测试库同理。普通开发场景不需要该开关。注意脚本内全部使用相对路径../src/Api、../util/...因此必须在仓库的dev/目录下运行例如cd dev ./migrate.ps1 -postgres在 PowerShell 中为.\migrate.ps1 -postgres。准备准备 secrets.json 并写入 user secrets脚本不接收连接串参数连接串来自src/Api的 user secrets。仓库提供模板 dev/secrets.json.example 和批量写入脚本 dev/setup_secrets.ps1。在dev/目录下复制模板并改名cp secrets.json.example secrets.json编辑secrets.json把globalSettings下各数据库的connectionString改成你自己的数据库。模板中的示例值文档示例需替换为你的实际凭据和数据库路径globalSettings: { sqlServer: { connectionString: Serverlocalhost;Databasevault_dev;User IdSA;PasswordSET_A_PASSWORD_HERE_123;EncryptTrue;TrustServerCertificateTrue }, postgreSql: { connectionString: Hostlocalhost;Usernamepostgres;PasswordSET_A_PASSWORD_HERE_123;Databasevault_dev;Include Error Detailtrue }, mySql: { connectionString: serverlocalhost;uidroot;pwdSET_A_PASSWORD_HERE_123;databasevault_dev }, sqlite: { connectionString: Data Source/path/to/bitwardenServer/repository/server/dev/db/bitwarden.db } }各字段与migrate.ps1的对应关系数据库user secrets 键MSSQL云端模式globalSettings:sqlServer:connectionStringMSSQL-selfhostdev:selfHostOverride:globalSettings:sqlServer:connectionStringPostgreSQLglobalSettings:postgreSql:connectionStringSQLiteglobalSettings:sqlite:connectionStringMySQLglobalSettings:mySql:connectionStringMariaDBglobalSettings:mySql:connectionString与 MySQL 共用运行写入脚本把secrets.json中的键值批量 set 到各项目的 user secretscd dev ./setup_secrets.ps1该脚本的前提是secrets.json位于当前目录找不到会警告并退出它会把文件内容依次写入src/Api、src/Admin等十余个项目的 user secrets加-clear开关会先执行dotnet user-secrets clear删除各项目的现有 secrets谨慎使用。执行迁移在dev/目录下按目标数据库选择开关# 只迁移 PostgreSQL ./migrate.ps1 -postgres # 只迁移 SQLite ./migrate.ps1 -sqlite # 只迁移 MySQLMariaDB 用 -mariadb ./migrate.ps1 -mysql # 只迁移 MSSQL ./migrate.ps1 -mssql # 五类数据库全部迁移 ./migrate.ps1 -all执行时的预期现象均为脚本源码中的实际输出每个被选中的数据库开始迁移前会打印Starting 数据库名 Migrations例如Starting PostgreSQL MigrationsMSSQL 分支打印Starting Microsoft SQL Server Migrations for cloud加-selfhost时打印for self-host。指定了某个 EF 数据库开关但secrets.json里没有对应连接串时--connection会拿到空值随后dotnet ef database update报错脚本因$ErrorActionPreference Stop直接中止——这是脚本自带的错误处理方式。几个使用要点-all的前提它要求secrets.json中五种数据库的连接串全部可用且会额外尝试测试数据库找不到测试连接串仅打印提示不中断。如果你只为某一个数据库做迁移用对应单开关不要默认使用-all。-selfhost只影响 MSSQL它让脚本改用dev:selfHostOverride:globalSettings:sqlServer:connectionString而不是默认的云端键。MSSQL 迁移的底层工具脚本实际调用的是 util/MsSqlMigratorUtility/Program.cs。如需在脚本之外单独重放 MSSQL 迁移可直接运行该工具它支持-ddry-run只打印将执行的脚本而不执行、--no-transaction不在每个脚本外加事务、-t单脚本执行超时秒数0 表示不限等选项重复执行是安全的工具会跟踪已执行的脚本避免重复运行。EF 迁移由谁驱动PostgreSQL/MySQL/SQLite 的迁移工程是类库正常生产路径中由托管应用在启动时执行迁移见 src/Admin/HostedServices/DatabaseMigrationHostedService.cs本地开发中migrate.ps1的dotnet ef database update是等价的执行方式分别对应 util/PostgresMigrations、util/MySqlMigrations、util/SqliteMigrations 三个工程。验证迁移是否完成仓库文档没有为migrate.ps1定义独立的“成功标志”输出可依据的事实是脚本没有任何未处理的错误并运行到结束它设置了遇到错误即停且打印了所选每个数据库的Starting ... Migrations横幅对 EF 类数据库dotnet ef database update结束时若数据库已是最新EF 本身会报告没有待应用的迁移——可以再次执行同一开关例如./migrate.ps1 -postgres来确认数据库无需变更对测试数据库分支若输出Connection string for a test 数据库名 database not found in secrets.json!说明databases:N:connectionString未配置该测试库未被迁移。限制与边界MariaDB 与 MySQL 共用globalSettings:mySql:connectionString在同一份服务配置中二者互斥见 dev/migrate.ps1 中的注释因此-mysql与-mariadb实际指向同一个连接串区分仅在于调用语境独立运行用于集成测试。-test/ 测试库迁移是贡献者运行集成测试的场景普通使用者配置globalSettings连接串即可。dev/ef_migrate.ps1是创建新迁移dotnet ef migrations add的脚本不是执行迁移与本文任务无关不要混用。secrets.json含数据库凭据仓库只提供了secrets.json.example模板连接串指向的数据库必须真实存在且可连通脚本本身不负责创建数据库服务。迁移完成后下一步通常是启动本地服务栈参见 dev/docker-compose.yml 中的开发环境编排让 util/Migrator/README.md 所述的“应用启动时执行迁移”路径与实际 schema 保持一致。【免费下载链接】serverBitwarden infrastructure/backend (API, database, Docker, etc).项目地址: https://gitcode.com/GitHub_Trending/ser/server创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价