WordPressサイトをスペースにバックアップする方法

前書き

DigitalOcean Spacesは、WordPressサイトデータのオブジェクトストレージソリューションを提供できます。 このデータは、メディアアセットやデータベースファイルなど、さまざまな場合が多いため、オブジェクトストレージの候補として適しています。 Spacesなどのソリューションは大量の非構造化データを保存できるため、サイトの静的アセットに対応できます。 静的アセットを個別に保存すると、サーバーのスペースとリソースを解放してサイトのパフォーマンスを最適化できます。 サイトに動的なアセット(高いリクエストレートのリソースや頻繁に変更する必要があるデータベースファイル)がある場合、データを最適に保存するためにブロックストレージソリューションとDigitalOcean Spaceのペアリングを検討できます。 オブジェクトとブロックストレージの詳細については、tutorial on Object Storage vs. Block Storage Servicesを確認してください。

このチュートリアルでは、スペースを使用してWordPressデータをバックアップします。 DigitalOceanSpaces APIはAWS S3 APIと相互運用可能であるため、S3互換プラグインを使用してバックアップを管理できるほか、S3cmd(S3およびS3-を操作するためのクライアントツール)を使用できます。互換性のあるオブジェクトストア。 バックアップを作成するには、WordPressプラグインの使用、S3cmdを使用した手動バックアップの作成、S3cmdとその目的で作成されたスクリプトを使用したバックアップの自動化など、いくつかの異なる方法を検討します。

前提条件

このチュートリアルでは、サーバー上にWordPressインスタンスとDigitalOcean Spaceがあることを前提としています。 そうでない場合は、次を設定できます。

これらの前提条件が整ったら、WordPressサイトのSpacesへのバックアップを開始できます。

WordPressの権限を変更する

このチュートリアル全体を通して、WordPressプロジェクトのwp-content/uploadsフォルダーを操作するため、このフォルダーが存在し、適切なアクセス許可を持っていることが重要です。 mkdirコマンドで作成し、-pフラグを使用して、フォルダーが存在しない場合は作成し、存在する場合はエラーをスローしないようにします。

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

これで、フォルダにアクセス許可を設定できます。 まず、所有権をユーザーに設定し(ここではsammyを使用しますが、必ず非ルートsudoユーザーを使用します)、所有権をwww-dataグループにグループ化します。

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

次に、Webサーバーにこのフォルダーへの書き込みアクセスを許可するアクセス許可を確立します。

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

これで、プラグインを使用してwp-content/uploadsフォルダー内のアセットのバックアップを作成し、WordPressインターフェイスからアセットを操作できるようになります。

プラグインを使用してバックアップを作成する

WordPressサイトをSpaceにバックアップするために使用できるさまざまなS3互換プラグインがあります。 プラグインを評価する際に考慮すべき要素の1つは、データベースファイルをバックアップするかどうかです。これらのリソースの一部はその機能を提供していません。 留意すべきもう1つの要素は、プラグインが他のプラグインからリソースをプルするかどうかです。 たとえば、ドキュメントマネージャーを使用している場合は、バックアッププラグインがドキュメントマネージャーによって作成されたファイルとリソースをwp-content/uploadsフォルダー内にキャプチャするかどうかを検討する必要があります。

WP-CLIを使用したプラグインのインストール

WP-CLIを使用して、コマンドラインからWordPressプラグインを管理することができます。 このセクションでインストールし、次に使用してプラグインを操作してWordPressデータをSpacesにバックアップする方法を示します。

WP-CLIをインストールするには、プロジェクトの推奨手順に従います。 次のコマンドを実行して、バイナリをtmpフォルダーにダウンロードします。

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

このファイルを実行可能にし、コマンドラインから使用可能にするには、次のように入力します。

chmod +x /tmp/wp-cli.phar

ファイルを実行可能にしたら、名前を変更して、PATH内の場所に移動できます。

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

インストールが成功したことを確認したい場合は、次を実行できます。

wp --info

これにより、使用しているバージョンとそのパスに関する一般的な情報が得られます。

これで、WP-CLIを使用して、使用したいプラグインをインストールしたり、WordPressサイトに関連するmanage other tasksにインストールしたりできます。

UpdraftPlus Backupのインストールと構成

他のメディアアセットと一緒にデータベースファイルをバックアップすることが心配な場合は、データベースバックアップオプションを提供するプラグインを使用することをお勧めします。 UpdraftPlus Backupは、S3互換の無料バージョンを提供しており、データベースとメディアのバックアップ、およびバックアップのスケジューリングを可能にします。

