Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@tamakiiii

[Laravel]Gitを使わずアプリケーションを簡単にバックアップする

はじめに

パッケージlaravel-backupを使用すれば、ソースファイルやDBのバックアップが可能になるという記事を見て面白そうだと思い、バックアップするまでの一連の流れを記事にしました。デフォルトでは、バックアップの保存先はローカルに設定されていますが任意の場所に保存も可能なため、おまけとしてS3での保存方法も記載しています。

環境

  • PHP 7.3
  • Laravel 8.27

※PHPやLaravelのバージョンによって使用するlaravel-backupのバージョンが異なってきます。
詳しくはこちらを参照してください。

インストールとセットアップ

ここではlaravel-backupをインストールした後に、バックアップの設定を行います。

インストール

laravel-backupをインストールします。

$ composer require spatie/laravel-backup

設定ファイル作成

設定ファイルconfig/backup.phpを作成するために、下記コマンドを実行してください。

$ php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"
Copied File [/vendor/spatie/laravel-backup/config/backup.php] To [/config/backup.php]
Copied Directory [/vendor/spatie/laravel-backup/resources/lang] To [/resources/lang/vendor/backup]
Publishing complete.

実行結果として
config/backup.phpresources/lang/vendor/backupが生成されます。
ちなみにresources/lang/vendor/backup配下にはバックアップ失敗などで通知メッセージを送る際の言語ファイルが用意されています。言語ファイルは20カ国以上あり、日本語翻訳バージョンも用意されています。

バックアップ保存先の変更

バックアップの保存先はconfig/backup.phpdisksで設定されています。
今回はデフォルトのlocalで進めます。

config/backup.php
<?php
return [
    'backup' => [
        (省略)
        'destination' => [
            (省略)
            /*
             * The disk names on which the backups will be stored.
             */
            'disks' => [
                'local', //ここで設定
            ],
        ],
        (省略)
    ],
];

disksに設定のlocalはconfig/filesystems.phpのdisksと対応しています。

config/filesystems.php
<?php
return [
    (省略)
    'disks' => [
        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],
        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],
        's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
            'endpoint' => env('AWS_ENDPOINT'),
        ],
        (省略)
    ],
];

通知先の設定

バックアップ実行時に通知あり/なしを指定できます(コマンドにて)。通知を指定した際に送信元、通知先が未設定だとエラーが発生しますので必ず設定する必要があります。設定ファイルはconfig/backup.phpになります。

config/backup.php
'notifications' => [

    // 省略

    'mail' => [
        // 通知先のメールアドレス
        'to' => 'your@example.com',

        // 送信元
        'from' => [
            'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
            'name' => env('MAIL_FROM_NAME', 'Example'),
        ],
    ],

通知設定についてはこちらの記事が参考になると思います。
参考:Laravelメール送信機能の実装でmailtrapやGmailのSMTPサーバーを使ってみる

バックアップ実行

バックアップのコマンドを確認したあとに、実行したいと思います。

バックアップのコマンドの確認

$ php artisan list

backup
  backup:clean         Remove all backups older than specified number of days in config.
  backup:list          Display a list of all backups.
  backup:monitor       Monitor the health of all backups.
  backup:run           Run the backup.

バックアップ(全て)

$ php artisan backup:run

Starting backup...
Dumping database LaravelBackup...
Determining files to backup...
Zipping 228 files and directories...
Created zip containing 228 files and directories. Size is 618.99 KB
Copying zip to disk named local...
Successfully copied zip to disk named local.
Backup completed!

成功していれば、storage/app/〇〇にzipファイルが作成されています。(〇〇は.envファイルのAPP_NAMEが入るはず)

バックアップ(DBのみ)

$ php artisan backup:run --only-db

バックアップ(ファイルのみ)

$ php artisan backup:run --only-files

バックアップ(通知無効)

$ php artisan backup:run --disable-notifications

バックアップ(DBのみ通知無効)

$ php artisan backup:run --only-db --disable-notifications

バックアップ(ファイルのみ通知無効)

$ php artisan backup:run --only-files --disable-notifications

おまけ

ローカル(storage/app/)に長期で保存すると容量の問題等から、別の場所に保存する方が良いかもしれません。今回、新しい保存先としてAWSのS3で設定する方法も紹介します。

※AWS,S3バケットの準備方法は省略しています。
詳しく知りたい方はこちらを参照すると良いと思います。
参考:Laravelをバックアップ!定期的にDBやファイルをAWSへ保存する

AWS情報を設定ファイルに記載

AWSで取得した情報を.envファイルに下記を追加

.env
AWS_DEFAULT_REGION=****** // リージョンを記載
AWS_BUCKET=****** // バケット名を記載
AWS_ACCESS_KEY_ID=****** //アクセスキーを記載
AWS_SECRET_ACCESS_KEY=****** //シークレットアクセスキーを記載

ストレージパッケージをインストール

S3へアップロードできるようにパッケージをインストールします。

composer require league/flysystem-aws-s3-v3:"^1.0"

保存先の変更

localからs3に変更してあげます。

config/backup.php
'destination' => [
            (省略)
            /*
             * The disk names on which the backups will be stored.
             */
            'disks' => [
                // 'local',
                's3',
            ],
        ],

バックアップ実行

$ php artisan backup:run --only-files

Determining files to backup...
Zipping 231 files and directories...
Created zip containing 231 files and directories. Size is 2.29 MB
Copying zip to disk named s3...
Successfully copied zip to disk named s3.
Backup completed!

S3を確認すると・・・
スクリーンショット 2021-02-13 21.36.52.png
きちんとバックアップ取れていました!

参考先

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?