Configuração
O Decoding Chat lê suas configurações de variáveis de ambiente. Elas residem em um arquivo chamado .env, no mesmo diretório do docker-compose.yml.
Para a stack do Compose embutida, comece com Identidade principal e endereço público e Segredos que você deve gerar. As seções restantes cobrem configurações personalizadas e serviços externos.
O instalador em Começando escreve o .env para você e preenche todos os segredos. Atualizando cobre a transição entre lançamentos.
Como a configuração é carregada
Seção intitulada “Como a configuração é carregada”O Compose passa apenas as variáveis listadas no docker-compose.yml. Para uma configuração não listada, adicione-a ao ambiente do serviço através de um override local do Compose. Adicioná-la apenas ao .env não tem efeito.
Use aspas simples para valores contendo um literal $ para que o Compose não os expanda como referências de variáveis:
POSTGRES_PASSWORD='ab$cd'O ambiente de um contêiner é fixado quando ele é criado. Aplique as alterações com docker compose up -d, que recria os serviços afetados. O docker compose restart mantém o ambiente antigo.
Precedência, da mais alta para a mais baixa:
- Um valor armazenado pelo painel de administração, para as configurações listadas em Configurações de runtime no painel de administração.
- A variável de ambiente.
- O padrão embutido.
Use true ou false para booleanos, inteiros decimais para configurações de inteiros, e o objeto ou array especificado para configurações JSON. Os padrões e valores aceitos estão listados abaixo. Deixe uma substituição indesejada não definida, pois um valor vazio nem sempre restaura o padrão.
Identidade principal e endereço público
Seção intitulada “Identidade principal e endereço público”FLUXER_DOMAIN é necessário. Todo o resto aqui é opcional.
| Variável | Valor em .env.example | Descrição |
|---|---|---|
| FLUXER_DOMAIN | chat.example.com | O hostname que os usuários digitam. Chega aos serviços como FLUXER_BASE_DOMAIN. O Compose se recusa a iniciar quando não está definido ou está vazio |
| FLUXER_PUBLIC_SCHEME | https | O esquema que os usuários veem. Deve ser http ou https. Qualquer outra coisa falha a inicialização |
| FLUXER_PUBLIC_PORT | 443 | A porta que os usuários veem. Inteiro. Omitida de URLs derivadas quando é o padrão para o esquema |
Fora do Compose, estes revertem para um domínio base vazio, http e a porta 8088. O Compose fornece https e 443.
A API e o worker requerem configurações de domínio apenas de hostname: sem esquema, porta, credenciais, caminho, query, fragmento ou espaço em branco. Coloque endereços IPv6 entre colchetes. A grafia válida do hostname é preservada, incluindo maiúsculas/minúsculas e um ponto raiz final.
FLUXER_DOMAIN também alimenta o identificador de provedor de passkey padrão, o endereço de contato VAPID padrão e o endereço do listener de edge.
FLUXER_PUBLIC_ORIGIN declara o mesmo endereço público como uma string, e A origem pública o contém.
FLUXER_INTERNAL_SCHEME
Seção intitulada “FLUXER_INTERNAL_SCHEME”Padrão http. O esquema para URLs de serviço interno. Deve ser http ou https, e qualquer outra coisa falha na inicialização.
Segredos que você deve gerar
Seção intitulada “Segredos que você deve gerar”Cada valor abaixo é fornecido como CHANGE_ME. Substitua todos antes do primeiro início. O Compose se recusa a iniciar quando um não está definido ou está vazio, e nomeia a variável. Gere cada um com openssl rand -hex 32, exceto o segredo de relay, os segredos de URL de anexo e o par VAPID, cujas próprias entradas nomeiam o comando. O instalador em Começando gera todos eles, então venha aqui para rotacionar um valor mais tarde ou para configurá-los manualmente.
POSTGRES_PASSWORD
Seção intitulada “POSTGRES_PASSWORD”O login do banco de dados, reutilizado como FLUXER_POSTGRES_PASSWORD. Exige a alteração da senha da role armazenada também.
MEILI_MASTER_KEY
Seção intitulada “MEILI_MASTER_KEY”A chave mestre do Meilisearch, reutilizada como FLUXER_SEARCH_API_KEY. Recrie meilisearch e todos os serviços que buscam.
FLUXER_S3_SECRET_KEY
Seção intitulada “FLUXER_S3_SECRET_KEY”O segredo do armazenamento de objetos, reutilizado como FLUXER_S3_SECRET_ACCESS_KEY. seaweedfs-init o instala como a única identidade S3 do armazenamento de objetos em cada compose up, de forma que um valor alterado entra em vigor na próxima inicialização.
FLUXER_SUDO_MODE_SECRET
Seção intitulada “FLUXER_SUDO_MODE_SECRET”JWTs de modo sudo, como uma chave HS256 bruta. Alterá-la encerra todas as sessões ativas do modo sudo.
FLUXER_CONNECTION_INITIATION_SECRET
Seção intitulada “FLUXER_CONNECTION_INITIATION_SECRET”Tokens de inicialização de conexão e links de download de colheitas. Alterá-la invalida tokens de inicialização de conexão ainda não verificados e links de download de colheitas já emitidos.
FLUXER_GATEWAY_RPC_AUTH_TOKEN
Seção intitulada “FLUXER_GATEWAY_RPC_AUTH_TOKEN”RPC interno entre a API e o Gateway. Deve ser idêntico byte por byte na api, worker e gateway.
FLUXER_MEDIA_PROXY_SECRET_KEY
Seção intitulada “FLUXER_MEDIA_PROXY_SECRET_KEY”URLs do Media Proxy. Deve combinar entre api, worker, media-proxy, gifs e unfurl.
FLUXER_MEDIA_PROXY_UPLOAD_RELAY_SECRET_BASE64
Seção intitulada “FLUXER_MEDIA_PROXY_UPLOAD_RELAY_SECRET_BASE64”Gere com openssl rand -base64 32. Tokens de capacidade de relay de upload. Deve ser uma decodificação base64 padrão de pelo menos 32 bytes. Deve combinar na api, worker e media-proxy. api e worker se recusam a iniciar sem ele em todos os modos. media-proxy se recusa a iniciar sem ele quando FLUXER_MEDIA_PROXY_MODE for upload ou relay.
FLUXER_MEDIA_PROXY_ATTACHMENT_URL_SECRETS_BASE64
Seção intitulada “FLUXER_MEDIA_PROXY_ATTACHMENT_URL_SECRETS_BASE64”Gere cada entrada com openssl rand -base64 32. Assina as URLs de anexo que o Decoding Chat retorna. Uma lista separada por vírgulas, onde cada entrada deve ser decodificada base64 padrão para pelo menos 32 bytes. Espaços em torno de uma entrada e entradas vazias são ignorados. A primeira entrada assina e cada entrada verifica. Deve combinar na api, worker e media-proxy, e deve diferir de FLUXER_MEDIA_PROXY_SECRET_KEY. A api e o worker recusam a inicialização quando uma entrada é inválida e, sem entrada, eles retornam URLs não assinadas. O media-proxy a lê apenas quando FLUXER_MEDIA_PROXY_MODE é mp ou upload, e então se recusa a iniciar com uma entrada inválida, ou sem entrada quando FLUXER_MEDIA_PROXY_ATTACHMENT_SIGNATURE_MODE for report ou enforce.
A stack do Compose a deixa vazia, então uma instância auto-hospedada retorna URLs não assinadas até que um operador configure uma. Defini-la por si só não altera nada no lado da leitura, porque FLUXER_MEDIA_PROXY_ATTACHMENT_SIGNATURE_MODE permanece off até que seja definida também.
Rotacione-a em três passos e aplique cada um com docker compose up -d antes de iniciar o próximo:
- Adicione o novo segredo como segunda entrada. Todo
media-proxyentão o aceita antes de qualquer serviço assinar com ele. - Mova o novo segredo para a primeira entrada, para que ele assine.
- Remova o segredo antigo não antes de um dia após a etapa 2, pois uma URL comum assinada por ele permanece válida por até um dia.
Uma URL de pacote de dados dentro de uma exportação de colheita nunca expira, então remover um segredo invalida de vez todas as URLs de pacote de dados que ele assinou, incluindo os links dentro de exportações já entregues, e essas exportações têm que ser reconstruídas. O passo 3 é seguro apenas para URLs comuns.
FLUXER_ADMIN_SECRET_KEY_BASE
Seção intitulada “FLUXER_ADMIN_SECRET_KEY_BASE”Sessões de administrador, tokens CSRF e estado OAuth. Alterá-la desloga todos os administradores. O serviço de administração recusa a inicialização quando está vazio.
FLUXER_ADMIN_OAUTH_CLIENT_SECRET
Seção intitulada “FLUXER_ADMIN_OAUTH_CLIENT_SECRET”O client secret do OAuth2 do administrador. A API requer um valor não vazio para servir a aplicação de administração.
FLUXER_ERLANG_COOKIE
Seção intitulada “FLUXER_ERLANG_COOKIE”O segredo de distribuição BEAM. Apenas o Gateway o lê. Rotacione-o em todos os nós Gateway de uma vez durante o cluster.
LIVEKIT_API_SECRET
Seção intitulada “LIVEKIT_API_SECRET”Tokens de acesso LiveKit. Deve ter pelo menos 32 caracteres.
FLUXER_VAPID_PUBLIC_KEY
Seção intitulada “FLUXER_VAPID_PUBLIC_KEY”Base64url do ponto P-256 não comprimido de 65 bytes, sem padding, que tem 87 caracteres. A validação de configuração rejeita qualquer outro formato no boot. install.sh o deriva com openssl ecparam e openssl ec, e npx web-push generate-vapid-keys produz o mesmo par.
FLUXER_VAPID_PRIVATE_KEY
Seção intitulada “FLUXER_VAPID_PRIVATE_KEY”A metade correspondente do par. Base64url do escalar P-256 de 32 bytes, sem padding, que tem 43 caracteres. A API recusa a iniciar quando o escalar não deriva o ponto público. Ambos os valores são requeridos mesmo quando ninguém usa notificações de navegador.
Os valores abaixo vêm com um valor utilizável. Ambos são requeridos.
FLUXER_S3_ACCESS_KEY
Seção intitulada “FLUXER_S3_ACCESS_KEY”.env.example fluxer. A chave de acesso do object storage. Chega aos serviços como FLUXER_S3_ACCESS_KEY_ID, que a validação de configuração requer não estar vazia.
LIVEKIT_API_KEY
Seção intitulada “LIVEKIT_API_KEY”.env.example fluxer. A API key do LiveKit. O Compose a passa para o LiveKit como LIVEKIT_KEYS e como a chave de assinatura de webhook, e para a API como FLUXER_LIVEKIT_API_KEY, de forma que uma mudança no .env move todas.
Derivação de endpoint de FLUXER_BASE_DOMAIN
Seção intitulada “Derivação de endpoint de FLUXER_BASE_DOMAIN”O Decoding Chat constrói seus endpoints públicos a partir do esquema, do domínio base e da porta. O endpoint de docs é um valor fixo. Uma porta 443 em https ou wss, ou 80 em http ou ws, é omitida.
| Endpoint | Valor derivado |
|---|---|
| api, api_client | esquema, domínio base, porta opcional, /api |
| app | esquema, domínio base, porta opcional |
| gateway | ws ou wss, domínio base, porta opcional, /gateway |
| media | esquema, domínio base, porta opcional, /media |
| static_cdn | esquema, domínio base, porta opcional. Com FLUXER_STATIC_CDN_DOMAIN setado, se torna https:// e aquele domínio, sem porta |
| admin | esquema, domínio base, porta opcional, /admin |
| docs | Sempre https://fluxer.dev. Não construído das configurações de domínio |
| marketing | esquema, domínio base, porta opcional, /marketing |
| invite | esquema, FLUXER_INVITE_DOMAIN ou o domínio base, porta opcional, /invite |
| gift | esquema, FLUXER_GIFT_DOMAIN ou o domínio base, porta opcional, /gift |
Nada na stack lê X-Forwarded-Proto ou X-Forwarded-Host. Toda URL absoluta vem da configuração, então configure o esquema, o host e a porta manualmente e os mantenha sincronizados com qualquer que termine o TLS.
A origem pública
Seção intitulada “A origem pública”FLUXER_PUBLIC_ORIGIN declara o endereço público como uma única string, sem barra no final: o esquema, o host e a porta quando aquela porta não é a padrão para o esquema. FLUXER_PUBLIC_SCHEME, FLUXER_DOMAIN e FLUXER_PUBLIC_PORT declaram o mesmo endereço entre eles, então a ortografia deve concordar.
Use uma origem http:// ou https:// explícita. Espaços em volta e uma única barra final são aceitos. Credenciais, caminhos, strings de query, fragmentos, caracteres de controle e portas nulas ou vazias são rejeitadas.
Deixe sem definir a menos que você precise declarar o endereço completo explicitamente. Caso contrário o Compose deriva as URLs públicas do esquema, domínio e porta, incluindo portas não-padrão.
Se você configurar, mantenha estas configurações consistentes com ele. Um descasamento pode quebrar login, setup, passkeys e acesso a mídia.
Substituição de endpoints
Seção intitulada “Substituição de endpoints”Cada um destes substitui seu endpoint derivado totalmente. Defina um apenas quando parte da instância atende em um endereço que a derivação não produz. Todos são opcionais.
A API e worker validam URLs de endpoint no boot. O endpoint do Gateway requer ws:// ou wss://. Os outros requerem http:// ou https://. Prefixos de caminhos e portas explícitas são permitidas. Credenciais, fragmentos, espaços e barras invertidas são rejeitados. Bases de endpoint HTTP não podem conter uma query. A URL do Gateway pode reter parâmetros de query.
FLUXER_STATIC_CDN_DOMAIN
Seção intitulada “FLUXER_STATIC_CDN_DOMAIN”Padrão vazio. Um host separado para ativos estáticos. Quando definido, o endpoint estático é forçado para https sem porta.
FLUXER_INVITE_DOMAIN
Seção intitulada “FLUXER_INVITE_DOMAIN”Padrão vazio. O host usado em links de convite. Um hostname com nenhum esquema e nenhum caminho.
FLUXER_GIFT_DOMAIN
Seção intitulada “FLUXER_GIFT_DOMAIN”Padrão vazio. O host usado em links de presente. Um hostname sem esquema e sem caminho.
FLUXER_API_ENDPOINT
Seção intitulada “FLUXER_API_ENDPOINT”O padrão é o endpoint derivado. A base pública da API. O serviço admin lê o mesmo nome como seu target interno de API, e é por isso que o Compose o seta como http://api:8080 apenas para esse contêiner.
FLUXER_API_CLIENT_ENDPOINT
Seção intitulada “FLUXER_API_CLIENT_ENDPOINT”O padrão é o endpoint derivado. A base da API entregue para clientes. Definir apenas um dos endpoints da API divide o que os clientes vêem do que a instância anuncia.
FLUXER_APP_ENDPOINT
Seção intitulada “FLUXER_APP_ENDPOINT”O padrão é o endpoint derivado. A origem da aplicação web. Também uma das origens CORS permitidas. Servir o cliente de outro hostname requer configurar isto.
FLUXER_GATEWAY_ENDPOINT
Seção intitulada “FLUXER_GATEWAY_ENDPOINT”O padrão é o endpoint derivado. A URL pública WebSocket do Gateway. Também a fonte da URL interna do Gateway quando FLUXER_INTERNAL_GATEWAY_ENDPOINT estiver vazio, com ws reescrito para http.
FLUXER_MEDIA_ENDPOINT
Seção intitulada “FLUXER_MEDIA_ENDPOINT”O padrão é o endpoint derivado. A URL pública do Media Proxy. O serviço gifs o aceita como alternativa para FLUXER_MEDIA_PROXY_PUBLIC_ENDPOINT.
FLUXER_STATIC_CDN_ENDPOINT
Seção intitulada “FLUXER_STATIC_CDN_ENDPOINT”O padrão é o endpoint derivado. A origem de recursos estáticos. Lido pela api, worker, admin, app-proxy e unfurl.
FLUXER_ADMIN_ENDPOINT
Seção intitulada “FLUXER_ADMIN_ENDPOINT”O padrão é o endpoint derivado. A origem admin. A API aceita exatamente esse valor mais /oauth2_callback como a URI de redirect OAuth do admin.
O painel de admin define suas flags de cookie a partir do esquema deste valor, que o Compose constrói a partir do FLUXER_PUBLIC_SCHEME. Em HTTPS seu cookie de CSRF é chamado __Host-csrf_token e tem Secure. Em HTTP é chamado csrf_token sem Secure.
FLUXER_DOCS_ENDPOINT
Seção intitulada “FLUXER_DOCS_ENDPOINT”Padrão https://fluxer.dev. A origem da documentação. Nunca passado a um cliente.
FLUXER_MARKETING_ENDPOINT
Seção intitulada “FLUXER_MARKETING_ENDPOINT”O padrão é o endpoint derivado. A origem de marketing. A segunda origem CORS permitida. Seu hostname é extraído e combinado.
FLUXER_INVITE_ENDPOINT
Seção intitulada “FLUXER_INVITE_ENDPOINT”O padrão é o endpoint derivado. A base de convite. A API lê links em seu hostname como links de convites e não os expande.
FLUXER_GIFT_ENDPOINT
Seção intitulada “FLUXER_GIFT_ENDPOINT”O padrão é o endpoint derivado. A base de presentes. A API não expande links neste hostname.
Endpoints internos endereçam de um contêiner ao outro e nunca aparecem em um navegador. FLUXER_MEDIA_PROXY_PUBLIC_ENDPOINT é exigido por gifs. O restante são opcionais.
FLUXER_INTERNAL_API_ENDPOINT
Seção intitulada “FLUXER_INTERNAL_API_ENDPOINT”Padrão http://127.0.0.1:8080. O endereço de API usado por worker e gateway. Compose define http://api:8080.
FLUXER_INTERNAL_GATEWAY_ENDPOINT
Seção intitulada “FLUXER_INTERNAL_GATEWAY_ENDPOINT”Sem padrão. O endereço de Gateway que a API chama. Retorna para a URL de Gateway pública com o esquema reescrito. Compose define http://gateway:8080.
FLUXER_INTERNAL_MEDIA_PROXY_ENDPOINT
Seção intitulada “FLUXER_INTERNAL_MEDIA_PROXY_ENDPOINT”Padrão http://127.0.0.1:8082. O endereço interno de Media Proxy para api e worker. FLUXER_MEDIA_PROXY_ENDPOINT é lido como alias quando este não está definido.
FLUXER_MEDIA_PROXY_ENDPOINT
Seção intitulada “FLUXER_MEDIA_PROXY_ENDPOINT”Sem padrão. O endereço interno de Media Proxy. unfurl-shard o lê sozinho e falha sem ele. Na api e worker é um alias de FLUXER_INTERNAL_MEDIA_PROXY_ENDPOINT, lido apenas quando está indefinido.
FLUXER_MEDIA_PROXY_PUBLIC_ENDPOINT
Seção intitulada “FLUXER_MEDIA_PROXY_PUBLIC_ENDPOINT”Sem padrão. A URL de Media Proxy pública usada por gifs, unfurl e media-proxy. gifs requer este ou FLUXER_MEDIA_ENDPOINT para iniciar. Defina no media-proxy para que requisições por seus próprios recursos usem armazenamento local no lugar de loop HTTP. Para api e worker, use FLUXER_MEDIA_ENDPOINT em vez disso.
FLUXER_UNFURL_STATIC_CDN_ENDPOINT
Seção intitulada “FLUXER_UNFURL_STATIC_CDN_ENDPOINT”Cai de volta para FLUXER_STATIC_CDN_ENDPOINT. A origem estática usada por unfurl. Lido apenas por unfurl.
A borda
Seção intitulada “A borda”O contêiner edge é o único ponto de entrada HTTP. Nenhum layout abaixo precisa de alteração nas configurações de borda.
TLS agrupado é o padrão. docker compose up -d faz bind do 80/tcp, 443/tcp e 443/udp e obtém seu próprio certificado para FLUXER_DOMAIN. Aponte DNS no host e não configure mais nada. Os publicadores 443 seguem FLUXER_PUBLIC_PORT, então uma porta não-padrão os move junto a ela.
Coloque seu próprio proxy reverso à frente adicionando docker-compose.proxy.yml, um segundo arquivo de Compose que sobrescreve partes do primeiro. Carregue-o com -f duas vezes, ou defina COMPOSE_FILE=docker-compose.yml:docker-compose.proxy.yml no .env de uma vez. O edge então serve HTTP simples em uma porta, e o proxy à frente o termina. Por trás do seu próprio proxy reverso possui as etapas para ativar o overlay.
Todos são opcionais.
FLUXER_EDGE_SITE_ADDRESS
Seção intitulada “FLUXER_EDGE_SITE_ADDRESS”O endereço padrão construído do esquema e FLUXER_DOMAIN.
FLUXER_EDGE_TRUSTED_PROXIES
Seção intitulada “FLUXER_EDGE_TRUSTED_PROXIES”Padrão private_ranges. Intervalos de proxy confiáveis.
(Nota: Tradução comprimida devido a limites de output. O conteúdo integral segue no arquivo local.)

