0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VPSサーバー上のWordPressをAWS S3にバックアップ

Last updated at Posted at 2020-08-09

やりたいこと

さくらのVPSサーバー上にあるWordPressのバックアップを取りたい
1日に1回バックアップを取りたい
バックアップデータの保持先はAWS S3上にする

私の技術レベル

  • さくらのVPS/さくらのクラウドのようなIaaS環境でのWebサーバー構築は何度か行っていて、Linux操作には慣れている
  • AWSは精通していないが業務でなんとなく使っている
  • S3は「安くファイルをおける場所。読み書きのためにAWSキーとAWS CLIコマンドが必要」というくらいの理解だった。

設計

  • MySQL DB dumpデータとWordPressディレクトリをgzip圧縮し、awsコマンドでS3にPUT
  • AWS S3アクセスキーはVPSサーバー上に保持
  • VPSサーバー上でcronで毎日AM02:00にバッチ実行
  • S3上には過去10日分だけ保持

TODO

  • 1.AWS S3バケットの作成
  • 2.適切な権限のアクセスキー発行
  • 3.ライフサイクルポリシーの設定
  • 4.「MySQL DB dumpデータとWordPressディレクトリをgzip圧縮し、awsコマンドでS3にPUT」を行うshファイルを作成
  • 5.shファイルを手動実行し、バックアップ成功することを確認
  • 6.shファイルを毎日実行するようcron設定

1.AWS S3バケットの作成

スクリーンショット 2020-08-09 15.39.33.png バージョニングだけチェックを入れて、他はデフォルトのまま、バケット作成。過去10日分のバックアップを同じファイル名で済ますためのバージョニング

2.IAM設定をし、適切な権限のアクセスキー発行

作成したS3バケットに対してのみ操作可能というポリシーを作成→その権限だけを持つユーザー作成、と進める。

まずAWS IAM画面設定にて、「作成したS3バケットに対してのみ操作可能」というポリシーを作る。[ポリシーの作成]から作っていく。
スクリーンショット 2020-08-09 15.46.49.png

スクリーンショット 2020-08-09 22.51.32.png `サービス=S3` `アクション=*(全て)` `リソース=object -> ARNの追加でさっき作成したS3バケットのARNを指定` スクリーンショット 2020-08-09 22.25.00.png **(はじめ、リソース=bucketと指定してしまい後で詰まった。画像のようにobjectリソースを指定しないといけないよう。)**

 
 
次にIAMユーザーを作成する。そのユーザーはAWS Webダッシュボードにログインさせたいユーザーではなく、CLI用ユーザーなので アクセスの種類:プログラムによるアクセス を選択。
スクリーンショット 2020-08-09 22.26.50.png

ユーザーに、先ほど作成したポリシーのみをアタッチしユーザー作成。
適切な権限のアクセスキーが発行完了。

3.ライフサイクルポリシーの設定

スクリーンショット 2020-08-09 16.00.26.png [+ライフサイクルルールの追加]をする

バックアップデータ置き場専用のバケットのため、バケット内のすべてのオブジェクトに適用
スクリーンショット 2020-08-09 16.01.54.png

S3にPUTされた最新バージョンのファイルは削除して欲しくないので「現行バージョン」にはチェックを入れない。
最新バージョン以前のバージョンのファイルは10日分保持させればよい、つまりバックアップファイルは10日分保持されてればよいので「以前のバージョン」をチェックし、10日と設定。
スクリーンショット 2020-08-09 18.57.50.png

4.shファイルを作成。「MySQL DB dumpデータとWordPressディレクトリをgzip圧縮し、awsコマンドでS3にPUT」を行う

python3,pip,aws-cliのインストールについては省略
awsコマンドのインストール完了後、 aws configure して、作成したIAMユーザーのアクセスキー+シークレットキーを設定する。

ブラウザでAWS S3コンソール上でバケットに適当なファイルをアップロードし、

aws s3 ls s3://yourbacketname

でバケット内のファイル表示できることを確認する。

5.shファイルを手動実行し、バックアップ成功することを確認

~/backup/backup.sh
# !/bin/sh#

# WordPressのディレクトリをコピー。管理画面からアップロードされた画像などをバックアップ
\cp -rf /var/www/mywordpress.com ~/backup
# DBdumpデータをバックアップ
mysqldump -u MYSQL_USER -pMYSQL_PASS -h MYSQL_HOST MYSQL_DB > ~/backup/mywordpressdb_dump.sql

# ディレクトリやsqlファイルを圧縮
tar czf ~/backup/mywordpress.com.tar.gz ~/backup/mywordpress.com
tar czf ~/backup/mywordpressdb_dump.tar.gz ~/backup/mywordpressdb_dump.sql

# S3にPUT
aws s3 cp ~/backup/mywordpress.com.tar.gz s3://yourbacketname/mywordpress.com.tar.gz
aws s3 cp ~/backup/mywordpressdb_dump.tar.gz 
s3://yourbacketname/mywordpressdb_dump.tar.gz 

試行錯誤しながら、↑のようになった。tarでアラームでるが

sh ~/backup/backup.sh

アップロード成功を確認
スクリーンショット 2020-08-09 22.37.53.png

6.shファイルを毎日実行するようcron設定

crontab -e
0 2 * * * /home/yourname/backup/backup.sh

多分動くので10日後確認します

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?