Node.js サーバーから、Docker サーバにデータを送る
- Ubuntuサーバー環境は2つ使ってます
- マシンA
- Node.js + Express + express-session + connect-redis + Redis
- マシンB
- Docker + Docker-Compose + Redis
- マシンA
マシン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
varexpress=require('express');varapp=express();varsession=require('express-session');varRedisStore=require('connect-redis')(session);constREDIS_HOST_NAME='192.168.123.223';constREDIS_PORT_NO=6379;varredis=require('redis');letredisClient=redis.createClient(REDIS_PORT_NO,REDIS_HOST_NAME);app.use(session({secret:'secret',resave:false,saveUninitialized:true,store:newRedisStore({client:redisClient}),// Redisの設定cookie:{path:'/',maxAge:5*1000,}}));app.get('/',(req,res)=>{// セッションデータが無ければランダム値を取得varbegginer=req.session.value||Math.random();// valueという名前でセッションデータを生成req.session.value=begginer;res.send('Begginer value: '+begginer);});app.get('/session-delete',function(req,res){deletereq.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が削除されているのが確認できる。
参考
- Node.js + Express 4.xで、セッション管理にRedisを使う
- ExpressのSessionデータをRedisで管理する
- 【入門】Redis
- redis-cli コマンド操作まとめ
- Redisのインストール・セットアップ
- Redisの説明