Skip to content

The configuration file ​

All configuration is done in one YAML file, eurion-config.yml. The template eurion-config.example.yml ships with the kit. This page goes through the template section by section.

The Default column shows what applies if the key is missing from your file. The template sometimes has a different value filled in; that is shown in the In template column when it differs.

Keys not used in 1.6.4

The template contains some keys that the installation in version 1.6.4 does not read. They are marked not used below. Changing them has no effect.

Deployment ​

KeyDefaultWhat it does
deploy_modedockerInstallation method. Use docker. The other values (kubernetes, airgapped) are not covered by this documentation.
eurion_versionlatestThe version to install. Must be the version number in the installation file, for example "1.6.4". Updates write the new version in themselves.

organization ​

KeyDefaultWhat it does
organization.nameEurionThe organisation's name. The first organisation is created with this name.
organization.domainlocalhostYour domain. Every address is built from it: app.<domain>, api.<domain> and so on.
organization.admin_emailadmin@<domain>E-mail for the first administrator account (super administrator). Also used as the contact for Let's Encrypt and as the recipient of alerts unless something else is set.
organization.country_codeSECountry code (ISO 3166-1 alpha-2).

server ​

KeyDefaultWhat it does
server.host127.0.0.1The server's own IP address (the private one if the server is behind NAT). The TURN server relays traffic through it. Give an IP address, not a host name.
server.public_ipsame as server.hostThe public IP address. The meeting server and the TURN server announce it to clients.
server.private_ip–Not used. The private address is taken from server.host.
server.ssh_user, ssh_port, ssh_key, sudo–Not used. The installation runs locally on the server.

routing ​

KeyDefaultWhat it does
routingmultimulti: one name per part (app., api., admin., meet., office., turn. under your domain). single: everything on the name in hostname.
hostname–Only with routing: single. The single name, for example eurion.example.se. The app is at /, the API at /api and /v1, the admin portal at /admin, document editing at /office, Grafana at /grafana and TURN on the same name, port 3478.
mail.hostname–Only with routing: single and features.mail. The mail server's own name, for example mail.example.se. Webmail (mail.webmail) is not available with a single name.

subdomains ​

Only applies to routing: multi.

KeyDefaultWhat it does
subdomains.appappThe app's name: app.<domain>.
subdomains.apiapiThe API's name.
subdomains.adminadminThe admin portal's name.
subdomains.meetmeetThe meetings name.
subdomains.mail–Not used.
subdomains.officeofficeNot in the template. The name for document editing.
subdomains.grafanagrafanaNot in the template. Only used with monitoring.grafana_public: true.

WARNING

Keep app, api and admin. The admin portal and sign-in rely on those names.

tls ​

KeyDefaultIn templateWhat it does
tls.methodselfsignedletsencryptletsencrypt: Traefik obtains and renews certificates automatically (HTTP validation on port 80). selfsigned: a self-signed certificate is created, and browsers show a warning.
tls.acme_emailorganization.admin_emailContact address for Let's Encrypt.
tls.resolverletsencryptThe name of Traefik's certificate resolver. Do not change.
tls.cert_path, tls.key_path–Not used. Your own certificates (method: custom) cannot be set through the configuration file in 1.6.4.

Don't forget tls.method

If the key is missing, the certificate is self-signed. Use letsencrypt for a real installation.

features ​

KeyDefaultIn templateWhat it does
features.videotrueAudio and video calls (meeting server and TURN server). Requires turn.<domain> and the ports for calls.
features.aifalsetrueAI meeting minutes and summaries with a local language model (Ollama). Needs a lot of RAM, see requirements.
features.transcriptionfalseCall transcription (Whisper).
features.bridgefalseStarts the bridge service to Microsoft 365/Teams. Not covered by this documentation.
features.searchtrueFull-text search (Meilisearch).
features.monitoringtruePrometheus, Grafana and Loki, see Monitoring.
features.mailfalseIntegrated mail server. Not covered by this documentation; contact support before you switch it on.
features.coturn–trueNot used. The TURN server follows features.video.
features.virus_scantrueClamAV scans every uploaded file (about 1.5 GB RAM). Switched off: files are served without virus scanning.
features.officefalseEdit Office documents in the browser (Collabora, 1–2 GB RAM). Requires office.<domain>.

