ホームページ  >  記事  >  バックエンド開発  >  Docker Compose、Nginx、MariaDB を介した PHP アプリケーションのデータのバックアップと復元

Docker Compose、Nginx、MariaDB を介した PHP アプリケーションのデータのバックアップと復元

王林
王林オリジナル
2023-10-12 11:14:021019ブラウズ

通过Docker Compose、Nginx和MariaDB实现PHP应用程序的数据备份与还原

Docker Compose、Nginx、MariaDB を使用した PHP アプリケーションのデータ バックアップと復元

クラウド コンピューティングとコンテナ化テクノロジの急速な発展により、ますます多くのアプリケーションが次のことを選択します。 Docker を使用してデプロイして実行します。 Docker エコシステムでは、Docker Compose は、単一の構成ファイルを通じて複数のコンテナーを定義および管理できる非常に人気のあるツールです。

この記事では、Docker Compose、Nginx、MariaDB を使用して、PHP アプリケーションのデータのバックアップと復元を実装する方法を紹介します。サンプル プロジェクトを使用してこのプロセスを示します。

サンプル プロジェクトの構造は次のとおりです。

.
├── docker-compose.yml
├── nginx
│   └── default.conf
├── mariadb
│   ├── Dockerfile
│   └── init.sql
└── php
    ├── Dockerfile
    └── index.php

まず、プロジェクト全体のコンテナ構成を定義する docker-compose.yml ファイルを作成する必要があります。サンプル構成は次のとおりです。

version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - 80:80
    volumes:
      - ./nginx:/etc/nginx/conf.d
      - ./php:/var/www/html
    depends_on:
      - php
  mariadb:
    build:
      context: ./mariadb
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=mydb
    volumes:
      - ./mariadb/data:/var/lib/mysql
    ports:
      - 3306:3306
  php:
    build:
      context: ./php
    volumes:
      - ./php:/var/www/html

上記の構成では、Nginx、MariaDB、および PHP の 3 つのサービスを定義しました。 Nginx サービスは HTTP リクエストの処理と PHP コンテナ上のアプリケーションへのリクエストの転送を担当し、MariaDB サービスはデータベース サービスを提供し、PHP コンテナは PHP アプリケーションを実行します。

次に、HTTP リクエストを PHP コンテナ上のアプリケーションに転送するための Nginx 構成ファイル default.conf を作成する必要があります。サンプル構成は次のとおりです。

server {
    listen 80;
    server_name localhost;
    root /var/www/html;
    
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    location ~ .php$ {
        try_files $uri =404;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

上記の構成では、2 つのロケーション ブロックを定義しました。最初のロケーション ブロックは、画像、CSS、JavaScript ファイルなどの静的ファイル リクエストを処理するために使用され、2 番目のロケーション ブロックは、PHP スクリプト リクエストを PHP コンテナ上の FastCGI プロセスに転送するために使用されます。

次に、MariaDB コンテナーの Dockerfile と初期化スクリプト init.sql を作成する必要があります。サンプル Dockerfile は次のとおりです。

FROM mariadb:latest

COPY init.sql /docker-entrypoint-initdb.d

Sampleinit.sql このスクリプトは、mydb データベースと users テーブルを作成するために使用されます。

CREATE DATABASE IF NOT EXISTS mydb;
USE mydb;

CREATE TABLE IF NOT EXISTS users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL
);

最後に、PHP コンテナーの Dockerfile とサンプル PHP アプリケーション index.php を作成する必要があります。サンプル Dockerfile は次のとおりです:

FROM php:7.4-fpm

RUN apt-get update && 
    apt-get install -y 
    zlib1g-dev 
    libzip-dev

RUN docker-php-ext-install zip pdo_mysql

COPY index.php /var/www/html

Sampleindex.phpこのアプリケーションは、データのバックアップと復元のプロセスをデモンストレーションするために使用されます:

<?php

$dbHost = 'mariadb';
$dbUser = 'root';
$dbPass = '123456';
$dbName = 'mydb';

try {
    $pdo = new PDO("mysql:host=$dbHost;dbname=$dbName", $dbUser, $dbPass, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]);

    // 插入数据
    $pdo->exec("INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com')");

    // 查询数据
    $stmt = $pdo->query("SELECT * FROM users");
    $users = $stmt->fetchAll();

    // 打印数据
    foreach ($users as $user) {
        echo $user['name'] . ' (' . $user['email'] . ')' . PHP_EOL;
    }

} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}

これで、実行できます。 docker- compose up コマンドを使用して、プロジェクト全体を開始します。ブラウザで http://localhost にアクセスすると、挿入されたデータと印刷結果が表示されるはずです。

データのバックアップを実現するには、データベースのバックアップ操作を定期的に実行するシェル スクリプトを追加します。サンプル スクリプトは次のとおりです。

#!/bin/bash

BACKUP_DIR="/path/to/backup"
DATE=$(date +%Y%m%d%H%M%S)
BACKUP_FILE="$BACKUP_DIR/mydb_$DATE.sql"

docker exec -i CONTAINER_NAME mysqldump -uroot -p123456 mydb > $BACKUP_FILE

if [ $? -eq 0 ]; then
    echo "Backup completed: $BACKUP_FILE"
else
    echo "Backup failed"
fi

上記のスクリプトでは、最初にバックアップ ディレクトリとバックアップ ファイル名を定義します。次に、docker exec コマンドを使用して mysqldump コマンドを実行し、データベースをエクスポートし、エクスポートされたデータをバックアップ ファイルに保存します。

データを復元するには、データベースの復元操作を実行するシェル スクリプトを作成します。サンプル スクリプトは次のとおりです。

#!/bin/bash

BACKUP_FILE="/path/to/backup/mydb_20210101120000.sql"

docker exec -i CONTAINER_NAME mysql -uroot -p123456 mydb < $BACKUP_FILE

if [ $? -eq 0 ]; then
    echo "Restore completed"
else
    echo "Restore failed"
fi

上記のスクリプトは、docker exec コマンドを使用して、バックアップ ファイル内のデータをデータベースにインポートします。

上記の手順により、Docker Compose、Nginx、MariaDB を使用した PHP アプリケーションのデータ バックアップと復元を正常に実装できました。バックアップ スクリプトを定期的に実行することで、データベースのスナップショットを作成し、必要なときに復元できるようになります。これにより、アプリケーションの可用性と耐障害性が向上します。

以上がDocker Compose、Nginx、MariaDB を介した PHP アプリケーションのデータのバックアップと復元の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。