とあるエンジニアの作業ブログ

CI Web製作 運用

【WordPress】サーバーのテーマファイルをFTPで自動バックアップ

投稿日:2019年1月5日 更新日:

私みたいに趣味でWordPressを使ってる人はレンタルサーバーを借りてサイトを公開していると思います。
最近のレンタルサーバーにはバックアップ機能が標準/オプションで用意されているものがほとんどですが、テーマファイル程度のバックアップにお金を払いたくないってのが正直なとこなので、FTPクライアントとシェルでサーバー上のファイルをローカルバックアップする処理を作成しました。

動作環境

  • Mac OS High Sierra ※たぶんLinuxでも動きます
  • bash
  • Cyberduck 6.8.0

やりたいこと

[wordpressルート]/wp-content/themes/[テーマ名称]/配下のファイルとディレクトリをローカルにダウンロードしてtar.gz形式にアーカイブします。今回は.php,、.css、jsディレクトリ、imagesディレクトリを例にします。
プロトコルはSFTP、FTPクライアントはCyberduckを使います。

CyberduckはCLIを使いますので、事前にインストールしておいてください。

参考Cyberduck CLI

ソースコード

ファイルは2つです。
メイン処理のwp-backup.shと設定ファイルのconfigです。

まずメイン処理です。

続いて設定ファイル。

 

実行結果

 

説明

概要

wp-backup.shのカレント配下にduck_download/とbackup/というディレクトリを作成し(上記では事前に作ってますが)、duck_download/に一時的にダウンロードファイルが保存され、backup/にバックアップファイルがアーカイブされて保存されます。
duck_download/は処理の前後でクリアされます。

FTP設定

FTP設定はconfigに記述してください。
ただし、パスワードだけはセキュリティの関係で設定ファイル非推奨です。設定していない場合は入力を求められます。
入力ミスしてもduckがちゃんと聞き返してくれます。

バックアップ対象

バックアップ対象は設定ファイルのBK_FILE_TYPE、BK_DIR_TYPEでそれぞれ配列形式で指定します。
BK_FILE_TYPEではバックアップしたいファイルの拡張子を指定します。指定された拡張子のファイルが全てダウンロードされます。
BK_DIR_TYPEではバックアップしたいディレクトリ名称を指定します。指定されたディレクトリが丸ごとダウンロードされます。

FTPの途中経過

実行するとずらずら出てくるのはFTPの途中経過です。
表示させたくない場合はメイン処理のduck -v --username $FTP_USER --password $PASS --download $TARGET $TMP_DL_DIR -existing overwriteの-vオプションを外してください。

その他

  • ログファイルは吐きません。ローカル利用なので良いかなと。。。
  • ダウンロードの都度コネクションを貼ってるっぽいです。最初にまとめることもできるんですが疲れたのでやめました。。。どなたか訂正していただけるとありがたいです。
  • 最終的にはローカルで更新したファイルをCIでサーバー自動更新することを考えているんですが、重そうなので今はバックアップまでです。。。

-CI, Web製作, 運用
-,

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

【WordPress】Google Search Consoleへのサイトマップ登録と確認方法

Google Search Consoleにサイトマップを登録するメモ。これをしないとクローラに記事を拾ってもらえない。 7,8年前に1回やったことあるんですが、昔とやり方がめっちゃ変わってて結構焦り …

Stinger8のサイドバーにプロフィールを表示する

Stinger8のサイドバーにプロフィールを表示します。 目次 前提 作業手順 ウィジェットにHTMLを記述 CSSで見た目を整える 前提 WordPressがインストールされている Stinger8 …

【備忘】gitのglobal userとlocal user使い分け

Macで初めてgit commitした時に、「お前は誰だ?」的な感じで怒られた。

でユーザー名とメールアドレスを指定する必要があるらし …

GulpでWordPressのCI 〜設計編〜

WordPressのテーマファイルをローカルで開発してgithubにpush、そのままサーバーまでデプロイするCIを実現しようと考えています。自分の環境とか踏まえてまずはどうやって実現するか設計しまし …

MAMPを移行したらphpMyAdminが起動しなくなった

古いMacからMAMPを個別に移行したら、phpMyAdminが起動しなくなった。 どうやらMySQLのユーザー/パスワードが不一致になってしまったようだ。 関連して他のエラーも発生したため、一連で対 …