UpdraftPlusをインストールするには、WordPressプラグインディレクトリに移動します。

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

ここから、wpコマンドを使用してupdraftplusをインストールできます。

wp plugin install updraftplus

プラグインをアクティブにするには、次を実行します。

wp plugin activate updraftplus

ここから、WordPress管理ダッシュボードの左側にあるプラグインタブに移動できます。

WordPress Plugin Tab

Installed Pluginsを選択すると、インストールされているプラ​​グインを一覧表示するページが表示されます。 使用可能なオプションのリストにUpdraftPlus - Backup/Restoreが表示されます。

UpdraftPlus Activated

バックアップの設定を構成するには、管理ダッシュボードの[Settings]タブに移動し、使用可能なオプションのリストからUpdraftPlus Backupsを選択します。 次のようなランディングスクリーンが表示されます。

Updraft Menu

このプラグインを使用して基本的なサイトバックアップを行う方法について説明します。 ページ上部のSettingsタブの下に、バックアップをスケジュールできるメニューがあります。

Schedule Menu

プラグインが機能することをテストしたい場合は、これをManualのままにしておくことができます。 プラグインが正しく機能することをテストするために、この設定を今のところ保持します。

このメニューの下には、さまざまなリモートストレージオプションが表示されます。 S3-Compatible (Generic)を選択します。

S3-Compatible Option

このオプションを選択すると、DigitalOcean Space情報を要求するメニューが表示されます。

S3 Settings

SpaceのURLに基​​づいて、バケット名とエンドポイントを決定できます。 たとえば、スペースのURLがhttps://example-name.nyc3.digitaloceanspaces.comの場合、example-nameがバケットになり、nyc3.digitaloceanspaces.comがエンドポイントになります。 S3 locationはバケット名になり、S3 end-pointはエンドポイントになります。

この下に、バックアップに含めるファイルと除外するファイルのオプションがあります。

Include Exclude File Options

バックアップしたい内容を反映するようにこれらの設定を入力したら、Current Statusタブに戻ることができます。 画面上部の使用可能なボタンからBackup Nowを選択すると、次のメニューが表示されます。

Database Menu

ここで、データベースをバックアップするかどうかを選択できます。

このメニューの下部にあるBackup Nowオプションを選択すると、バックアップファイルがバケットに入力されます。 DigitalOceanコントロールパネルの[スペース]ページに移動して、スペースがあることを確認できます。 プラグインの機能をテストしたら、ニーズに合わせてバックアップスケジュール設定を変更できます。

S3cmdを使用したWordPressのバックアップ

オブジェクトストレージソリューションのデータを管理するためのコマンドラインツールとして、S3cmdはWordPressデータをSpacesにバックアップするためのさまざまなオプションを提供します。 バックアッププロセスを自動化する分離コマンドおよびスクリプトで使用できます。

サーバーにs3cmdがまだインストールされていない場合は、the “Install S3cmd” section of this tutorialに従ってインストールし、the “Configure S3cmd” sectionに従ってスペース情報を使用して構成できます。

これで、s3cmdがインストールされ、Spaces情報で構成されているはずです。 次のように入力して、s3cmdの構成を確認できます。

s3cmd --dump-config

次のような出力が表示されるはずです。

Output
[default]
access_key = Your_Spaces_Access_Key
access_token =
add_encoding_exts =
add_headers =
bucket_location = US
ca_certs_file =
cache_file =
check_ssl_certificate = True
check_ssl_hostname = True
cloudfront_host = cloudfront.amazonaws.com
default_mime_type = binary/octet-stream
delay_updates = False
delete_after = False
delete_after_fetch = False
delete_removed = False
dry_run = False
enable_multipart = True
encrypt = False

...

s3cmd構成情報を調べて、Spaces資格情報と一致することを確認したら、s3cmdを使用してファイルをSpaceにバックアップする準備が整います。 この作業を自動化するスクリプトを作成する前に、まず手動でこれを行います。

wp-content/uploadsフォルダの手動バックアップの作成

wp-content/uploadsフォルダーのバックアップを作成するには、s3cmd syncというコマンドを使用します。 これにより、スペースにまだ存在しないファイルのみを転送できます。 これは1回限りの転送では重要ではないかもしれませんが、より多くのデータをSpaceに移動するとすぐに重要になります。 バケットにはsammys-bucketを使用し、スペース上のバックアップフォルダーを指定するにはsammys-backupsを使用しますが、これらをバケットとバックアップフォルダーの名前(該当する場合)に置き換える必要があります。 ファイルが目的の宛先に確実に送信されるようにするには、次のように、--dry-runオプションをs3cmdとともに使用します。

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

