用于在 SilverStripe 安装中保存和加载数据的 CLI 工具

dev-master 2024-06-13 22:20 UTC

This package is auto-updated.

Last update: 2024-09-13 22:51:00 UTC


README

Build Status Code Quality

SSPak 是一个用于管理数据库和资产内容的 SilverStripe 工具,用于备份、恢复或在不同环境之间传输。

文件格式

sspak 文件可以是 Phar(可执行)文件或 Tar(不可执行)文件,包含以下顶级文件

  • database.sql.gz: 一个经过 gzip 压缩的 SQL 文件,可以重新创建整个数据库,包括所有内容。它将包含必要的 'drop' 语句以替换任何现有内容。

  • assets.tar.gz: 一个包含所有资产的经过 gzip 压缩的 tar 文件。tar 文件中的根目录必须命名为 "assets"。

  • git-remote: 一个文本文件,格式如下

    remote = (url) branch = (name) sha = (sha-hash)

按照惯例,该文件应具有扩展名 .sspak 用于不可执行版本,以及 .sspak.phar 用于可执行版本。

安装

您可以通过以下三种方式之一运行安装脚本。

Composer(推荐)

您可以使用 Composer 全局安装此包(确保您的 composer bin 在系统路径中)

$> composer global require silverstripe/sspak:dev-master

您也可以直接在项目中要求它

$> composer require --dev silverstripe/sspak
$> vendor/bin/sspak <commands>

cURL

注意:下载的 sspak.phar 可能已经过时

如果您有 cURL,运行以下命令(除了 $> 部分)

$> curl -sS https://silverstripe.github.io/sspak/install | php -- /usr/local/bin

最后一个参数是脚本将被加载到的目录。如果省略,脚本将被安装到当前目录。如果您没有权限写入目录,将使用 "sudo" 来提升权限。

例如,这也将有效

$> cd /usr/local/bin
$> curl -sS https://silverstripe.github.io/sspak/install | sudo php

手动

注意:下载的 sspak.phar 可能已经过时

如果您不想使用安装程序,可以下载脚本并将其复制到可执行路径中,如下所示

$> wget https://silverstripe.github.io/sspak/sspak.phar
$> chmod +x sspak.phar
$> sudo mv sspak.phar /usr/local/bin/sspak

常见问题

Creating archive disabled by the php.ini setting phar.readonly

在您的 php.ini(和 php-cli.ini)文件中将 phar.readonly 设置为 false。

使用

所有 sspak 命令都采用以下一般形式。

$> sspak (command) (from) (to)

创建一个 sspak 文件并将其保存到 /tmp

$> sspak save /var/www /tmp/site.sspak

根据远程站点创建一个 sspak 文件

$> sspak save me@prodserver:/var/www prod-site.sspak

使用特定的私钥连接到远程站点以创建一个 sspak 文件

$> sspak save --identity=prodserver.key me@prodserver:/var/www prod-site.sspak

通过添加 phar 扩展创建一个可执行 sspak 文件

$> sspak save me@prodserver:/var/www prod-site.sspak.phar

从现有文件创建一个 sspak

$> sspak saveexisting --db=/path/to/database.sql --assets=/path/to/assets /tmp/site.sspak

从现有 sspak 中提取文件到指定目录

$> sspak extract /tmp/site.sspak /destination/path

将 sspak 文件加载到本地实例

$> sspak load prod-site.sspak ~/Sites/devsite

将 sspak 文件加载到本地实例,首先删除现有的 DB(仅限 mysql)

$> sspak load prod-site.sspak ~/Sites/devsite --drop-db

使用特定的私钥连接到远程实例以加载 sspak 文件

$> sspak save --identity=backupserver.key prod-site.sspak me@backupserver:/var/www

一步式传输: (尚未实现)

$> sspak transfer me@prodserver:/var/www ~/Sites/devsite

以 www-data 身份运行 sudo 执行操作

$> sspak save --sudo=www-data me@prodserver:/var/www prod-site.sspak
$> sspak load --sudo=www1 prod-site.sspak ~/Sites/devsite
$> sspak transfer --from-sudo=www-data --to-sudo=www1 me@prodserver:/var/www ~/Sites/devsite

仅保存数据库

$> sspak save --db me@prodserver:/var/www dev.sspak

仅加载资产

$> sspak load --assets dev.sspak ~/Sites/devsite

从 sspak 安装新站点(需要包含 git-remote)

$> sspak install newsite.sspak ~/Sites/newsite

使用自定义 TMP 文件夹保存所有内容(确保文件夹存在且可写)

$> TMPDIR="/tmp/my_custom_tmp" sspak save /var/www /tmp/site.sspak

注意事项

如果您没有通过 PKI 密码无密码登录远程服务器,您将需要多次输入您的登录信息。

注意

当您使用 sspak 与某些版本的 mysql 一起使用时,您可能会看到输出 mysqldump: unknown variable 'column-statistics=0'。可以安全地忽略此输出。

工作原理

sspak 依赖于 SilverStripe 可执行代码来确定数据库凭据。它通过上传一个小脚本 sspak-sniffer.php 到任何远程服务器的 /tmp 文件夹来实现。

此脚本返回数据库凭据和资产路径的位置。一旦它获得了这些信息,它将远程执行mysql、mysqldump和tar命令来归档或恢复内容。

它期望以下命令在任意远程服务器上可用

  • php
  • mysql
  • mysqldump
  • tar
  • gzip
  • sudo

它还将使用您运行机器上的/tmp文件夹,并且需要在该文件夹中有足够的空闲空间来创建.sspak文件中单个文件的临时副本,如果您使用的是非可执行版本。.sspak.phar文件可以在不使用tmp文件的情况下填充。