[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' => '[email protected]',
    
            // 送信元
            'from' => [
                'address' => env('MAIL_FROM_ADDRESS', '[email protected]'),
                '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을 확인하면 ...

    제대로 백업 잡혀있었습니다!

    참고처


  • laravel-backup
  • Laravel 메일 전송 기능 구현에서 mailtrap 및 Gmail SMTP 서버를 사용해보기
  • Laravel을 백업! 정기적으로 DB와 파일을 AWS에 저장
  • laravel-backup을 이용하여 DB 백업 생성
  • 【Laravel】Laravel의 소스도 DB도 간단하게 백업을 취할 수 있는 「spatie/laravel-backup」
  • 좋은 웹페이지 즐겨찾기