Imagem: redis:7-alpine Pasta: /opt/server/infra/redis/ Container name: redis Endereço interno: redis:6379

Para que serve

Redis é um store in-memory usado para cache, sessões, filas leves e pub/sub. Compartilhado entre projetos.

Variáveis

infra/redis/.env (gerada pelo bootstrap):
REDIS_PASSWORD=<gerado>   # 48 hex chars

Como o password é aplicado

O compose passa a senha como argumento de inicialização:
command: ["redis-server", "--requirepass", "${REDIS_PASSWORD}", "--appendonly", "yes"]
--appendonly yes ativa o AOF (Append Only File): cada operação de escrita vai pro disco, garantindo persistência.

Volume

./data → /data
Contém o AOF e qualquer snapshot RDB que o Redis decida fazer.

Sem porta exposta

Apenas acesso via server_net. Para debugar do host:
docker compose exec -it redis redis-cli -a "$(grep REDIS_PASSWORD .env | cut -d= -f2)"

Subir

cd /opt/server/infra/redis
docker compose up -d

Padrão de uso pelos projetos

services:
  app:
    env_file: /opt/server/infra/redis/.env
    environment:
      REDIS_URL: redis://default:${REDIS_PASSWORD}@redis:6379
    networks:
      - server_net
Compartilhar o .env do Redis entre projetos significa que todos têm acesso a todas as keys. Para isolamento real, use prefixos por projeto (projetoA:cache:foo) ou DBs diferentes (redis://...:6379/0, /1, etc.).