コマンドの出力が、データが目的の宛先に到達することを示している場合は、先に進んで、--dry-runオプションなしでコマンドを実行できます。

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

MySQLデータベースの手動バックアップの作成

これで、MySQLデータベースの手動バックアップを作成できます。 これは4つの部分で行われます。 まず、データベースファイルを保持するためにホームディレクトリにフォルダーを作成できます。

mkdir ~/mysqldmp

次に、データベースユーザーとパスワード情報を保持するファイルを作成します。 これにより、バックアップファイルの作成プロセスでその情報がコマンドラインに渡されることを回避できます。 MySQLのユーザー固有のオプションは通常~/.my.cnfに格納されるため、そのファイルをホームディレクトリに作成します。 タイプ:

nano ~/.my.cnf

ファイル内で、MySQLクライアントのユーザー名とパスワードを指定します。

~/.my.cnf

[client]
user=mysql_user
password=mysql_password

CTRL+Xに続けてYと入力して、このファイルを保存します。

ユーザーの読み取りおよび書き込み権限を制限するには、次のように入力します。

chmod 600 .my.cnf

これで、mysqldumpコマンドを実行して、パスワード情報をコマンドラインに渡さずにデータベースファイルのコピーを作成できるようになります。 mysqldumpを実行すると、デフォルトオプションを読み取るプロセスの一部として、.my.cnfファイルが検索されます。 データベースからの出力を圧縮するには、次のようにgzipを使用することもできます。

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

最後に、s3cmdを使用して、圧縮ファイルをSpaceに送信できます。

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

Spaceに圧縮されたデータベースファイルが表示されます。

Cronを使用したWordPressバックアップの自動化

バックアップを自動化すると、WordPressデータへのアクセスと回復が可能になります。 バックアップを手動で作成することは可能ですが、これは時間のかかるプロセスであり、cronジョブスケジューラを使用して便利に自動化できます。 cronを使用してタスクをスケジュールする方法の詳細については、How To Schedule Routine Tasks With Cron and Anacron on a VPSに関するチュートリアルを確認してください。

バックアップスクリプト用のファイルを作成するには、次のコマンドを使用できます。

nano ~/wp-sync.sh

空のファイル内で、このスクリプトがBashシェルによって実行されることを示すために、最初に以下を記述します。

wp-sync.sh

#!/bin/bash

次に、バックアップするファイルとデータベースに関する情報を指定する変数を宣言します。 DATABASE変数とUPLOADS_DIR変数は、バックアップするデータベースとフォルダーに関する情報を指定します。 これらの変数を配列として宣言すると、複数の値を指定できます。

wp-sync.sh

...
DATABASE=("mysqldatabase_name") # To add more than one database, separate values with spaces: ("database1" "database2")
UPLOADS_DIR=("/var/www/html/wp-content/uploads") # To add more than one directory, separate values with spaces: ("folder1" "folder2")

BACKUP_DIR=/home/sammy/mysqldmp

DATABASE変数は、mysqldumpがバックアップする1つまたは複数のWordPressデータベースの名前を指定します。 UPLOADS_DIRは、バックアップしている1つまたは複数のディレクトリを指します。 BACKUP_DIRは、mysqldumpがバックアップファイルを書き込む場所をスクリプトに指示します。

次に、Spacesバケット情報を含むs3cmd情報を設定します。 この情報は、s3cmd構成ファイルのs3バケット情報を反映します。 S3_CMD変数を指定すると、crons3cmdバイナリへのパスが含まれます。 また、DATE変数を含めます。これにより、バックアップファイルのタイムスタンプを作成できます。

wp-sync.sh

...

DATE=$(date +%y%m%d-%H_%M_%S)


S3_CMD="/usr/local/bin/s3cmd"
S3_BUCKET=s3://sammys-bucket/sammys-backups/$DATE/

ここでは、DATE変数を非常に細かくして、年(%y)、月(%m)、日(%d)、時間(%H)、分(%M)、および秒(%S)のバックアップ。 バックアップスケジュールの頻度に応じて、バックアップを便利に追跡できるように変更できます。 S3_CMD変数は、コマンドの実行を可能にするs3cmd実行可能ファイルを指します。

次に、mysqldmpディレクトリがまだ存在しない場合にそれを作成し、更新プロセスの過程でそのディレクトリからファイルを削除する一連のコマンドを含めます。

