cybex/laravel-protector

通过生成备份并在非生产环境中导入来保护数据库。

v3.0.0 2024-03-15 15:46 UTC

README

Latest Version on Packagist

此包允许您下载、导出和导入应用程序的数据库备份。

常见使用场景

  • 将本地数据库存储在文件中
  • 非生产开发机器可以下载实时服务器数据库
  • 中央备份服务器可以收集多个实时服务器的备份

功能集

  • 从服务器下载并可选地导入数据库
  • 导入现有的数据库文件
  • 将本地数据库导出到文件
  • 通过 Laravel Sanctum 令牌进行用户身份验证
  • 使用 Sodium 加密传输

支持数据库

  • 目前,Protector 仅支持 MySQL 数据库。
  • MariaDB 数据库可能工作,但目前尚未积极测试和支持。
  • 目前不会检查源和目标数据库。请确保您以相同的软件版本运行以防止出现问题。
  • 由于不同的转储格式,从 MariaDB 拉取转储并将其恢复到 MySQL 将不起作用。

注意事项

  • 启用 Laravel Telescope 将阻止下载远程文件,因为它打开并丢弃 HTTP 流!

目录

使用说明

导出到文件

要保存本地数据库的副本,请运行

php artisan protector:export

默认情况下,转储存储在您的默认项目磁盘上的 storage/app/protector。您可以通过发布 protector 配置文件到项目来配置目标磁盘、文件名等。

artisan vendor:publish --tag=protector.config

导入

运行以下命令以启动交互式 shell

php artisan protector:import

导入特定源

要一次性下载并导入服务器数据库,请运行

php artisan protector:import --remote

当与其他选项一起使用时,远程将作为后备行为。

要导入您之前下载的特定数据库文件,请运行

php artisan protector:import --file=<absolute path to database file>

或者只需在 protector 文件夹中引用数据库文件名(默认文件夹为 storage/app/protector)。

php artisan protector:import --dump=<name of database file>

要导入最新的现有数据库文件,请运行

php artisan protector:import --latest

选项

如果您想在导入数据库文件后运行迁移,请运行

php artisan protector:import --migrate

为了自动化,还考虑使用 flush 选项来清理旧数据库文件,以及使用 force 选项来跳过用户交互。

php artisan protector:import --remote --migrate --flush --force

要了解更多关于导入选项的信息,请运行

php artisan protector:import --help

设置说明

以下列出了三种常见的使用场景。这些场景不是互斥的。

本地数据库存储设置

如果您只想将本地数据库的副本存储在磁盘上,设置很简单。

在本地 Laravel 项目中安装 protector

通过 composer 安装此包。

composer require cybex/laravel-protector

您可以选择发布 protector 配置来设置以下选项

  • fileName:数据库转储的文件名
  • baseDirectory:文件存储的位置
  • diskName:在 config/filesystems.php 中定义的专用 Laravel 磁盘。这些可以指向特定的本地文件夹或像 AWS S3 这样的云文件存储桶
artisan vendor:publish --tag=protector.config

本地使用

现在您可以使用 artisan 命令将备份写入 protector 存储文件夹。

php artisan protector:export

默认情况下,文件将被存储在storage/protector,并且文件名中包含时间戳。您也可以指定文件名。

您也可以通过以下方式自动化此操作

  • 在Linux上安装cronjob
  • 在您部署到服务器时运行它
  • 创建一个Laravel任务并将其排队
php artisan protector:export --file=storage/database.sql

远程服务器数据库导入设置

此软件包可以在同一软件仓库的服务器和客户端机器上运行。您可以在服务器上设置授权的开发者,并给他们提供本地机的密钥。

在您的Laravel项目中安装protector

通过 composer 安装此包。

composer require cybex/laravel-protector

在您的User模型类中添加以下特性。

use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens;

    ...
}

发布protector数据库迁移,并可选择修改它以适应您的项目。

php artisan vendor:publish --tag=protector.migrations

在客户端和服务器仓库上运行迁移。

php artisan migrate

您可以选择发布protector配置以设置有关存储、访问和传输文件的选项。

php artisan vendor:publish --tag=protector.config

在客户端机器上

运行以下命令以接收

  • 要给您的服务器管理员提供的公钥
  • 要保存到您的.env文件中的私钥
php artisan protector:keys

您的服务器管理员将给您token和server-url,以保存到您的.env文件中。除非您的软件有其他指定,否则.env密钥是

PROTECTOR_AUTH_TOKEN=
PROTECTOR_SERVER_URL=

不要将您的私钥给任何人,并始终保持保护

有关如何导入远程数据库的说明,请参阅使用方法

下载的数据库转储文件存储未加密

在服务器上

确保服务器可以通过HTTPS从客户端机器访问。

当您的开发人员给您上一步中提供的公钥时,您可以使用以下方式授权他们

php artisan protector:token --publicKey=<public key> <user id>

您将收到要给开发人员的token和url,他们必须将其保存到他们的.env文件中。

然后,开发人员可以自行下载和导入服务器数据库。

从多个服务器收集备份的设置

您可以开发一个自定义客户端,该客户端可以访问和存储远程服务器备份。这些服务器可以是安装了protector软件包的不同Laravel项目。

有关如何给予备份客户端对所有服务器的访问权限的说明,请参阅上一章节。备份客户端需要在每个目标服务器上有一个相应的用户。

  • 目标服务器上的所有备份用户都将具有客户端的相同公钥
  • 对于每个目标服务器,客户端将存储相应的url和token

有关示例实现,请参阅cybex-gmbh/collector

从 Protector v1.x 迁移到 v2.x 的迁移指南

影响可能性:高

  • 如果您的应用程序没有明确要求laravel/sanctum软件包,将Protector升级到2.x版本也将Sanctum升级到3.x版本。这将要求您遵循其升级指南

影响可能性:低

  • 现在对以前公开的方法getGitRevision()getGitHeadDate()getGitBranch()的访问受到保护。您现在需要调用getMetaData()并从返回的数组中提取信息。

贡献

有关详细信息,请参阅CONTRIBUTING

安全性

如果您发现任何与安全相关的问题,请通过webdevelopment@cybex-online.com发送电子邮件,而不是使用问题跟踪器。

鸣谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件

Laravel包模板

此软件包是用Laravel包模板生成的。