データベースのインストール¶
scripts/install-db.sh は、まっさらな myclinic 用の MySQL データベース(Docker 版)を、ローカルのディレクトリ、または SSH でつながるリモートのディレクトリに構築するスクリプトです。
リポジトリの docker/db(compose.yaml・conf.d/・schema.sql)を対象ディレクトリに配置し、パスワードなどを含む .env を生成したうえで、初回起動時にスキーマが自動で読み込まれるように設定します。
安全な初期化
スクリプトは空の data/ ディレクトリを作成し、schema.sql を MySQL の /docker-entrypoint-initdb.d にマウントする compose オーバーライドを書き出します。これにより、スキーマは 初回起動時のみ 読み込まれます。既存の docker/db/data(稼働中のデータ)や既存の .env はコピーされません。
使い方¶
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 を付けなかった場合は、最後に起動用のコマンドが表示されます。
次のステップ¶
データベースを構築したら、アプリのインストールに進み、ここで設定した DB ユーザー・パスワード・ポートをアプリの接続情報として指定します。