sizing ​

KeyDefaultWhat it does
sizing.profile–Not used. The values below apply regardless of profile.
sizing.pg_shared_buffers256MBPostgreSQL shared_buffers.
sizing.pg_max_connections200PostgreSQL max_connections.
sizing.pg_work_mem16MBPostgreSQL work_mem.
sizing.pg_effective_cache_size1GBNot in the template. PostgreSQL effective_cache_size.
sizing.redis_maxmemory128mbRedis memory limit.
sizing.kafka_heap256mKafka's Java heap.
sizing.pgbouncer_pool_size20Fallback value for database.pool_size.
sizing.pgbouncer_max_clients500Fallback value for database.max_clients.

The template's commented-out examples (512MB, 32MB, 256mb, 512m) suit a server with 16 GB RAM.

Optional tuning ​

These sections are commented out in the template. Everything has working defaults.

cors ​

KeyDefaultWhat it does
cors.extra_origins[]More origins allowed to call the API, in addition to https://app., https://admin. and https://meet.<domain>. The desktop app needs http://tauri.localhost and https://tauri.localhost.

storage ​

KeyDefaultWhat it does
storage.s3_regioneu-west-1The region name the services use towards the local MinIO storage.
storage.preview_bucketeurion-previewsBucket for document previews.

identity ​

KeyDefaultWhat it does
identity.registration_openfalsetrue lets anyone create an account in the app.
identity.registration_allowed_domains[]E-mail domains that may create accounts themselves, for example ["example.se"]. If the list is filled in, it applies even when registration_open is false.
identity.jwt_access_expiry15mHow long an access token is valid.
identity.jwt_refresh_expiry7dHow long a session can be renewed without signing in again.

ai ​

Applies when features.ai is on.

KeyDefaultWhat it does
ai.ollamacontainercontainer: Ollama runs in a container. host: Ollama is installed on the server (port 11434). A URL: Ollama on another machine, for example http://10.0.0.5:11434.
ai.models["mistral:7b-instruct", "nomic-embed-text"]Models downloaded after the installation (only with ollama: container).
ai.modelmistral:7b-instructThe model for summaries.
ai.minutes_modelemptyA larger model used only for meeting minutes, for example mistral-small3.2. Empty: ai.model is used. Add it to ai.models as well.
ai.num_ctx8192Context length for the model.

transcription ​

Applies when features.transcription is on.

KeyDefaultWhat it does
transcription.whispercontainercontainer, host (Whisper server on the server, port 9300) or a URL.
transcription.modelggml-small.binModel file in /opt/eurion/data/whisper-models.
transcription.model_urlThe Hugging Face address of ggml-small.binWhere the model is downloaded from if the file is missing.
transcription.vad_model, vad_model_urlemptyOptional voice activity model, which removes silence before transcription.
transcription.threads4CPU threads for Whisper.
transcription.languageautoLanguage, for example sv or en. auto guesses.

database ​

KeyDefaultWhat it does
database.pgbouncerfalsePuts PgBouncer (connection pool) in front of PostgreSQL for every service except the gateway. Recommended from about 150 users.
database.pool_size20PgBouncer's pool size.
database.max_clients500Maximum number of client connections to PgBouncer.
database.max_db_connections50Maximum number of connections from PgBouncer to PostgreSQL.
database.pool{}Connection pool per service, for example { messaging-service: { max: 20, min: 4 } }.
database.postgres_settings{}Extra PostgreSQL settings, for example { statement_timeout: 30000 }.
database.shm_sizeemptyShared memory for the PostgreSQL container, for example 512mb.