wp-sync.sh

...

mkdir -p $BACKUP_DIR
rm -rf "${BACKUP_DIR:?}/*"

最後に、データベースファイルに対してs3cmd syncを実行するためのfor loopsを作成します。 再びmysqldumpを使用して圧縮データベースファイルを作成しますが、それに--defaults-extra-fileオプションを追加します。これは、標準オプションに加えて.my.cnfを読み取るようにmysqldumpに指示します。ファイル。 また、データベース配列を反復処理して、各データベースで同じアクションセットを実行します。

wp-sync.sh

...

for DB in "${DATABASE[@]}"
do
mysqldump --defaults-extra-file=/home/sammy/.my.cnf "$DB" | gzip > "$BACKUP_DIR/mysql_dump.sql.gz"
$S3_CMD sync "$BACKUP_DIR/mysql_dump.sql.gz" "$S3_BUCKET"
done

mysqldumpおよびs3cmd syncコマンドは、前のセクションで行ったのと同じ作業を行います。 ただし、DATE変数のタイムスタンプをバケットに追加したため、ファイルは、いつ作成されたかを簡単に追跡できるようにSpaceに作成されます。

次に、ディレクトリのループを作成します。 ここでも、UPLOADS_DIR配列を繰り返し処理して、各ディレクトリで同じアクションを実行します。

wp-sync.sh

...

for DIR in "${UPLOADS_DIR[@]}"
do
$S3_CMD sync "$DIR" "$S3_BUCKET"
done

この場合も、s3cmd syncコマンドは、このディレクトリの手動バックアップを作成するために使用したコマンドと同じです。 違いは、スペース内のこのマテリアルに付加されるタイムスタンプです。

完全なスクリプトは次のようになります。

wp-sync.sh

#!/bin/bash

DATABASE=("mysqldatabase_name") # To add more than one database, separate values with spaces: ("database1" "database2")
UPLOADS_DIR=("/var/www/html/wp-content/uploads") # To add more than one directory, separate values with spaces: ("folder1" "folder2")

BACKUP_DIR=/home/sammy/mysqldmp

DATE=$(date +%y%m%d-%H_%M_%S)

S3_CMD="/usr/local/bin/s3cmd"
S3_BUCKET=s3://sammys-bucket/sammys-backups/$DATE/

mkdir -p $BACKUP_DIR
rm -rf "${BACKUP_DIR:?}/*"

for DB in "${DATABASE[@]}"
do
mysqldump --defaults-extra-file=/home/sammy/.my.cnf "$DB" | gzip > "$BACKUP_DIR/mysql_dump.sql.gz"
$S3_CMD sync "$BACKUP_DIR/mysql_dump.sql.gz" "$S3_BUCKET"
done

for DIR in "${UPLOADS_DIR[@]}"
do
$S3_CMD sync "$DIR" "$S3_BUCKET"
done

これで、wp-sync.shスクリプトを実行可能にすることができます。

chmod +x ~/wp-sync.sh

テストするには、次を実行します。

sudo ~/wp-sync.sh

スペースに移動し、ファイルが意図したとおりにコピーされていることを確認します。 これを確認したら、crontabファイルを編集して、希望の間隔でスクリプトを実行できます。

次のように入力して、crontabファイルで開きます。

crontab -e

このファイルを初めて編集する場合は、エディターを選択するよう求められます。

crontab

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

nanoの場合は2を選択するか、選択したエディターに対応する番号を入力できます。

ファイルの最後に、スクリプトを実行する頻度を指定する行を追加します。 スクリプトの機能をテストするために、次のように時間間隔を2分に設定できます。

crontab

...

*/2 * * * * /home/sammy/wp-sync.sh

2分後、スペースにファイルのタイムスタンプ付きのデポジットが表示されます。 これで、crontabファイルを変更して、バックアップに使用する時間間隔を指定できます。

結論

WordPressデータをDigitalOceanのSpacesオブジェクトストレージサービスにバックアップする方法をいくつか紹介しました。

s3cmdとスペースの操作の詳細については、guide to configuring s3cmd 2x to manage DigitalOcean Spacesmanaging DigitalOcean Spaces with s3cmdのチュートリアルを確認してください。 自動化スクリプトとバックアップオプションのその他の例については、How To Automate Backups with DigitalOcean SpacesHow To Backup Your Git Repository To DigitalOcean Spacesに関するチュートリアルを確認することもできます。 最後に、スペースの使用方法の最適化の詳細については、Best Practices for Performance on DigitalOcean Spacesを確認してください。