private-isuのnode実装を動かすためにやったこと
前提
cloud-init-isuconで環境構築したprivate-isu
ansibleで構築したなら同じはず
要約
nodeを入れた
指定はv4.4.3だけど動かないかも
mysql5.7を入れた
インストール済みのmysql8.0はちゃんと消そう
初期データを入れ直した
isuconpユーザーを作った
動いた
追記(2022/07/18)
mysqlはmysql2を使えばmysql8.0でも動いた
yarn add mysql2
requireするのをmysql-promiseからmysql2/promiseに変える
コードを以下のように書き換える
code:app.js
// db を _db に変える
const _db = mysql.createPool({
// 略
});
const db = {
query: async (q, a) => {
const rows = await _db.query(q, a);
return rows;
},
};
mysql2は結果が配列の1つ目に入るようになってるので、db.queryがそれを返すようにした
動いた
やったこと
--skip-tags nodejsでnodeのインストールがスキップされてるので自分で入れる
n-installを使った
curl -L https://bit.ly/n-install | bash
nodeのバージョンは4.4.3らしい
https://github.com/catatsuy/private-isu/blob/096802b1d54481105624d7010c531e3b6328b170/provisioning/image/ansible/04_xbuild.yml#L16-L21
n 4.4.3で4.4.3をインストール
削除されてるpackage.jsonを回収
https://github.com/catatsuy/private-isu/commit/f64a36bd39964ac7457374fc26515a3e4a091941
npm iが通らなかったのでlts(v16.16.0)に変更
n lts
npm i -g yarnで入れたyarnでも通ったのでyarnを使う
isu-node.serviceを回収
https://github.com/catatsuy/private-isu/blob/096802b1d54481105624d7010c531e3b6328b170/provisioning/image/files/etc/systemd/system/isu-node.service
実行コマンド部分のみ編集
ExecStart=/home/isucon/n/bin/node /home/isucon/n/bin/yarn start
package.jsonのscriptsにstart: "node app.js"を追加
実行、MySQLに接続できてなさそう
gitの履歴を見ると開催された2016年以降にpackage.jsonが変更されているっぽいので戻す
https://github.com/catatsuy/private-isu/commit/d3e2f018738506d0bb88a3d7f165b549d76c7a6f
再度実行、MySQL8.0の認証方式をサポートしていません的なエラーが出るのでMySQL5.7を入れてみる
インストールされてるものは消す(/etc/mysqlを消してなかったせい(多分)で小一時間エラーに悩まされた)
https://qiita.com/King_kenshi/items/b6f217a8a3083c98904b
code:shell
sudo apt-get remove --purge mysql-server* mysql-common
sudo apt-get autoremove --purge
sudo rm -r /etc/mysql
sudo rm -r /var/lib/mysql
https://www.vultr.com/ja/docs/how-to-install-mysql-5-7-on-ubuntu-20-04/ を見て5.7を入れる
途中Ubuntu focalがサポートされてません的な文章が出たのでbionicを選ぶ
初期データを入れ直す
bzcat /home/isucon/backup/mysqldump.sql.bz2 | sudo mysql
isuconpユーザー作る
code:sql
create user 'isuconp'@'%' identified by 'isuconp';
grant all privileges on *.* to 'isuconp'@'%';
ブラウザでアクセスしたら表示された!ベンチも通った
#isucon