如何将 WordPress 网站备份到对象存储

介绍

数字海洋 空间可以为WordPress站点数据提供对象存储解决方案. 这些数据往往多种多样,包括媒体资产和数据库文件,使其成为对象存储的好人选. 因为像Spaces这样的解决方案可以存储大量无结构的数据,它们可以容纳您网站的静态资产. 单独储存静态资产可以通过释放服务器上的空间和资源来优化站点性能. 如果您的站点拥有动态资产 — 高请求率的资源或需要频繁修改的数据库文件 — 您可以考虑将块存储解决方案与您的数字海洋空间配对, 以优化您的数据存储 。 为了学习更多的对象和块存储,请检查我们的[关于对象存储的讲座与块存储服务] (https://andsky.com/tech/tutorials/object-storage-vs-block-storage-services).

在此教程中, 我们将使用 Spaces 来备份 WordPress 数据 。 由于 DigitalOcean Spaces API与AWS S3 API是互通的,我们将能够使用S3相容插件来管理我们的备份,以及[S3cmd] (http://s3tools.org/s3cmd),一个与S3和S3相容对象商店合作的客户端工具. 我们将检查创建备份的几种不同方法:使用WordPress插件,使用S3cmd创建手动备份,并使用S3cmd实现备份自动化,并为此目的创建了脚本.

前提条件

本教程假设您在服务器上有WordPress实例以及DigitalOcean Space。

  • 1个Ubuntu 16.04服务器,是继我们[与Ubuntu 16.04 教程设置的初始服务器(https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-16-04)后设置的.
  • 一个 LAMP 堆栈, 安装在您的服务器上, 遵循我们关于 Ubuntu 16. 04 上 [如何安装 Linux, Apache, MySQL, PHP (LAMP) 堆栈的教程 (https://andsky.com/tech/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-16-04) 。
  • WordPress, 安装在您的服务器上, 之后我们关于[如何在 Ubuntu 16. 04 上安装 LAMP 的教程( https://andsky.com/tech/tutorials/how-to-install-wordpress-with-lamp-on-ubuntu-16-04 ) 。
  • 数字海洋空间和API密钥,由后继[如何创建数字海洋空间和API密钥]所创建(https://andsky.com/tech/tutorials/how-to-create-a-digitalocean-space-and-api-key). .

有了这些前提条件,我们可以开始将WordPress网站备份到Spaces。

修改WordPress权限

在本教程中,我们将在我们的WordPress项目中使用wp-content/uploads文件夹,因此重要的是,这个文件夹存在并具有正确的权限。

1sudo mkdir -p /var/www/html/wp-content/uploads

首先,将其所有权设置为您的用户(我们将在这里使用 sammy ,但请确保使用您的非根),并将组所有权设置为www-data组:

1sudo chown -R sammy:www-data /var/www/html/wp-content/uploads

接下来,设置允许,将给网页服务器写入此文件夹的访问权限:

1sudo chmod -R g+w /var/www/html/wp-content/uploads

我们现在将能够使用插件来创建wp-content/uploads文件夹中的资产备份,并从WordPress界面参与我们的资产。

使用插件创建备份

有多种S3相容插件,可以用来备份您的WordPress站点到您的空间. 在您评价插件时需要考虑的一个因素是您是否想要备份您的数据库文件,因为其中一些资源没有提供这种能力. 要记住的另一个因素是插件是否会从其他插件中提取资源. 例如,如果您正在使用文档管理器,您可能想要考虑您的备份插件是否会在wp-content/uploads文件夹中捕获您的文档管理器创建的文件和资源 .

使用 WP-CLI 安装插件

您可以使用 WP-CLI来管理您的WordPress插件,我们将在本节中安装它,并在下一节中使用它来展示如何使用插件来备份WordPress数据到Spaces。

要安装 WP-CLI,我们将遵循项目建议的步骤. 运行以下命令将二进制下载到您的 tmp 文件夹:

1cd /tmp
2curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

要使此文件从命令行执行和可用,请键入以下内容:

1chmod +x /tmp/wp-cli.phar

一旦我们使该文件可执行,我们可以更名并将其移动到我们的PATH中的位置:

1sudo mv /tmp/wp-cli.phar /usr/local/bin/wp

如果我们想检查我们的安装是否成功,我们可以执行以下操作:

1wp --info

这将为我们提供有关我们正在使用的版本及其路径的一般信息。

我们现在可以使用WP-CLI来安装我们想要使用的任何插件,以及与我们的WordPress网站相关的其他任务(https://make.wordpress.org/cli/handbook/)。

安装和配置 UpdraftPlus 备份

如果您担心与其他媒体资产一起备份数据库文件,那么您可能想要使用提供数据库备份选项的插件。

要安装 UpdraftPlus,我们可以导航到我们的WordPress插件目录:

1cd /var/www/html/wp-content/plugins

从这里,我们可以使用wp命令安装updraftplus:

1wp plugin install updraftplus

要激活插件,我们可以运行:

1wp plugin activate updraftplus

从这里,我们可以导航到我们的WordPress管理仪表板左侧的插件卡:

WordPress Plugin Tab

通过选择 安装的插件 ,我们将到达一页列出了我们安装的插件. 我们应该在可用的选项列表中看到** UpdraftPlus - 备份/恢复** :

UpdraftPlus Activated

要配置备份的设置,请在您的管理仪表板中导航到 Settings 选项卡,并从可用的选项列表中选择** UpdraftPlus Backups** 。

Updraft Menu

我们将涵盖如何使用此插件进行基本网站备份. 在页面顶部的 设置 选项卡中,您将找到一个菜单,允许您计划您的备份:

Schedule Menu

如果您想测试插件是否有效,您可以将此设置放到 手动 . 我们将保留此设置,以测试插件是否正常工作。

在此菜单下方,您将看到不同的远程存储选项. 选择 S3-Compatible (Generic) :

S3-Compatible Option

选择此选项后,您将收到一个菜单,请求您的 DigitalOcean Space 信息:

S3 Settings

例如,如果您的空间的 URL 是 https://example-name.nyc3.digitaloceanspaces.com,那么 example-name 将是您的桶,而 nyc3.digitaloceanspaces.com 将是您的终点。 S3 位置 将是您的桶名,和** S3 终点** 将是您的终点。

下面,您将找到文件在您的备份中包括和排除的选项:

Include Exclude File Options

一旦您填写了这些设置,以反映您想要备份的内容,您可以返回 当前状态 选项卡. 当您从屏幕顶部可用的按钮中选择** 备份现在** 时,您将看到以下菜单:

Database Menu

在这里,您可以选择是否想备份您的数据库。

一旦您在本菜单底部选择了 备份现在 选项,您的备份文件应该填充您的桶. 您可以在 DigitalOcean 控制面板中导航到您的空间页面以检查它们是否存在。

备份 WordPress 用 S3cmd

作为管理对象存储解决方案中的数据的命令行工具,S3cmd提供各种选项来备份您的WordPress数据到Spaces。

如果您尚未在您的服务器上安装 s3cmd,您可以通过遵循 [本教程的)安装它,并通过遵循 [)。

您现在应该有 s3cmd 安装和配置与您的空间信息. 您可以通过键入来验证 s3cmd 配置:

1s3cmd --dump-config

你应该看到的输出如下:

 1[secondary_label Output]
 2
 3[default]
 4access_key = Your_Spaces_Access_Key
 5access_token =
 6add_encoding_exts =
 7add_headers =
 8bucket_location = US
 9ca_certs_file =
10cache_file =
11check_ssl_certificate = True
12check_ssl_hostname = True
13cloudfront_host = cloudfront.amazonaws.com
14default_mime_type = binary/octet-stream
15delay_updates = False
16delete_after = False
17delete_after_fetch = False
18delete_removed = False
19dry_run = False
20enable_multipart = True
21encrypt = False
22
23...

一旦我们检查了我们的s3cmd配置信息,以确保它匹配我们的空间凭证,我们将准备使用s3cmd来备份文件到我们的空间。

创建wp-content/uploads文件夹的手动备份

为了建立我们)。 为确保我们的档案能够运至预定目的地,我们将使用干'字的干'字选项,具体如下:

1s3cmd sync --dry-run /var/www/html/wp-content/uploads s3://sammys-bucket/sammys-backups/

如果命令的输出表明您的数据将到达其预定目的地,那么您可以继续运行命令,而无需选项 --dry-run:

1s3cmd sync /var/www/html/wp-content/uploads s3://sammys-bucket/sammys-backups/

创建MySQL数据库的手动备份

我们现在可以创建一个手动备份我们的MySQL数据库。这将发生在4个部分. 首先,我们可以在我们的家庭目录中创建一个文件夹来保留我们的数据库文件:

1mkdir ~/mysqldmp

接下来,我们将创建一个存储我们的数据库用户和密码信息的文件,这将有助于我们避免在创建我们的备份文件过程中将该信息传输到命令行。

1nano ~/.my.cnf

在文件中,我们将指定我们的MySQL客户端的用户名和密码:

1[label ~/.my.cnf]
2
3[client]
4user=mysql_user
5password=mysql_password

保存此文件,键入CTRL+X,然后是Y

为了限制读写权限给我们的用户,我们可以输入以下内容:

1chmod 600 .my.cnf

现在我们将能够运行mysqldump命令来复制我们的数据库文件,而不将密码信息传递给命令行。当我们运行mysqldump,它将搜索我们的.my.cnf文件作为其阅读默认选项的过程的一部分。

1mysqldump mysqldatabase_name | gzip > ~/mysqldmp/mysql_dump.sql.gz

最后,我们可以使用s3cmd将压缩文件发送到我们的空间:

1s3cmd sync mysqldmp/mysql_dump.sql.gz s3://sammys-bucket/sammys-backups/

您现在应该在您的空间中看到压缩的数据库文件。

使用 Cron 自动化 WordPress 备份

自动化您的备份将确保您的WordPress数据仍然可访问和可恢复。虽然可以手动创建备份,但这是一个耗时的过程,可以用)。

为了为我们的备份脚本创建一个文件,我们可以使用以下命令:

1nano ~/wp-sync.sh

在空格文件中,我们首先会写下列内容,表示此脚本将由Bash壳运行:

1[label wp-sync.sh]
2
3#!/bin/bash

接下来,我们将声明变量,这些变量将指定我们将备份的文件和数据库的信息。我们的DATABASEUPLOADS_DIR变量将指定我们将备份的数据库和文件夹的信息。

1[label wp-sync.sh]
2...
3DATABASE=("mysqldatabase_name") # To add more than one database, separate values with spaces: ("database1" "database2")
4UPLOADS_DIR=("/var/www/html/wp-content/uploads") # To add more than one directory, separate values with spaces: ("folder1" "folder2")
5
6BACKUP_DIR=/home/sammy/mysqldmp

DATABASE变量指定了WordPress数据库或数据库的名称,mysqldump将备份,UPLOADS_DIR指向我们正在备份的目录或目录。

接下来,我们将设置我们的s3cmd信息,包括我们的Spaces桶信息。 这些信息将反映我们的s3cmd配置文件中的s3桶信息。 当我们指定我们的S3_CMD变量时,我们将包括crons3cmd二进制路径。

1[label wp-sync.sh]
2...
3
4DATE=$(date +%y%m%d-%H_%M_%S)
5
6S3_CMD="/usr/local/bin/s3cmd"
7S3_BUCKET=s3://sammys-bucket/sammys-backups/$DATE/

在这里,我们使),月(%d),日(%d),小时(%H),分钟(%M)和第二(%S)。

接下来,我们将包括一组命令,将创建我们的mysqldmp目录,如果它已经不存在,并在更新过程中从该目录中删除任何文件:

1[label wp-sync.sh]
2...
3
4mkdir -p $BACKUP_DIR
5rm -rf "${BACKUP_DIR:?}/*"

最后,我们将创建 for 环节为我们的数据库文件运行 s3cmd 同步。我们将再次使用 mysqldump来创建一个压缩的数据库文件,但我们将添加到它的 --defaults-extra-file选项,该选项告诉mysqldump除了标准选项文件之外阅读.my.cnf。我们还将重复通过我们的数据库数组,在每个数据库上执行相同的操作:

1[label wp-sync.sh]
2...
3
4for DB in "${DATABASE[@]}"
5do
6mysqldump --defaults-extra-file=/home/sammy/.my.cnf "$DB" | gzip > "$BACKUP_DIR/mysql_dump.sql.gz"
7$S3_CMD sync "$BACKUP_DIR/mysql_dump.sql.gz" "$S3_BUCKET"
8done

mysqldumps3cmd同步的命令和他们在上一节所做的相同的工作,但是,因为我们在我们的桶中添加了DATE变量的时间戳,我们的文件将在我们的空间中创建,使我们能够轻松地跟踪它们创建时。

接下来,我们将为我们的目录创建一个循环. 再次,我们将重复通过UPLOADS_DIR数组,在每个目录上执行相同的操作:

1[label wp-sync.sh]
2...
3
4for DIR in "${UPLOADS_DIR[@]}"
5do
6$S3_CMD sync "$DIR" "$S3_BUCKET"
7done

再次,s3cmd同步命令与我们用来手动备份此目录的命令相同。

完整的剧本将是这样的:

 1[label wp-sync.sh]
 2#!/bin/bash
 3
 4DATABASE=("mysqldatabase_name") # To add more than one database, separate values with spaces: ("database1" "database2")
 5UPLOADS_DIR=("/var/www/html/wp-content/uploads") # To add more than one directory, separate values with spaces: ("folder1" "folder2")
 6
 7BACKUP_DIR=/home/sammy/mysqldmp
 8
 9DATE=$(date +%y%m%d-%H_%M_%S)
10
11S3_CMD="/usr/local/bin/s3cmd"
12S3_BUCKET=s3://sammys-bucket/sammys-backups/$DATE/
13
14mkdir -p $BACKUP_DIR
15rm -rf "${BACKUP_DIR:?}/*"
16
17for DB in "${DATABASE[@]}"
18do
19mysqldump --defaults-extra-file=/home/sammy/.my.cnf "$DB" | gzip > "$BACKUP_DIR/mysql_dump.sql.gz"
20$S3_CMD sync "$BACKUP_DIR/mysql_dump.sql.gz" "$S3_BUCKET"
21done
22
23for DIR in "${UPLOADS_DIR[@]}"
24do
25$S3_CMD sync "$DIR" "$S3_BUCKET"
26done

我们现在可以使我们的wp-sync.sh脚本可执行:

1chmod +x ~/wp-sync.sh

为了测试它,我们可以运行:

1sudo ~/wp-sync.sh

导航到你的空间,并确保你的文件被复制如意. 一旦你检查了这一点,你可以编辑crontab文件以在所需的间隔运行脚本。

通过键入crontab文件打开:

1crontab -e

如果这是你第一次编辑这个文件,你将被要求选择一个编辑器:

1[label crontab]
2no crontab for root - using an empty one
3Select an editor. To change later, run 'select-editor'.
4  1. /bin/ed
5  2. /bin/nano        <---- easiest
6  3. /usr/bin/vim.basic
7  4. /usr/bin/vim.tiny
8Choose 1-4 [2]: 
9...

您可以选择2为nano,或输入与您选择的编辑器相应的号码。

在文件的底部,我们会添加一行来指定我们的脚本应该运行多少次. 为了测试我们的脚本的功能,我们可以将时间间隔设置为两分钟如下:

1[label crontab]
2...
3
4*/2 * * * * /home/sammy/wp-sync.sh

两分钟后,你应该在你的空间中看到一个时刻标记的存储文件. 你现在可以修改crontab文件,以指定你想使用的备份的时间间隔。

结论

我们已经涵盖了几种方法,您可以将您的WordPress数据备份到DigitalOcean的Spaces对象存储服务。

为了更多地了解与`s3cmd'和 " Spaces " 合作的情况,请检查我们的配置s3cmd 2x管理数字海洋空间的指针和关于[管理数字海洋空间使用s3cmd]的教程(https://andsky.com/tech/tutorials/how-to-manage-digitalocean-spaces-with-s3cmd)。 您还可以查看关于 [如何用 DigitalOcean 空间自动备份] (https://andsky.com/tech/tutorials/how-to-automate-backups-digitalocean-spaces) 和 [如何备份您的 Git Repository to DigitalOcean 空间] (https://andsky.com/tech/tutorials/how-to-backup-your-git-repository-to-digitalocean-spaces) 的教程,以了解更多自动化脚本和备份选项的例子. 最后,关于优化使用空间的更多信息,请查看数字海洋空间的最佳性能做法.

Published At
Categories with 技术
comments powered by Disqus