1. はじめに
この記事では、Fly.ioを使ってMySQLをデプロイする手順を解説します。
Fly.ioではDockerfileの作成が不要で、公式イメージをそのまま利用できるため、最短ステップでMySQLをデプロイできます。
この記事のゴール
- Fly.ioにMySQLをデプロイする。
- ローカルからFly.io上のMySQLに接続できるようにする。
想定読者
MySQL8.4をfly.ioにデプロイしたい方
2. 前提条件
2.1. Fly.io CLIのインストール
brew install flyctl
2.2. Fly.ioアカウントの作成とログイン
flyctl auth login
3. MySQLのデプロイ手順
3.1. アプリケーションの作成
mkdir my-mysql # ルート直下にしました
cd my-mysql
fly launch --no-deploy --image mysql:8.4
設定変更 (ポート3306への変更)
コマンド実行後、以下のプロンプトが表示されます:
Do you want to tweak these settings before proceeding? (y/N)
ここでは、y
を選択してください。
その後、ブラウザでFly.ioの管理画面が自動的に開きます。
-
Port設定を3306に変更
- 「Port」フィールドを
3306
に変更します。 - 設定を保存し、管理画面を閉じます。
- 「Port」フィールドを
3.2. ボリュームの作成
Fly.ioでは、データを永続化するためにボリュームを作成します。
fly volumes create mysqldata --size 10
- mysqldata: ボリューム名
- サイズ10GBを指定(必要に応じて変更可能)
実行時のプロンプト例:
Warning! Every volume is pinned to a specific physical host. You should create two or more volumes per application to avoid downtime. Learn more at https://fly.io/docs/volumes/overview/
? Do you still want to use the volumes feature? Yes
? Select region: [Use arrows to move, type to filter]
? Select region: Tokyo, Japan (nrt)
ここでは、以下の手順で進めます:
- 「Do you still want to use the volumes feature?」と聞かれるので、Yesを選択。
- 次にリージョンを選択する画面が表示されるので、矢印キーでTokyo, Japan (nrt) を選択。
3.3. 環境変数とシークレットの設定
MySQLのユーザー名やパスワードはFly.ioのシークレットとして安全に保存します。
fly secrets set MYSQL_PASSWORD="あなたのパスワード" MYSQL_ROOT_PASSWORD="あなたのルートパスワード"
3.4. 設定ファイルの編集 (fly.toml)
以下は例です:
app = 'my-mysql'
primary_region = 'nrt'
[build]
image = 'mysql:8.4'
[[vm]]
cpu_kind = 'shared'
cpus = 1
memory_mb = 2048
[processes]
app = """--datadir /data/mysql \
--mysql-native-password=ON"""
[mounts]
source = "mysqldata"
destination = "/data"
[env]
MYSQL_DATABASE = "my_database"
MYSQL_USER = "my_user"
3.5. 環境変数とデータベースの初期化について
このfly.toml
のenv
セクションに記載された項目は、デプロイ時に自動でデータベース内に作成されます。
具体例:
-
MYSQL_DATABASE
: Fly.ioがデプロイ時にmy_database
というデータベースを自動で作成します。 -
MYSQL_USER
: Fly.ioがmy_user
というユーザーを作成します。
これらは、Fly.ioが提供するMySQL公式イメージの初期化機能によって設定されます。
また、以下のシークレットとして指定されたパスワードがユーザーに割り当てられます。
fly secrets set MYSQL_PASSWORD="あなたのパスワード" MYSQL_ROOT_PASSWORD="あなたのルートパスワード"
ポイント:
- データベースやユーザーはFly.ioの公式MySQLイメージに組み込まれている機能で自動的に作成されます。
- 環境変数の設定だけで基本的なデータベース環境が構築されるため、手動でSQLを実行する必要はありません。
4. デプロイの実行
準備が整ったら、以下のコマンドでデプロイを実行します。
fly deploy
5. 接続確認
5.1. プロキシ設定
Fly.ioのMySQLにローカルから接続するためのプロキシを起動します。
fly proxy 3306 -a my-mysql
5.2. ローカルから接続
プロキシ経由で接続します:
mysql -h 127.0.0.1 -P 3306 -u my_user -p my_database
- パスワード入力後、接続されれば成功です
6. データベース管理
6.1. テーブル作成
CREATE TABLE test_table (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL
);
6.2. データ確認
INSERT INTO test_table (name) VALUES ('test_name');
SELECT * FROM test_table;
7. トラブルシューティング
7.1. 接続できない場合
Fly.ioのログを確認します:
fly logs
8. まとめ
- Fly.ioではDockerfile不要でMySQLを簡単にデプロイできる。
- 永続化設定や接続情報の管理もFly.ioのシークレット管理で安全に実施可能。
- 本番環境やアプリケーションとの接続設定も同じ手順で対応できる。
9. 補足情報
- Fly.io公式ドキュメント: Fly.io MySQLの公式ガイド