도커 + 소켓 IO(레디스연결)

김성훈·2021년 7월 3일
0

vi app.js(소켓서버 + 레디스 연결)

아례 redisInfo 정보에 알맞게 넣으시면 됩니다.

ex)
host: '3.86.7.129',
port: 6379,
password : '1111'

  • 이부분에 경우 attendAuth라는 채널을 구독하고 메세지 채널에 맞는 이벤트 메시지를 전송합니다
    redis.subscribe('attendAuth');
    redis.on("message", function(channel, message) {
    var data = JSON.parse(message);
    switch(channel) {
    case 'attendAuth':
    try {
    console.log('attendAuth channel');
    io.sockets.emit(data.socketCh, {'data' : {
    socket_ch : data.socketCh
    , userId : data.userId
    }});
    }catch (e) {
    console.log(e);
    }
    break;
    }
    });
const express = require('express');
const app = express();
var port = 6001;
var redisInfo = {
  host: ${host},
  port: ${port},
  password : ${password}
};
const server = app.listen(port, function() {
    console.log('server running on port '+port);
});
const io = require('socket.io')(server, {
  cors: {
    origin: '*',
  }
});
io.on('connection', function(socket) {
    socket.on('SEND_MESSAGE', function(data) {
        console.log(data);
        io.emit('MESSAGE', data)
    });
});
_redis = require("redis");
redis = _redis.createClient(redisInfo.port, redisInfo.host)
redis.auth(redisInfo.password);
redis.subscribe('attendAuth');
    redis.on("message", function(channel, message) {
        var data = JSON.parse(message);
    switch(channel) {
      case 'attendAuth':
        try {
          console.log('attendAuth channel');
            io.sockets.emit(data.socketCh, {'data' : {
                socket_ch : data.socketCh
                  , userId : data.userId
            }});
        }catch (e) {
          console.log(e);
        }
        break;
    }
});

docker-compose.yml

예시
- VIRTUAL_HOST=sock.user156.com
- VIRTUAL_PORT=6001

version: '3.7'
services:
  menu-socket:
    build:
      context: ./
      dockerfile: Dockerfile
    container_name: menu-socket-container
    restart: always
    image: menu-socket-app
    volumes:
      - ./:/src/app
    environment:
      - VIRTUAL_HOST=${도메인 주소}
      - VIRTUAL_PORT=${포트번호}
    networks:
      - nginx-proxy
networks:
  nginx-proxy:
    name: nginx-proxy

Dockerfile

$ Dockerfile

예시
EXPOSE 6001

FROM node:12.16.3-alpine3.11
ENV SRCDIR /src
RUN mkdir -p $SRCDIR/app && chown -R node:node $SRCDIR
WORKDIR $SRCDIR
COPY ./package.json $SRCDIR
RUN npm install
COPY . $SRCDIR
EXPOSE ${6001}
WORKDIR $SRCDIR/app
CMD ["node", "app.js"]

package.json

{
  "name": "node",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "debug": "~2.6.9",
    "ejs": "~2.5.7",
    "express": "~4.16.0",
    "redis": "^3.1.2",
    "request": "^2.88.0",
    "socket.io": "= 2.0.4",
    "uuid": "^2.0.2",
    "vue-socket.io": "^3.0.10"
  }
}

명령어

$ docker network create nginx-proxy
$ docker-compose up -d --build

0개의 댓글