resources ​

Memory and CPU limit per container, for example:

yaml
resources:
  gateway: { memory: 2g, cpus: 4 }
  collabora: { memory: 8g, cpus: 8 }
  ollama: { memory: 48g, cpus: 16 }

The names are the service names: gateway, identity-service, messaging-service and the other services, plus postgres, redis, kafka, pgbouncer, gotenberg, ollama, whisper, collabora and clamav. Collabora and ClamAV have a 4 GB limit by default. Without limits a single container can take all the memory. The high-memory alert only applies to containers that have a limit.

service_env ​

Extra environment variables (not secret) per service. They take precedence over the kit's own values. Only use this if Eurion support asks you to.

yaml
service_env:
  gateway: { CLUSTER_WORKERS: "4" }

mail ​

Only applies to features.mail, which is not covered here (impersonator_user, webmail, mailgun_inbound, mailgun, timezone).

monitoring ​

Applies when features.monitoring is on. See Monitoring and alerts.

KeyDefaultWhat it does
monitoring.alertingtrueAlertmanager, exporters, health checks and alert rules.
monitoring.alert_emailorganization.admin_emailWhere alerts are sent. Requires smtp to be filled in.
monitoring.grafana_publicfalsetrue: Grafana also at grafana.<domain>. Grafana is always available at admin.<domain>/grafana.

credentials ​

Not used. In 1.6.4 all passwords and keys are always generated by gen-config.py and stored in /opt/eurion/deploy/generated/group_vars/secrets.yml (readable by root only). This includes initial_admin_password. Values you write here are ignored.

The passwords are kept when the script runs again and during updates. Get a password like this:

bash
sudo grep -E '^(initial_admin_password|grafana_password):' /opt/eurion/deploy/generated/group_vars/secrets.yml

smtp ​

Outgoing e-mail for invitations, password resets, calendar invitations, notifications and alerts. See Outgoing e-mail.

KeyDefaultWhat it does
smtp.hostemptySMTP server. Empty: no e-mail is sent.
smtp.port587Port.
smtp.securefalseNot in the template. false: STARTTLS (port 587). true: TLS straight away (port 465).
smtp.useremptyUser name.
smtp.passwordemptyPassword. Stored in secrets.yml; if you remove it from the configuration file, the stored one is kept.
smtp.fromemptySender, for example Eurion <no-reply@example.se>. Always fill it in.

updates ​

See Updates.

KeyDefaultWhat it does
updates.channel_urlhttps://updates.eurion.se/stable/Where the server looks for signed versions. "": the server is offline and updates are uploaded as a file.
updates.auto_checktrueLook for new versions automatically.
updates.check_interval_hours24How often, in hours.

backup ​

Not used in 1.6.4: enabled, schedule, retention_days, s3_upload, s3_bucket and s3_endpoint. Backups are always taken every night at 02:00 and kept for 30 days, see Backups.

kubernetes ​

Only applies to deploy_mode: kubernetes, which is not covered by this documentation.

Changing the configuration after installation ​

After the installation, the copy in generated/ is the one that applies. It is also used for every update.

  1. Edit the file:

    bash
    sudo nano /opt/eurion/deploy/generated/eurion-config.yml
  2. Regenerate the settings (existing passwords are kept):

    bash
    cd /opt/eurion/deploy
    sudo python3 scripts/gen-config.py generated/eurion-config.yml generated
  3. Run the kit again:

    bash
    sudo ansible-playbook -i generated/inventory/hosts.yml ansible/site.yml \
      -e @generated/group_vars/all.yml -e @generated/group_vars/secrets.yml

Containers whose settings changed are restarted. Expect a short interruption.

Switch on a feature at the next update

If you only change generated/eurion-config.yml and do not run steps 2–3, the change takes effect at the next update.

Eurion — communication that runs on your own server.