コンテンツにスキップ

データベースのインストール

scripts/install-db.sh は、まっさらな myclinic 用の MySQL データベース(Docker 版)を、ローカルのディレクトリ、または SSH でつながるリモートのディレクトリに構築するスクリプトです。

リポジトリの docker/dbcompose.yamlconf.d/schema.sql)を対象ディレクトリに配置し、パスワードなどを含む .env を生成したうえで、初回起動時にスキーマが自動で読み込まれるように設定します。

安全な初期化

スクリプトは空の data/ ディレクトリを作成し、schema.sql を MySQL の /docker-entrypoint-initdb.d にマウントする compose オーバーライドを書き出します。これにより、スキーマは 初回起動時のみ 読み込まれます。既存の docker/db/data(稼働中のデータ)や既存の .env はコピーされません。

使い方

# リポジトリのルートから実行します
./scripts/install-db.sh [オプション] TARGET

TARGET はインストール先です(省略すると対話的に尋ねられます)。

形式 意味
/srv/myclinic-db ローカルのディレクトリ
user@host:/srv/myclinic-db SSH 経由のリモートのディレクトリ

オプション

オプション 内容 既定値
--up 配置後に docker compose up -d を実行し、スキーマの読み込み完了まで待機する
--root-pass PW MySQL の root パスワード(省略時は端末で非表示入力、なければ自動生成) 自動生成
--db-user NAME アプリ用の DB ユーザー名 myclinic
--db-pass PW アプリ用 DB ユーザーのパスワード(省略時は端末で非表示入力、なければ自動生成) 自動生成
--port N 公開するホスト側ポート 3306
--server-id N MySQL の server-id 1
--uid N / --gid N mysqld プロセスの HOST_UID / HOST_GID 対象ユーザーの id -u / id -g
--source DIR 元となる docker/db ディレクトリ <repo>/docker/db
--force 既存のディレクトリへのインストールを許可する
-y, --yes 確認プロンプトを省略する
-h, --help ヘルプを表示する

パスワードの扱い

パスワードは、フラグを指定しなかった場合、端末があれば /dev/tty から 非表示(エコーなし・2 回入力で確認) で読み取ります。コマンドライン上にパスワードを残さないよう、端末で直接スクリプトを実行してください。端末が無い環境ではランダムなパスワードが自動生成され、最後にまとめて表示されます(必ず控えてください)。

生成されるファイル

インストール先には次のファイルが作成されます。

ファイル 内容
compose.yaml docker/db から複製した Docker Compose 定義
conf.d/ MySQL の設定ファイル
schema.sql データベースのスキーマ
compose.override.yaml 初回起動時に schema.sql を読み込むためのオーバーライド(スクリプトが生成)
.env パスワード・ポート・HOST_UID/HOST_GID などの設定(パーミッション 600、常に新規生成)
data/ 空の MySQL データディレクトリ(初回起動時にスキーマが読み込まれる)

安全策

  • インストール先のディレクトリが既に存在する場合はエラーになります(--force で上書き許可)。
  • data/ が既に空でない(=既存の DB がある)場合もエラーになります(--force で既存データを再利用)。
  • --up を使う場合は、対象側で docker compose が使えることを確認します。

起動と検証

--up を付けると、配置後にデータベースを起動し、スキーマの読み込み完了まで待機します。

初期化中は一時的な MySQL サーバーがソケットのみで待ち受け、初期化が完了してから本番サーバーが 3306 を待ち受けます。そのため、コンテナ内で 127.0.0.1:3306 に到達できることをもって「初期化完了かつサービス提供中」と判定します。完了後、schema.sql 内の CREATE TABLE 数と、実際に作成されたテーブル数を突き合わせて検証します。

# ローカルの /srv/myclinic-db に構築し、そのまま起動する
./scripts/install-db.sh --up /srv/myclinic-db

# リモートのサーバーにポート 3307 で構築し、そのまま起動する
./scripts/install-db.sh --up --port 3307 deploy@dev-db.internal:/srv/myclinic-db

--up を付けなかった場合は、最後に起動用のコマンドが表示されます。

cd <インストール先> && docker compose up -d

次のステップ

データベースを構築したら、アプリのインストールに進み、ここで設定した DB ユーザー・パスワード・ポートをアプリの接続情報として指定します。