mcpField
D
database

database

github.com/mwguerraクラウド・DevOps3646 回インストール26 週間前に更新
リポジトリ

database について

databaseは、プロジェクト用データベースサービスを構成する開発者向けのDockerデータベース設定スキルです。PostgreSQL、MySQL/MariaDB、MongoDB、Redisを対象に、永続化、ヘルスチェック、初期化、バックアップと復元を扱います。

主な機能

  1. 014種類のデータベースコンテナに対応
  2. 02名前付きボリュームによる永続化
  3. 03ヘルスチェックと初期化スクリプトの設定
  4. 04接続文字列の例を掲載
  5. 05バックアップと復元コマンドを提供

活用シーン

  1. 01プロジェクト用PostgreSQLコンテナの構成
  2. 02Docker ComposeでMySQLまたはMariaDBを配置
  3. 03MongoDBまたはRedisのデータボリューム設定
  4. 04コンテナ内データベースのバックアップと復元

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mwguerra/claude-code-plugins --skill database

インストール後、Claude Code で/databaseを入力して読み込まれたか確認します。

詳細

Docker データベース設定スキル

概要

このスキルでは、以下のベストプラクティスに従ってデータベースコンテナを設定します。

  • セキュリティ(パスワード、ネットワーク分離)
  • 永続化(名前付きボリューム)
  • ヘルスチェック
  • 初期化スクリプト
  • バックアップと復元

対応データベース

  • PostgreSQL
  • MySQL/MariaDB
  • MongoDB
  • Redis

手順

1. ドキュメントを確認する

05-databases.md で以下を確認します。

  • イメージのバージョン
  • 環境変数
  • ヘルスチェックの設定
  • ボリュームのパス
  • 初期化のパターン
2. 設定を生成する

PostgreSQL の設定

services:
  postgres:
    image: postgres:16-alpine
    container_name: postgres
    restart: unless-stopped
    shm_size: 256mb
    environment:
      POSTGRES_USER: ${DB_USER:-appuser}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: ${DB_NAME:-appdb}
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./init-scripts:/docker-entrypoint-initdb.d
    ports:
      - "127.0.0.1:5432:5432"
    networks:
      - database
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-appuser} -d ${DB_NAME:-appdb}"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s

volumes:
  postgres_data:

networks:
  database:
    internal: true

MySQL の設定

services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASSWORD}
    volumes:
      - mysql_data:/var/lib/mysql
      - ./init-scripts:/docker-entrypoint-initdb.d
    ports:
      - "127.0.0.1:3306:3306"
    command: >
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_unicode_ci
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  mysql_data:

MongoDB の設定

services:
  mongodb:
    image: mongo:7
    container_name: mongodb
    restart: unless-stopped
    environment:
      MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER}
      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
      MONGO_INITDB_DATABASE: ${MONGO_DB}
    volumes:
      - mongo_data:/data/db
      - mongo_config:/data/configdb
    ports:
      - "127.0.0.1:27017:27017"
    healthcheck:
      test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  mongo_data:
  mongo_config:

Redis の設定

services:
  redis:
    image: redis:7-alpine
    container_name: redis
    restart: unless-stopped
    command: >
      redis-server
      --appendonly yes
      --maxmemory 256mb
      --maxmemory-policy allkeys-lru
      --requirepass ${REDIS_PASSWORD}
    volumes:
      - redis_data:/data
    ports:
      - "127.0.0.1:6379:6379"
    healthcheck:
      test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  redis_data:

接続文字列

PostgreSQL
DATABASE_URL=postgresql://user:password@db:5432/dbname
MySQL
DATABASE_URL=mysql://user:password@db:3306/dbname
MongoDB
MONGO_URI=mongodb://user:password@mongodb:27017/dbname?authSource=admin
Redis
REDIS_URL=redis://:password@redis:6379

バックアップコマンド

# PostgreSQL
docker compose exec -T db pg_dumpall -c -U appuser > backup.sql

# MySQL
docker compose exec -T db mysqldump -u root -p"$PASS" --all-databases > backup.sql

# MongoDB
docker compose exec -T db mongodump --archive --gzip > backup.gz

# Redis (if persistence enabled)
docker compose exec redis redis-cli -a "$PASS" BGSAVE

復元コマンド

# PostgreSQL
docker compose exec -T db psql -U appuser -d appdb < backup.sql

# MySQL
docker compose exec -T db mysql -u root -p"$PASS" < backup.sql

# MongoDB
docker compose exec -T db mongorestore --archive --gzip < backup.gz

ベストプラクティス

  1. データの永続化には必ず名前付きボリュームを使用する
  2. 外部アクセスが必要な場合を除き、localhost(127.0.0.1)のみにバインドする
  3. データベースのトラフィックを分離するために、内部ネットワークを使用する
  4. 依存関係を管理するために、ヘルスチェックを実装する
  5. 認証情報は .env または Docker secrets に保存する
  6. スキーマを設定するために、初期化スクリプトを使用する
  7. リスクの高い操作の前には、定期的にバックアップを行う

コメント