Eu queria testar o Discourse localmente, então usei o Docker Compose para tentar configurá-lo:
version: '3.8'
services:
postgres:
image: pgvector/pgvector:pg17
container_name: discourse-postgres
restart: always
environment:
POSTGRES_USER: discourse
POSTGRES_PASSWORD: discourse
POSTGRES_DB: discourse
# Garante que a extensão seja carregada corretamente
# POSTGRES_INITDB_ARGS: "--enable-extensions=vector"
volumes:
- ./data/postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U discourse && psql -U discourse -c 'SELECT * FROM pg_extension WHERE extname = ''vector'';'"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
container_name: discourse-redis
restart: always
volumes:
- ./data/redis:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
discourse:
image: discourse/discourse:stable
container_name: discourse-app
restart: always
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
ports:
- "80:80"
environment:
DISCOURSE_DB_HOST: postgres
DISCOURSE_DB_USER: discourse
DISCOURSE_DB_PASSWORD: discourse
DISCOURSE_REDIS_HOST: redis
DISCOURSE_DEVELOPER_EMAILS: "admin@example.com"
DISCOURSE_HOSTNAME: "localhost"
# Configuração SMTP temporária (precisa ser alterada para valores reais após a inicialização)
DISCOURSE_SMTP_ADDRESS: "smtp.example.com"
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: "admin@example.com"
DISCOURSE_SMTP_PASSWORD: "password"
# Opcional: Desabilitar funcionalidades de IA desnecessárias para reduzir dependências de extensão (se necessário)
DISCOURSE_DISABLE_VECTOR_SEARCH: "true"
volumes:
- ./data/discourse:/var/www/discourse/shared
No entanto, encontrei um problema que está me impedindo de experimentar o fórum Discourse:
discourse-postgres | 2026-01-20 09:19:47.774 UTC [140] ERROR: column "vector" does not exist at character 44
discourse-postgres | 2026-01-20 09:19:47.774 UTC [140] STATEMENT: SELECT * FROM pg_extension WHERE extname = vector;
Não sei qual é o motivo, algum veterano pode me orientar?