암호를 사용하여 Docker에서 connect-redis

8095 단어 redisnodedockerwebdev
도커에서 비밀번호로 사용할 솔루션connect-redis을 공유하고 싶습니다.

문제



나는 redis@v4을 사용합니다.
connect-redis official website은 다음 코드를 제공합니다. 그러나 이 코드는 docker-compose를 사용하는 Docker에서 올바르게 작동하지 않습니다. 이 코드에는 비밀번호 설정이 포함되어 있지 않습니다. 또한 문제 중 하나입니다.
이 컨테이너는 이 코드의 설정에서 localhost에 연결되는 것 같습니다. 그래서 그것의 원인 일 수 있습니다.

const session = require("express-session")
let RedisStore = require("connect-redis")(session)

// redis@v4
const { createClient } = require("redis")
let redisClient = createClient({ legacyMode: true })
redisClient.connect().catch(console.error)

app.use(
  session({
    store: new RedisStore({ client: redisClient }),
    saveUninitialized: false,
    secret: "keyboard cat",
    resave: false,
  })
)

해결책



redis은 npm 웹사이트에서 이러한 문제를 해결할 수 있는 방법을 제공합니다.
다음 코드를 나타냅니다. 그래서 이 코드에 따라 코드를 만들어 보려고 합니다.

createClient({
  url: 'redis://alice:[email protected]:6380'
});

이 URL의 내용은 다음과 같습니다.

redis[s]://[[username][:password]@][host][:port][/db-number]

물론 이것은 URL입니다. "/", "+", "&"및 "?"를 사용하면 안 됩니다.hostdocker-compose.yml에 쓰여진 서비스 이름입니다.
다음은 샘플 코드입니다.legacyMode:true 인수에 createClient를 추가해야 합니다. 이 옵션을 추가하지 않으면 프로세스가 저장 프로세스에서 벗어나지 않습니다.

const RedisStore = require("connect-redis")(session);

// redis@v4
const { createClient } = require("redis")
console.log(env.REDIS_PASS);
// let redisClient = createClient({host: 'redisdb', port: 6379, legacyMode: true, password: env.REDIS_PASS })
let redisClient = createClient({url: `redis://${env.REDIS_USER}:${env.REDIS_PASS}@${env.REDIS_HOST}:${env.REDIS_PORT}`, legacyMode: true})
redisClient.connect().catch(console.error);

이 코드의 각 변수에 대한 설명은 다음과 같습니다.

REDIS_USER=user name(default value is "default")
REDIS_PASS=password
REDIS_HOST=host name (It is written to docker-compose.yml)
REDIS_PORT=port number(default value is 6379)



이 원본 기사는 내가 쓴 다음과 같습니다. 이 기사는 일본어에서 영어로 번역되었습니다.





connect-redis(을)를Docker에서 사용하려면




zenn.dev

좋은 웹페이지 즐겨찾기