はじめに
LOLIPOP!マネージドクラウドのNode.js
プロジェクトでデータベースを利用する方法の備忘録です。
目次
- データベースの情報を確認する
- MySQLのバージョンを確認する
- MySQL8.0に対応したmysqlライブラリを使用する
- LOLIPOP!マネージドクラウドのサーバーにSSH接続する
- テーブルの作成
- 環境変数の設定
1. データベースの情報を確認する
プロジェクト一覧
から作成したプロジェクトを選択し、データベースの情報を確認します。
データベース名
やユーザー名
、ホスト名
は自動で設定されます。パスワード
はプロジェクト作成時に入力したパスワードが設定されており、プロジェクト作成後もパスワードを変更する
リンクから変更できます。
2. MySQLのバージョンを確認する
2024年4月からは、新規プロジェクトを作成するとMySQL8.0
のデータベースが作成されます。
本日、データベースについて【 MySQL8.0 】を提供開始いたしました。
これより、新規作成いただくデータベースについては、MySQL8.0 で作成いただけるようになりました。・すでに作成いただいているデータベースの MySQL バージョンに変更はございません。
・MySQL5.7 でのデータベース新規作成は提供終了いたしました。
(MySQL8.0 提供のお知らせ:https://note.com/mclolipopjp/n/n3b9bbff6ec61)
データベースのホスト名
からもMySQLのバージョンを知ることができます。
ホスト名 | MySQLのバージョン |
---|---|
mysql-1.mc.lolipop.lan | 5.7 |
mysql-2.mc.lolipop.lan | 5.7 |
mysql-3.mc.lolipop.lan | 8.0 |
3. MySQL8.0に対応したmysqlライブラリを使用する
MySQL5.7
を利用している方、既にMySQL8.0
対応ずみの方はスキップしてください
Node.js
でMySQL
を利用するライブラリとして代表的なmysql
ライブラリはMySQL8.0
に対応していません。
そこで、今回はmysql2
を使用します。
npm install --save mysql2
Node.js
+Express.js
を使用したWEBアプリケーションの場合は下記のように使用します。
const mysql = require("mysql2/promise");
const pool = mysql.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
});
app.get("/list", async (req, res) => {
try {
const [results] = await pool.query("SELECT * FROM table");
res.render("list.ejs", { results: results });
} catch {
res.status(500).send("Database Error");
}
});
4. LOLIPOP!マネージドクラウドのサーバーにSSH接続する
LOLIPOP!マネージドクラウドに登録するための公開鍵・秘密鍵を生成します。
cd ~/.ssh
ssh-keygen -t rsa
生成した公開鍵は、ダッシュボード>SSH公開鍵の管理
画面から追加します。
プロジェクトのSSH/SFTP
欄のSSHコマンド
を使用して、LOLIPOP!マネージドクラウドのサーバーにSSH接続します。
ssh -p 22 <ユーザー名>@<ホスト>
5. テーブルの作成
SSH接続した状態で、mysql
を実行します。データベース名
やユーザー名
、ホスト名
は手順.1で確認したものを入力してください。
mysql -u <ユーザー名> -p -h <ホスト名> <データベース名>
mysql
のインターフェースが開かれたら任意のテーブルを作成します。
mysql> CREATE TABLE hoge (id INT AUTO_INCREMENT,fuga TEXT, PRIMARY KEY (id));
あらかじめ作成したSQLファイルを実行する事もできます。
pushしたリポジトリは/var/app/current
上に配置されているので、下記のようなコマンドで実行できます。
mysql -u <ユーザー名> -p -h <ホスト名> <データベース名> < ./current/hoge.sql
LOLIPOP!マネージドクラウドのサーバーは、キーボードから日本語が入力できない初期設定になっているので、日本語のデータをINSERT
したいときはSQLファイルを実行する方法が簡単です。
日本語データが文字化けする場合はmysql
コマンド実行時に下記のように文字コードを指定してください。
mysql -u <ユーザー名> -p -h <ホスト名> <データベース名> --default-character-set=utf8mb4 < ./current/hoge.sql
6. 環境変数の設定
環境変数からデータベースの接続情報を利用する場合はプロジェクトの環境変数設定
から設定しておきます。
設定した環境変数は、通常の環境変数と同様下記のように利用できます。
const pool = mysql.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
});
おわりに
ここまでの手順で、LOLIPOP!マネージドクラウドにデプロイしたWEBアプリケーションからデータベースが利用できるようになります。
参考文献