Node.js + Express サーバから、Docker(+Docker-Compose) + Redis サーバーにデータを送る・削除する


Node.js サーバーから、Docker サーバにデータを送る

  • Ubuntuサーバー環境は2つ使ってます
    • マシンA
      • Node.js + Express + express-session + connect-redis + Redis
    • マシンB
      • Docker + Docker-Compose + Redis

マシンA から マシンB を参照してデータを表示したかったので、こんな構成になってます。
色々サイト見てたけど、実際にやってみないとコレわかんねーわって思った。

マシンAの下準備

色々インストールする

Ubuntu と Node.js は既に導入済を想定

必要なものをインストールする

$ mkdir exp_redis_test
$ cd exp_redis_test
$ npm install --save express \
                     express-session \
                     connect-redis \
                     redis

マシンBの下準備

前回作ってたので、それを使う

マシンBのRedis起動しておく

docker-compose up -d --build

マシンAで index.js を作る

node で実行するファイルを作成する

var と const と let が混じってるけど気にしない。

index.js
var express = require('express');
var app = express();
var session = require('express-session');
var RedisStore = require('connect-redis')(session);

const REDIS_HOST_NAME = '192.168.123.223';
const REDIS_PORT_NO = 6379;
var redis = require('redis');
let redisClient = redis.createClient(REDIS_PORT_NO, REDIS_HOST_NAME);

app.use(session({
    secret: 'secret',
    resave: false,
    saveUninitialized: true,
    store: new RedisStore({ client: redisClient }), // Redisの設定
    cookie: {
      path: '/',
      maxAge: 5 * 1000,
    }
}));

app.get('/', (req, res) => {
    // セッションデータが無ければランダム値を取得
    var begginer = req.session.value || Math.random();
    // valueという名前でセッションデータを生成
    req.session.value = begginer;
    res.send('Begginer value: ' + begginer);
});

app.get('/session-delete', function(req, res) {
  delete req.session.value;
  res.send('session variable deleted');
});

app.listen(3000, () => {
    console.log('Example app listening on port 3000!');
});

作ったら保存して起動する

$ node index.js
Example app listening on port 3000!

ブラウザで http://192.168.123.223:3000/ を起動すると、
数字は同じにはならないが、↓こんな感じになる

この状態のままで、マシンBを確認する

$ docker exec -it mysqltest_redis_1 bash
root@09a7f47d4784:/data# redis-cli
127.0.0.1:6379> keys *
1) "sess:VKmVo2FPTXAlspqLyLHgENmEdHhzK_pS"

データが入力されてるのが確認できる。中身を見ると、

$ docker exec -it mysqltest_redis_1 bash
root@09a7f47d4784:/data# redis-cli
127.0.0.1:6379> keys *
1) "sess:VKmVo2FPTXAlspqLyLHgENmEdHhzK_pS"
127.0.0.1:6379> get sess:VKmVo2FPTXAlspqLyLHgENmEdHhzK_pS
"{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"value\":0.016689389693930634}"
127.0.0.1:6379>

こんな感じに、Valueが入力されているのが確認できる。
index.js を再確認したら、session-delete が出来るようにしてあるので、
http://192.168.123.223:3000/session-delete/ にアクセスしてみる。
↓こうなるので、またマシンBを確認する。

$ docker exec -it mysqltest_redis_1 bash
root@09a7f47d4784:/data# redis-cli
127.0.0.1:6379> keys *
1) "sess:VKmVo2FPTXAlspqLyLHgENmEdHhzK_pS"
127.0.0.1:6379> get sess:VKmVo2FPTXAlspqLyLHgENmEdHhzK_pS
"{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"}}"
127.0.0.1:6379>

Valueが削除されているのが確認できる。

参考