チャットアプリ作っていきたいが4

とりあえず環境整備として、WinTerminal導入した。これはWSLで作業するなら楽できてよい

プルダウンメニューからログインするShell選べばそれだけでUbuntuに入れるし、
$HOMEがそのままUbuntu内のユーザーのものになってるからすぐ移動できて便利だし、タブがあるのもいい
多くのblogで他が紹介されてるけどなぜこれ一択にならないか不思議なくらいだわ

$ docker exec -it [コンテナID] /bin/bash  

ログインしてMySQL接続すすめていく。前回はcomposeでMySQL起動いっしょにするってだけやった

https://www.366service.com/jp/qa/ec36b8716fbbe87b576bce0d1c5fe70c
参考にDBをセットアップしておく

CREATE DATABASE telepath DEFAULT CHARACTER SET utf8;
CREATE  TABLE IF NOT EXISTS `telepath`.`chat` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;
CREATE  TABLE IF NOT EXISTS `telepath`.`chat_user` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `handle` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;
CREATE  TABLE IF NOT EXISTS `telepath`.`chat_line` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `chat_id` INT UNSIGNED NOT NULL ,
  `user_id` INT UNSIGNED NOT NULL ,
  `line_text` TEXT NOT NULL ,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_chat_line_chat` (`chat_id` ASC) ,
  INDEX `fk_chat_line_chat_user1` (`user_id` ASC) ,
  CONSTRAINT `fk_chat_line_chat`
    FOREIGN KEY (`chat_id` )
    REFERENCES `telepath`.`chat` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_chat_line_chat_user1`
    FOREIGN KEY (`user_id` )
    REFERENCES `telepath`.`chat_user` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

dockerを落としてもMySQLデータが消えないようにはしてある
んだが、ここだけ手だしちょっと嫌だな...
本来はdocker起動時に実行されるscheme定義を作っておくべきなんだろうが、まあちょっと後でにする

とりあえず手でDBに値を入れておいてそれを開けるようにしたい

mysql> select * from chat;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.00 sec)

mysql> select * from chat_user;
+----+--------+
| id | handle |
+----+--------+
|  1 | admin  |
+----+--------+
1 row in set (0.00 sec)

mysql> select * from chat_line;
+----+---------+---------+-----------+---------------------+
| id | chat_id | user_id | line_text | created_at          |
+----+---------+---------+-----------+---------------------+
|  1 |       1 |       1 | test      | 2020-09-27 05:02:12 |
+----+---------+---------+-----------+---------------------+
1 row in set (0.00 sec)

とりあえずテストデータ入れた これをtelepath-appから参照して表示する

ってここまでやってtelepath-app側からdbへ接続しようとしたらダメだった

root@ab26605bfb1a:/usr/src/app# cat /tmp/system.log
[2020-09-27T10:07:36.267] [DEBUG] system - error connecting: Error: connect ECONNREFUSED 172.23.0.2:3306
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16)
    --------------------
    at Protocol._enqueue (/usr/src/app/node_modules/mysql/lib/protocol/Protocol.js:144:48)
    at Protocol.handshake (/usr/src/app/node_modules/mysql/lib/protocol/Protocol.js:51:23)
    at Connection.connect (/usr/src/app/node_modules/mysql/lib/Connection.js:116:18)
    at Object.<anonymous> (/usr/src/app/index.js:26:12)
    at Module._compile (internal/modules/cjs/loader.js:1133:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1153:10)
    at Module.load (internal/modules/cjs/loader.js:977:32)
    at Function.Module._load (internal/modules/cjs/loader.js:877:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47

チラッとググった感じパスワードとかMySQL起動してないとかその辺らしいがうーむ…
次回ここから 今回のcommit(汚いなあ...) https://github.com/sh3eys/telepath/commit/e053485d1ecdb5be4d0d4cd6480daf82db0495a9

普通にcontainer-nameでping叩いたらチェックできるみたいだな
https://docs.docker.jp/engine/userguide/networking/work-with-networks.html

おまけ dockerデバッグする時にツール欲しくなったらログインしてからいっかい最新化しないとインストールこける

apt-get update
apt-get install vim