155 lines
8.2 KiB
Bash
155 lines
8.2 KiB
Bash
# Jarvis — configuration. Copy to `.env` beside the compose file and fill in.
|
|
#
|
|
# cp .env.example .env
|
|
#
|
|
# Nothing here has a safe placeholder value: the four secrets must be generated, and the two URLs
|
|
# must be yours. The compose file refuses to start rather than booting with something wrong.
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Where your instance lives
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# The address a browser reaches Jarvis on, scheme included and no trailing slash.
|
|
#
|
|
# This is the CORS decision. It accepts exactly ONE origin — not a list — and every request from
|
|
# anywhere else is refused, which presents as a sign-in page that cannot sign in.
|
|
WEB_ORIGIN=https://jarvis.example.com
|
|
|
|
# The address enrolled machines dial. Defaults to WEB_ORIGIN, which is right for a single-origin
|
|
# deployment. Set it separately only if the app and the API answer on different hostnames.
|
|
#PUBLIC_URL=https://jarvis.example.com
|
|
|
|
# Host port the web container publishes. Put your TLS terminator in front of it.
|
|
JARVIS_PORT=8080
|
|
|
|
# How many proxies rewrite X-Forwarded-For before a request reaches the API.
|
|
#
|
|
# One is the web container's own nginx, which is always there. So: 1 if nothing else fronts it, 2 if
|
|
# your own reverse proxy does — which is the usual case and the default. Raising it is the dangerous
|
|
# direction, because the API then trusts that many hops of a header the client can forge, and a caller
|
|
# can choose the address that lands in the audit log and in the session list.
|
|
TRUST_PROXY_HOPS=2
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Secrets — generate every one of these, never copy them from anywhere
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Postgres. Only ever used inside the compose network.
|
|
# openssl rand -base64 24
|
|
POSTGRES_PASSWORD=
|
|
|
|
# Session signing. Two different values, at least 16 characters each.
|
|
# openssl rand -base64 48
|
|
JWT_ACCESS_SECRET=
|
|
JWT_REFRESH_SECRET=
|
|
|
|
# THE ONE YOU CANNOT LOSE.
|
|
#
|
|
# Must decode to exactly 32 bytes:
|
|
# openssl rand -base64 32
|
|
#
|
|
# Every credential in the vault — SSH keys, API secrets, Microsoft 365 client secrets — is encrypted
|
|
# under this key with AES-256-GCM, and so is everything Jarvis seals OUTSIDE the vault: the Microsoft
|
|
# Graph client secret it sends its own mail with, this instance's licence identity key, every
|
|
# authenticator-app secret, and every terminal recording. It is not stored anywhere but here.
|
|
#
|
|
# Change it or lose it and none of that data can be read again, by you or by anyone. A database backup
|
|
# does not save you: the backup holds the ciphertext. Back this value up separately from the database,
|
|
# somewhere you would still have it if this host were gone. An instance whose key has changed keeps
|
|
# LOOKING configured — the rows are all there — and fails on every reveal.
|
|
VAULT_MASTER_KEY=
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# The model
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Any OpenAI-compatible endpoint: OpenAI, a self-hosted gateway, a local server.
|
|
#OPENAI_BASE_URL=https://api.openai.com/v1
|
|
|
|
# Required. Jarvis will not start without it.
|
|
OPENAI_API_KEY=
|
|
|
|
# Must be a model your endpoint actually serves, and it should be a good one — this model is deciding
|
|
# what to run on production infrastructure.
|
|
#OPENAI_MODEL=gpt-4o
|
|
|
|
# minimal | low | medium | high. Higher costs latency and tokens and is worth it for real work.
|
|
#OPENAI_THINKING_LEVEL=medium
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Channels and pinning (optional, recommended in production)
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Every image tracks the `stable` channel unless you set these, so `docker compose pull && up -d`
|
|
# upgrades you to whatever has most recently been promoted. `stable` moves only after a build has
|
|
# run on the publisher's own instance; `dev` moves on every build and nothing has tried it yet.
|
|
# `latest` is a second name for `stable`, kept so nothing that already used it has to change.
|
|
#
|
|
# Which channel you are on is yours to state, because nothing in the image knows it — a channel is
|
|
# decided after a build and moves afterwards. Set it and the app shows it beside the version
|
|
# numbers; leave it empty if you pin below, because then you follow no channel.
|
|
#JARVIS_CHANNEL=stable
|
|
|
|
# Pinning makes an upgrade a decision instead of a side effect of pulling. The app reports its real
|
|
# version either way — a channel tag is a second name on the same image, not a build that forgot
|
|
# its number.
|
|
#
|
|
# THERE IS NO EXAMPLE NUMBER HERE ON PURPOSE. Pin the version you are ALREADY RUNNING, which the app
|
|
# footer shows as `web … · api …`. Nothing in the publishing path bumps a number written into this
|
|
# file, so any number printed here is one that went stale while nobody was looking — and moving the
|
|
# api pin BACKWARDS runs an old build against a schema that has already been migrated forward.
|
|
#JARVIS_IMAGE_API=git.luxit.be/luxit/jarvis-api:<the api version in your footer>
|
|
#JARVIS_IMAGE_WEB=git.luxit.be/luxit/jarvis-web:<the web version in your footer>
|
|
|
|
# Only read when the agent overlay is enabled, just below. Its version is the AGENT's, and moves
|
|
# independently of the two above — a Jarvis release usually does not change the agent at all.
|
|
#
|
|
# PIN THIS ONE FIRST if you pin only one. The two above change what your own server runs; this one
|
|
# changes what runs on every machine you administer. Pinning it decides which build your instance
|
|
# publishes; a separate UPDATE POLICY decides when a machine takes it, and its default is "let the
|
|
# agent decide" — which in practice means the next time its service starts. Set that policy
|
|
# instance-wide under Settings → Platform → General, per organization under Settings → Organization →
|
|
# Agent updates. An enrolled agent also refuses any version that is not strictly newer, so moving
|
|
# this back stops a rollout rather than reversing it on machines that already took the update.
|
|
#
|
|
# The app footer does not carry this number. Each enrolled machine reports the build it runs, on the
|
|
# Agents page — that is the one to pin.
|
|
#JARVIS_IMAGE_AGENT=git.luxit.be/luxit/jarvis-agent-dist:<version>
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# The Jarvis agent (optional)
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Enrolling a machine downloads a compiled binary, which the api serves from a directory it can
|
|
# only read. `docker-compose.agent.yml` supplies that directory as a pullable image, so the release
|
|
# arrives the same way the rest of the stack does. Uncomment this and every later `docker compose`
|
|
# command picks up both files with no extra flags:
|
|
#
|
|
#COMPOSE_FILE=docker-compose.yml:docker-compose.agent.yml
|
|
#
|
|
# Leaving it off is a supported state, not a broken one: everything except the agent works, and the
|
|
# installer answers 503 saying no build is published. The SSH, Proxmox, Microsoft 365 and MikroTik
|
|
# connectors all reach machines without it.
|
|
#
|
|
# AGENT_RELEASE_DIR is set by that overlay and should NOT be set here — a value in this file would
|
|
# point the api at a path nothing populates, turning the honest 503 into a 404 per platform.
|
|
|
|
#AGENT_HEARTBEAT_INTERVAL_SEC=30
|
|
#RUN_SHUTDOWN_GRACE_SEC=25
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Licence (required to create anything)
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Your licence key. REQUIRED to create anything new. Ask antoine@luxit.be for one.
|
|
#
|
|
# Without it, an instance keeps running everything already set up and refuses to create new
|
|
# organizations, users, agents and assets — so an existing deployment does not stop working when
|
|
# this reaches it, and a fresh install gets as far as its first administrator and then needs a key.
|
|
# An unlicensed instance also contacts nobody at all. See the README for exactly what a licensed one
|
|
# reports.
|
|
#
|
|
# This value SEEDS the database on first boot and does not govern it afterwards: a renewal arrives
|
|
# through the check-in and is stored, so leaving an old key here cannot roll you back.
|
|
#JARVIS_LICENSE_KEY=
|