silverstripe / sspak
用于在 SilverStripe 安装中保存和加载数据的 CLI 工具
Requires (Dev)
- phpunit/phpunit: ^3.7
This package is auto-updated.
Last update: 2024-09-13 22:51:00 UTC
README
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文件的情况下填充。