Docker, Docker-AIO: one .env example per compose file
CI / Test (ubuntu-latest) (push) Canceled after 0s
CI / Test (windows-latest) (push) Canceled after 0s
CI / Storage tests on PostgreSQL (push) Canceled after 0s
CI / Complement (federation off) (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
CI / Smoke test the binary (push) Canceled after 0s
CI / Admin panel (push) Canceled after 0s
CI / Web client (push) Canceled after 0s
CI / Desktop client (ubuntu-24.04) (push) Canceled after 0s
CI / Desktop client (windows-latest) (push) Canceled after 0s

Replace each folder's shared .env.example with one example per compose
file, named after it (docker-compose.<name>.yml takes
.env.<name>.example), as DriverVault does. Each lists only the settings
its compose file uses, names the required ones in its header, and the
prod examples start from a public server name. Every variable a compose
file substitutes is defined in its example.

The compose headers point at their own example. The SeaweedFS files now
fix WARP_PB_S3_REGION at us-east-1 instead of reading it from .env,
since SeaweedFS ignores the region.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
tajniak81andClaude Opus 5.5 committed 2026-10-22 21:00:44 +02:00
1 parent 39583a9db0
commit 66e48712c7
50 files changed
+3911 -167

No files matched your search

+171
View File
@@ -0,0 +1,171 @@
# Settings for docker-compose.pocketbase.yml:
# the homeserver on PocketBase, the admin panel and the web client, in
# one container.
#
# cp .env.pocketbase.example .env # then edit it
# docker compose -f docker-compose.pocketbase.yml up -d --build
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the image or the compose file, not here: the database driver and
# connection string, the listen addresses and the paths inside /data.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# ------------------------------------------------------------------- aio
# false runs the container without the admin panel or the web client.
WARP_AIO_ADMIN=true
WARP_AIO_WEB=true
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=localhost
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=http://localhost:8008
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# Media in an S3 bucket instead of pb_data/storage. Bucket, region,
# endpoint and keys are all required when it is on, and the bucket must
# exist. For a bucket set up for you, use the pocketbase.s3 or
# pocketbase.seaweedfs files. Media stored before S3 was on is not moved.
WARP_PB_S3_ENABLED=false
WARP_PB_S3_BUCKET=
WARP_PB_S3_REGION=
WARP_PB_S3_ENDPOINT=
WARP_PB_S3_ACCESS_KEY=
WARP_PB_S3_SECRET=
WARP_PB_S3_FORCE_PATH_STYLE=false
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
+176
View File
@@ -0,0 +1,176 @@
# Settings for docker-compose.pocketbase.prod.yml:
# the homeserver on PocketBase, the admin panel and the web client, in
# one container.
#
# cp .env.pocketbase.prod.example .env # then edit it
# docker compose -f docker-compose.pocketbase.prod.yml up -d
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the image or the compose file, not here: the database driver and
# connection string, the listen addresses and the paths inside /data.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# The image is pulled from $WARP_REGISTRY/warp-aio-pocketbase at this tag.
# Pin a release in production.
WARP_REGISTRY=ghcr.io/dariuszjaniak
WARP_VERSION=latest
# ------------------------------------------------------------------- aio
# false runs the container without the admin panel or the web client.
WARP_AIO_ADMIN=true
WARP_AIO_WEB=true
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=matrix.example.org
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=https://matrix.example.org
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# Media in an S3 bucket instead of pb_data/storage. Bucket, region,
# endpoint and keys are all required when it is on, and the bucket must
# exist. For a bucket set up for you, use the pocketbase.s3 or
# pocketbase.seaweedfs files. Media stored before S3 was on is not moved.
WARP_PB_S3_ENABLED=false
WARP_PB_S3_BUCKET=
WARP_PB_S3_REGION=
WARP_PB_S3_ENDPOINT=
WARP_PB_S3_ACCESS_KEY=
WARP_PB_S3_SECRET=
WARP_PB_S3_FORCE_PATH_STYLE=false
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
+177
View File
@@ -0,0 +1,177 @@
# Settings for docker-compose.pocketbase.s3.yml:
# the homeserver on PocketBase with media in an S3 bucket elsewhere, the
# admin panel and the web client, in one container.
#
# cp .env.pocketbase.s3.example .env # then edit it
# docker compose -f docker-compose.pocketbase.s3.yml up -d --build
#
# Required, with no default: WARP_PB_S3_ENDPOINT, WARP_PB_S3_ACCESS_KEY
# and WARP_PB_S3_SECRET.
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the image or the compose file, not here: the database driver and
# connection string, the listen addresses and the paths inside /data.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# ------------------------------------------------------------------- aio
# false runs the container without the admin panel or the web client.
WARP_AIO_ADMIN=true
WARP_AIO_WEB=true
# ------------------------------------------------------------- media (S3)
# Media goes to this bucket; the database stays in /data/pb_data. The bucket
# must already exist: nothing here runs a gateway or creates it. For a
# gateway on the Docker host, use http://host.docker.internal:8333. Media
# stored before S3 was on is not moved into the bucket.
WARP_PB_S3_ENDPOINT=
WARP_PB_S3_BUCKET=warp
WARP_PB_S3_ACCESS_KEY=
WARP_PB_S3_SECRET=
# SeaweedFS and MinIO ignore the region; the client insists on one.
WARP_PB_S3_REGION=us-east-1
# true for SeaweedFS and MinIO, false for AWS S3 proper.
WARP_PB_S3_FORCE_PATH_STYLE=true
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=localhost
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=http://localhost:8008
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
+182
View File
@@ -0,0 +1,182 @@
# Settings for docker-compose.pocketbase.s3.prod.yml:
# the homeserver on PocketBase with media in an S3 bucket elsewhere, the
# admin panel and the web client, in one container.
#
# cp .env.pocketbase.s3.prod.example .env # then edit it
# docker compose -f docker-compose.pocketbase.s3.prod.yml up -d
#
# Required, with no default: WARP_PB_S3_ENDPOINT, WARP_PB_S3_ACCESS_KEY
# and WARP_PB_S3_SECRET.
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the image or the compose file, not here: the database driver and
# connection string, the listen addresses and the paths inside /data.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# The image is pulled from $WARP_REGISTRY/warp-aio-pocketbase-s3 at this tag.
# Pin a release in production.
WARP_REGISTRY=ghcr.io/dariuszjaniak
WARP_VERSION=latest
# ------------------------------------------------------------------- aio
# false runs the container without the admin panel or the web client.
WARP_AIO_ADMIN=true
WARP_AIO_WEB=true
# ------------------------------------------------------------- media (S3)
# Media goes to this bucket; the database stays in /data/pb_data. The bucket
# must already exist: nothing here runs a gateway or creates it. For a
# gateway on the Docker host, use http://host.docker.internal:8333. Media
# stored before S3 was on is not moved into the bucket.
WARP_PB_S3_ENDPOINT=
WARP_PB_S3_BUCKET=warp
WARP_PB_S3_ACCESS_KEY=
WARP_PB_S3_SECRET=
# SeaweedFS and MinIO ignore the region; the client insists on one.
WARP_PB_S3_REGION=us-east-1
# true for SeaweedFS and MinIO, false for AWS S3 proper.
WARP_PB_S3_FORCE_PATH_STYLE=true
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=matrix.example.org
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=https://matrix.example.org
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
@@ -0,0 +1,181 @@
# Settings for docker-compose.pocketbase.seaweedfs.yml:
# the homeserver on PocketBase, the admin panel, the web client and
# SeaweedFS for media, in one container.
#
# cp .env.pocketbase.seaweedfs.example .env # then edit it
# docker compose -f docker-compose.pocketbase.seaweedfs.yml up -d --build
#
# Required, with no default: WARP_PB_S3_ACCESS_KEY and WARP_PB_S3_SECRET.
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the image or the compose file, not here: the database driver and
# connection string, the listen addresses and the paths inside /data.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# ------------------------------------------------------------------- aio
# false runs the container without the admin panel or the web client.
WARP_AIO_ADMIN=true
WARP_AIO_WEB=true
# -------------------------------------------------------------- seaweedfs
# Media goes to this bucket in SeaweedFS, created on start; the database
# stays in /data/pb_data. The key pair is the homeserver's S3 identity:
# the gateway's only one, and what the homeserver signs with.
# Media stored before S3 was on is not moved into the bucket.
WARP_PB_S3_BUCKET=warp
WARP_PB_S3_ACCESS_KEY=
WARP_PB_S3_SECRET=
# The S3 gateway's host port, on loopback unless the bind address says
# otherwise. The homeserver does not need it; it is for aws-cli and the
# like.
SEAWEED_S3_BIND=127.0.0.1
SEAWEED_S3_PORT=8333
# Building only: the SeaweedFS release to bake in. Leave it commented out
# to keep the Dockerfile's pin; an empty value breaks the build.
# SEAWEED_VERSION=4.45
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=localhost
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=http://localhost:8008
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
@@ -0,0 +1,182 @@
# Settings for docker-compose.pocketbase.seaweedfs.prod.yml:
# the homeserver on PocketBase, the admin panel, the web client and
# SeaweedFS for media, in one container.
#
# cp .env.pocketbase.seaweedfs.prod.example .env # then edit it
# docker compose -f docker-compose.pocketbase.seaweedfs.prod.yml up -d
#
# Required, with no default: WARP_PB_S3_ACCESS_KEY and WARP_PB_S3_SECRET.
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the image or the compose file, not here: the database driver and
# connection string, the listen addresses and the paths inside /data.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# The image is pulled from $WARP_REGISTRY/warp-aio-pocketbase-seaweedfs at this tag.
# Pin a release in production.
WARP_REGISTRY=ghcr.io/dariuszjaniak
WARP_VERSION=latest
# ------------------------------------------------------------------- aio
# false runs the container without the admin panel or the web client.
WARP_AIO_ADMIN=true
WARP_AIO_WEB=true
# -------------------------------------------------------------- seaweedfs
# Media goes to this bucket in SeaweedFS, created on start; the database
# stays in /data/pb_data. The key pair is the homeserver's S3 identity:
# the gateway's only one, and what the homeserver signs with.
# Media stored before S3 was on is not moved into the bucket.
WARP_PB_S3_BUCKET=warp
WARP_PB_S3_ACCESS_KEY=
WARP_PB_S3_SECRET=
# The S3 gateway's host port, on loopback unless the bind address says
# otherwise. The homeserver does not need it; it is for aws-cli and the
# like.
SEAWEED_S3_BIND=127.0.0.1
SEAWEED_S3_PORT=8333
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=matrix.example.org
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=https://matrix.example.org
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
@@ -1,18 +1,20 @@
# Settings for every compose file in this folder.
# Settings for docker-compose.pocketbase.seaweedfs.split.yml:
# the homeserver on PocketBase, the admin panel, the web client and
# SeaweedFS split into its roles, for media, in one container.
#
# cp .env.example .env
# cp .env.pocketbase.seaweedfs.split.example .env # then edit it
# docker compose -f docker-compose.pocketbase.seaweedfs.split.yml up -d --build
#
# then edit .env. Compose reads it for the ports and the registry, and
# hands all of it to the container, so anything below takes effect on the
# next `docker compose ... up -d`.
# Required, with no default: WARP_PB_S3_ACCESS_KEY, WARP_PB_S3_SECRET and
# SEAWEED_ADMIN_PASSWORD.
#
# An empty value means the built-in default, given in the comment above it.
# Every homeserver setting is described in docs/configuration.md.
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the image, not here: the database driver and connection string
# (each Dockerfile is one database), the listen addresses, the signing key
# and media paths inside /data, the address the admin panel and web client
# reach the homeserver on, and whether the bundled PostgreSQL runs.
# Set by the image or the compose file, not here: the database driver and
# connection string, the listen addresses and the paths inside /data.
# ---------------------------------------------------------------- compose
@@ -21,32 +23,32 @@ WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# The *.prod.yml files pull $WARP_REGISTRY/warp-aio (SQLite),
# warp-aio-pocketbase or warp-aio-postgresql at this tag. Pin a release in
# production.
WARP_REGISTRY=ghcr.io/dariuszjaniak
WARP_VERSION=latest
# ------------------------------------------------------------------- aio
# false runs the container without the admin panel or the web client.
WARP_AIO_ADMIN=true
WARP_AIO_WEB=true
# ------------------------------------------------------------- seaweedfs
# -------------------------------------------------------------- seaweedfs
# Media goes to this bucket in SeaweedFS, created on start; the database
# stays in /data/pb_data. The key pair is the homeserver's S3 identity:
# written into the filer's IAM store on every start, beside any identity
# added in the admin UI, so a new secret here lands on the next start.
# Media stored before S3 was on is not moved into the bucket.
WARP_PB_S3_BUCKET=warp
WARP_PB_S3_ACCESS_KEY=
WARP_PB_S3_SECRET=
# docker-compose.pocketbase.seaweedfs*.yml only; set WARP_PB_S3_ACCESS_KEY
# and WARP_PB_S3_SECRET below as well.
#
# The S3 gateway's host port, on loopback unless the bind address says
# otherwise. The homeserver reaches it inside the container; this is for
# aws-cli and the like.
# otherwise. The homeserver does not need it; it is for aws-cli and the
# like.
SEAWEED_S3_BIND=127.0.0.1
SEAWEED_S3_PORT=8333
# The split file only: SeaweedFS's admin UI. It can mint credentials for
# the bucket, so the password is required. Put it behind a reverse proxy
# before binding it to 0.0.0.0. The read-only login is optional.
# SeaweedFS's admin UI. It can mint credentials for the bucket, so the
# password is required. Put it behind a reverse proxy before binding it
# to 0.0.0.0. The read-only login is optional.
SEAWEED_ADMIN_BIND=127.0.0.1
SEAWEED_ADMIN_PORT=23646
SEAWEED_ADMIN_USER=admin
@@ -54,8 +56,8 @@ SEAWEED_ADMIN_PASSWORD=
SEAWEED_ADMIN_READONLY_USER=
SEAWEED_ADMIN_READONLY_PASSWORD=
# Building only: the SeaweedFS release to bake in. Leave it commented out to
# keep the Dockerfile's pin; an empty value breaks the build.
# Building only: the SeaweedFS release to bake in. Leave it commented out
# to keep the Dockerfile's pin; an empty value breaks the build.
# SEAWEED_VERSION=4.45
# ------------------------------------------------------------ homeserver
@@ -105,34 +107,9 @@ WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Database pool (PostgreSQL). Defaults 10, 5, 1h, true.
WARP_DB_MAX_OPEN_CONNS=
WARP_DB_MAX_IDLE_CONNS=
WARP_DB_CONN_MAX_LIFETIME=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# docker-compose.pocketbase*.yml only: keep media in an S3 bucket instead
# of pb_data/storage. Bucket, region, endpoint and keys are all required
# when it is on.
#
# The pocketbase.seaweedfs files turn it on themselves, against the
# SeaweedFS in the container; there only the access key and secret are
# needed (required: they are the gateway's credentials too), and the bucket
# defaults to warp.
#
# The pocketbase.s3 files turn it on against a bucket elsewhere: the
# endpoint, access key and secret are required, the bucket (default warp)
# must exist, the region defaults to us-east-1 and path style to true
# (SeaweedFS, MinIO; set false for AWS S3). For a gateway on the Docker
# host, use http://host.docker.internal:8333.
WARP_PB_S3_ENABLED=false
WARP_PB_S3_BUCKET=
WARP_PB_S3_REGION=
WARP_PB_S3_ENDPOINT=
WARP_PB_S3_ACCESS_KEY=
WARP_PB_S3_SECRET=
WARP_PB_S3_FORCE_PATH_STYLE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
@@ -199,6 +176,7 @@ WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
@@ -0,0 +1,194 @@
# Settings for docker-compose.pocketbase.seaweedfs.split.prod.yml:
# the homeserver on PocketBase, the admin panel, the web client and
# SeaweedFS split into its roles, for media, in one container.
#
# cp .env.pocketbase.seaweedfs.split.prod.example .env # then edit it
# docker compose -f docker-compose.pocketbase.seaweedfs.split.prod.yml up -d
#
# Required, with no default: WARP_PB_S3_ACCESS_KEY, WARP_PB_S3_SECRET and
# SEAWEED_ADMIN_PASSWORD.
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the image or the compose file, not here: the database driver and
# connection string, the listen addresses and the paths inside /data.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# The image is pulled from $WARP_REGISTRY/warp-aio-pocketbase-seaweedfs-split at this tag.
# Pin a release in production.
WARP_REGISTRY=ghcr.io/dariuszjaniak
WARP_VERSION=latest
# ------------------------------------------------------------------- aio
# false runs the container without the admin panel or the web client.
WARP_AIO_ADMIN=true
WARP_AIO_WEB=true
# -------------------------------------------------------------- seaweedfs
# Media goes to this bucket in SeaweedFS, created on start; the database
# stays in /data/pb_data. The key pair is the homeserver's S3 identity:
# written into the filer's IAM store on every start, beside any identity
# added in the admin UI, so a new secret here lands on the next start.
# Media stored before S3 was on is not moved into the bucket.
WARP_PB_S3_BUCKET=warp
WARP_PB_S3_ACCESS_KEY=
WARP_PB_S3_SECRET=
# The S3 gateway's host port, on loopback unless the bind address says
# otherwise. The homeserver does not need it; it is for aws-cli and the
# like.
SEAWEED_S3_BIND=127.0.0.1
SEAWEED_S3_PORT=8333
# SeaweedFS's admin UI. It can mint credentials for the bucket, so the
# password is required. Put it behind a reverse proxy before binding it
# to 0.0.0.0. The read-only login is optional.
SEAWEED_ADMIN_BIND=127.0.0.1
SEAWEED_ADMIN_PORT=23646
SEAWEED_ADMIN_USER=admin
SEAWEED_ADMIN_PASSWORD=
SEAWEED_ADMIN_READONLY_USER=
SEAWEED_ADMIN_READONLY_PASSWORD=
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=matrix.example.org
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=https://matrix.example.org
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
+162
View File
@@ -0,0 +1,162 @@
# Settings for docker-compose.postgresql.yml:
# the homeserver, the admin panel, the web client and PostgreSQL in one
# container.
#
# cp .env.postgresql.example .env # then edit it
# docker compose -f docker-compose.postgresql.yml up -d --build
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the image or the compose file, not here: the database driver and
# connection string, the listen addresses and the paths inside /data.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# ------------------------------------------------------------------- aio
# false runs the container without the admin panel or the web client.
WARP_AIO_ADMIN=true
WARP_AIO_WEB=true
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=localhost
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=http://localhost:8008
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Database pool (PostgreSQL). Defaults 10, 5, 1h, true.
WARP_DB_MAX_OPEN_CONNS=
WARP_DB_MAX_IDLE_CONNS=
WARP_DB_CONN_MAX_LIFETIME=
WARP_DB_AUTO_MIGRATE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
+167
View File
@@ -0,0 +1,167 @@
# Settings for docker-compose.postgresql.prod.yml:
# the homeserver, the admin panel, the web client and PostgreSQL in one
# container.
#
# cp .env.postgresql.prod.example .env # then edit it
# docker compose -f docker-compose.postgresql.prod.yml up -d
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the image or the compose file, not here: the database driver and
# connection string, the listen addresses and the paths inside /data.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# The image is pulled from $WARP_REGISTRY/warp-aio-postgresql at this tag.
# Pin a release in production.
WARP_REGISTRY=ghcr.io/dariuszjaniak
WARP_VERSION=latest
# ------------------------------------------------------------------- aio
# false runs the container without the admin panel or the web client.
WARP_AIO_ADMIN=true
WARP_AIO_WEB=true
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=matrix.example.org
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=https://matrix.example.org
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Database pool (PostgreSQL). Defaults 10, 5, 1h, true.
WARP_DB_MAX_OPEN_CONNS=
WARP_DB_MAX_IDLE_CONNS=
WARP_DB_CONN_MAX_LIFETIME=
WARP_DB_AUTO_MIGRATE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
+159
View File
@@ -0,0 +1,159 @@
# Settings for docker-compose.sqlite.yml:
# the homeserver on SQLite, the admin panel and the web client, in one
# container.
#
# cp .env.sqlite.example .env # then edit it
# docker compose -f docker-compose.sqlite.yml up -d --build
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the image or the compose file, not here: the database driver and
# connection string, the listen addresses and the paths inside /data.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# ------------------------------------------------------------------- aio
# false runs the container without the admin panel or the web client.
WARP_AIO_ADMIN=true
WARP_AIO_WEB=true
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=localhost
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=http://localhost:8008
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
+164
View File
@@ -0,0 +1,164 @@
# Settings for docker-compose.sqlite.prod.yml:
# the homeserver on SQLite, the admin panel and the web client, in one
# container.
#
# cp .env.sqlite.prod.example .env # then edit it
# docker compose -f docker-compose.sqlite.prod.yml up -d
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the image or the compose file, not here: the database driver and
# connection string, the listen addresses and the paths inside /data.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# The image is pulled from $WARP_REGISTRY/warp-aio at this tag.
# Pin a release in production.
WARP_REGISTRY=ghcr.io/dariuszjaniak
WARP_VERSION=latest
# ------------------------------------------------------------------- aio
# false runs the container without the admin panel or the web client.
WARP_AIO_ADMIN=true
WARP_AIO_WEB=true
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=matrix.example.org
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=https://matrix.example.org
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
+12 -9
View File
@@ -30,7 +30,7 @@ SeaweedFS images add `seaweed-data` on `/seaweed/data` (and the split one
```sh
cd Docker-AIO
cp .env.example .env # then edit it
cp .env.sqlite.example .env # then edit it
docker compose -f docker-compose.sqlite.yml up -d --build
docker compose -f docker-compose.sqlite.yml exec warp warp create-account --username admin --admin
```
@@ -54,8 +54,8 @@ exists: AWS, MinIO, or a SeaweedFS on another host. Nothing in the
container runs a gateway or creates the bucket.
```sh
cp .env.example .env # set WARP_PB_S3_ENDPOINT, WARP_PB_S3_ACCESS_KEY,
# WARP_PB_S3_SECRET (and WARP_PB_S3_BUCKET)
cp .env.pocketbase.s3.example .env # set WARP_PB_S3_ENDPOINT, WARP_PB_S3_ACCESS_KEY,
# WARP_PB_S3_SECRET (and WARP_PB_S3_BUCKET)
docker compose -f docker-compose.pocketbase.s3.yml up -d --build
```
@@ -74,8 +74,7 @@ SeaweedFS inside the same container. The compose files point the
homeserver at it; `.env` only has to give it credentials:
```sh
cp .env.example .env # set WARP_PB_S3_ACCESS_KEY, WARP_PB_S3_SECRET
# (and SEAWEED_ADMIN_PASSWORD for split)
cp .env.pocketbase.seaweedfs.example .env # set WARP_PB_S3_ACCESS_KEY, WARP_PB_S3_SECRET
docker compose -f docker-compose.pocketbase.seaweedfs.yml up -d --build
```
@@ -107,10 +106,14 @@ across first. The SeaweedFS release is pinned in the Dockerfiles
## Settings
Every setting is in `.env`, copied from [`.env.example`](.env.example),
which lists them all with their defaults; an empty value means the
default. `.env` is not committed. On top of the settings of
[Docker/](../Docker/README.md), it has:
Every compose file has its own settings file, named after it:
`docker-compose.<name>.yml` takes `.env.<name>.example`, so
`docker-compose.pocketbase.seaweedfs.split.yml` takes
`.env.pocketbase.seaweedfs.split.example`. Each lists only the settings
its compose file uses, with their defaults, and names the ones that are
required; an empty value means the default. Copy the one you need to
`.env`. `.env` is not committed. On top of the settings of
[Docker/](../Docker/README.md), they have:
| Variable | Default | |
| --- | --- | --- |
@@ -2,7 +2,7 @@
# web client in one container, pulled from a registry.
#
# cd Docker-AIO
# cp .env.example .env # then edit it
# cp .env.pocketbase.prod.example .env # then edit it
# docker compose -f docker-compose.pocketbase.prod.yml up -d
#
# PocketBase is embedded in the homeserver (the pocketbase database driver):
@@ -3,8 +3,7 @@
# from a registry (the image is built from Dockerfile.PocketBase.s3).
#
# cd Docker-AIO
# cp .env.example .env # then edit it; set WARP_PB_S3_ENDPOINT,
# # WARP_PB_S3_ACCESS_KEY and WARP_PB_S3_SECRET
# cp .env.pocketbase.s3.prod.example .env # then edit it
# docker compose -f docker-compose.pocketbase.s3.prod.yml up -d
#
# The database stays in /data/pb_data (warp-data); media goes to the bucket
+1 -2
View File
@@ -3,8 +3,7 @@
# this checkout (Dockerfile.PocketBase.s3).
#
# cd Docker-AIO
# cp .env.example .env # then edit it; set WARP_PB_S3_ENDPOINT,
# # WARP_PB_S3_ACCESS_KEY and WARP_PB_S3_SECRET
# cp .env.pocketbase.s3.example .env # then edit it
# docker compose -f docker-compose.pocketbase.s3.yml up -d --build
#
# The database stays in /data/pb_data (warp-data); media goes to the bucket
@@ -4,8 +4,7 @@
# Dockerfile.PocketBase.SeaweedFS).
#
# cd Docker-AIO
# cp .env.example .env # then edit it; set WARP_PB_S3_ACCESS_KEY
# # and WARP_PB_S3_SECRET
# cp .env.pocketbase.seaweedfs.prod.example .env # then edit it
# docker compose -f docker-compose.pocketbase.seaweedfs.prod.yml up -d
#
# The database stays in /data/pb_data (warp-data); media goes to the bucket
@@ -45,7 +44,7 @@ services:
WARP_PB_S3_ENABLED: "true"
WARP_PB_S3_ENDPOINT: http://127.0.0.1:8333
WARP_PB_S3_BUCKET: ${WARP_PB_S3_BUCKET:-warp}
WARP_PB_S3_REGION: ${WARP_PB_S3_REGION:-us-east-1}
WARP_PB_S3_REGION: us-east-1 # SeaweedFS ignores it; the client wants one
WARP_PB_S3_FORCE_PATH_STYLE: "true"
# The gateway's only identity, and what the homeserver signs with.
WARP_PB_S3_ACCESS_KEY: ${WARP_PB_S3_ACCESS_KEY:?set WARP_PB_S3_ACCESS_KEY in .env}
@@ -4,8 +4,7 @@
# a registry (the image is built from Dockerfile.PocketBase.SeaweedFS.split).
#
# cd Docker-AIO
# cp .env.example .env # then edit it; set WARP_PB_S3_ACCESS_KEY,
# # WARP_PB_S3_SECRET and SEAWEED_ADMIN_PASSWORD
# cp .env.pocketbase.seaweedfs.split.prod.example .env # then edit it
# docker compose -f docker-compose.pocketbase.seaweedfs.split.prod.yml up -d
#
# The database stays in /data/pb_data (warp-data); media goes to the bucket
@@ -47,7 +46,7 @@ services:
WARP_PB_S3_ENABLED: "true"
WARP_PB_S3_ENDPOINT: http://127.0.0.1:8333
WARP_PB_S3_BUCKET: ${WARP_PB_S3_BUCKET:-warp}
WARP_PB_S3_REGION: ${WARP_PB_S3_REGION:-us-east-1}
WARP_PB_S3_REGION: us-east-1 # SeaweedFS ignores it; the client wants one
WARP_PB_S3_FORCE_PATH_STYLE: "true"
# The homeserver's identity in SeaweedFS, and what it signs with.
WARP_PB_S3_ACCESS_KEY: ${WARP_PB_S3_ACCESS_KEY:?set WARP_PB_S3_ACCESS_KEY in .env}
@@ -4,8 +4,7 @@
# this checkout (Dockerfile.PocketBase.SeaweedFS.split).
#
# cd Docker-AIO
# cp .env.example .env # then edit it; set WARP_PB_S3_ACCESS_KEY,
# # WARP_PB_S3_SECRET and SEAWEED_ADMIN_PASSWORD
# cp .env.pocketbase.seaweedfs.split.example .env # then edit it
# docker compose -f docker-compose.pocketbase.seaweedfs.split.yml up -d --build
#
# The database stays in /data/pb_data (warp-data); media goes to the bucket
@@ -46,7 +45,7 @@ services:
WARP_PB_S3_ENABLED: "true"
WARP_PB_S3_ENDPOINT: http://127.0.0.1:8333
WARP_PB_S3_BUCKET: ${WARP_PB_S3_BUCKET:-warp}
WARP_PB_S3_REGION: ${WARP_PB_S3_REGION:-us-east-1}
WARP_PB_S3_REGION: us-east-1 # SeaweedFS ignores it; the client wants one
WARP_PB_S3_FORCE_PATH_STYLE: "true"
# The homeserver's identity in SeaweedFS, and what it signs with.
WARP_PB_S3_ACCESS_KEY: ${WARP_PB_S3_ACCESS_KEY:?set WARP_PB_S3_ACCESS_KEY in .env}
@@ -3,8 +3,7 @@
# container built from this checkout (Dockerfile.PocketBase.SeaweedFS).
#
# cd Docker-AIO
# cp .env.example .env # then edit it; set WARP_PB_S3_ACCESS_KEY
# # and WARP_PB_S3_SECRET
# cp .env.pocketbase.seaweedfs.example .env # then edit it
# docker compose -f docker-compose.pocketbase.seaweedfs.yml up -d --build
#
# The database stays in /data/pb_data (warp-data); media goes to the bucket
@@ -43,7 +42,7 @@ services:
WARP_PB_S3_ENABLED: "true"
WARP_PB_S3_ENDPOINT: http://127.0.0.1:8333
WARP_PB_S3_BUCKET: ${WARP_PB_S3_BUCKET:-warp}
WARP_PB_S3_REGION: ${WARP_PB_S3_REGION:-us-east-1}
WARP_PB_S3_REGION: us-east-1 # SeaweedFS ignores it; the client wants one
WARP_PB_S3_FORCE_PATH_STYLE: "true"
# The gateway's only identity, and what the homeserver signs with.
WARP_PB_S3_ACCESS_KEY: ${WARP_PB_S3_ACCESS_KEY:?set WARP_PB_S3_ACCESS_KEY in .env}
+1 -1
View File
@@ -2,7 +2,7 @@
# web client in one container, built from this checkout.
#
# cd Docker-AIO
# cp .env.example .env # then edit it
# cp .env.pocketbase.example .env # then edit it
# docker compose -f docker-compose.pocketbase.yml up -d --build
#
# PocketBase is embedded in the homeserver (the pocketbase database driver):
@@ -2,7 +2,7 @@
# client and PostgreSQL in one container, pulled from a registry.
#
# cd Docker-AIO
# cp .env.example .env # then edit it
# cp .env.postgresql.prod.example .env # then edit it
# docker compose -f docker-compose.postgresql.prod.yml up -d
#
# PostgreSQL runs inside the container, listening only on a Unix socket
+1 -1
View File
@@ -2,7 +2,7 @@
# client and PostgreSQL in one container, built from this checkout.
#
# cd Docker-AIO
# cp .env.example .env # then edit it
# cp .env.postgresql.example .env # then edit it
# docker compose -f docker-compose.postgresql.yml up -d --build
#
# PostgreSQL runs inside the container, listening only on a Unix socket
+1 -1
View File
@@ -2,7 +2,7 @@
# client in one container, pulled from a registry.
#
# cd Docker-AIO
# cp .env.example .env # then edit it
# cp .env.sqlite.prod.example .env # then edit it
# docker compose -f docker-compose.sqlite.prod.yml up -d
#
# Homeserver http://localhost:8008, admin panel http://localhost:8009, web
+1 -1
View File
@@ -2,7 +2,7 @@
# client in one container, built from this checkout.
#
# cd Docker-AIO
# cp .env.example .env # then edit it
# cp .env.sqlite.example .env # then edit it
# docker compose -f docker-compose.sqlite.yml up -d --build
#
# Homeserver http://localhost:8008, admin panel http://localhost:8009, web
+166
View File
@@ -0,0 +1,166 @@
# Settings for docker-compose.pocketbase.yml:
# the homeserver on PocketBase, the admin panel and the web client, each
# in its own container.
#
# cp .env.pocketbase.example .env # then edit it
# docker compose -f docker-compose.pocketbase.yml up -d --build
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the compose file, not here: the database driver and connection
# string, and the address the admin panel and web client reach the
# homeserver on.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=localhost
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=http://localhost:8008
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# Media in an S3 bucket instead of pb_data/storage. Bucket, region,
# endpoint and keys are all required when it is on, and the bucket must
# exist. For a bucket set up for you, use the pocketbase.s3 or
# pocketbase.seaweedfs files. Media stored before S3 was on is not moved.
WARP_PB_S3_ENABLED=false
WARP_PB_S3_BUCKET=
WARP_PB_S3_REGION=
WARP_PB_S3_ENDPOINT=
WARP_PB_S3_ACCESS_KEY=
WARP_PB_S3_SECRET=
WARP_PB_S3_FORCE_PATH_STYLE=false
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
+171
View File
@@ -0,0 +1,171 @@
# Settings for docker-compose.pocketbase.prod.yml:
# the homeserver on PocketBase, the admin panel and the web client, each
# in its own container.
#
# cp .env.pocketbase.prod.example .env # then edit it
# docker compose -f docker-compose.pocketbase.prod.yml up -d
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the compose file, not here: the database driver and connection
# string, and the address the admin panel and web client reach the
# homeserver on.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# The images are pulled from $WARP_REGISTRY/warp, warp-admin and warp-web
# at this tag. Pin a release in production.
WARP_REGISTRY=ghcr.io/dariuszjaniak
WARP_VERSION=latest
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=matrix.example.org
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=https://matrix.example.org
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# Media in an S3 bucket instead of pb_data/storage. Bucket, region,
# endpoint and keys are all required when it is on, and the bucket must
# exist. For a bucket set up for you, use the pocketbase.s3 or
# pocketbase.seaweedfs files. Media stored before S3 was on is not moved.
WARP_PB_S3_ENABLED=false
WARP_PB_S3_BUCKET=
WARP_PB_S3_REGION=
WARP_PB_S3_ENDPOINT=
WARP_PB_S3_ACCESS_KEY=
WARP_PB_S3_SECRET=
WARP_PB_S3_FORCE_PATH_STYLE=false
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
+172
View File
@@ -0,0 +1,172 @@
# Settings for docker-compose.pocketbase.s3.yml:
# the homeserver on PocketBase with media in an S3 bucket elsewhere, the
# admin panel and the web client, each in its own container.
#
# cp .env.pocketbase.s3.example .env # then edit it
# docker compose -f docker-compose.pocketbase.s3.yml up -d --build
#
# Required, with no default: WARP_PB_S3_ENDPOINT, WARP_PB_S3_ACCESS_KEY
# and WARP_PB_S3_SECRET.
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the compose file, not here: the database driver and connection
# string, and the address the admin panel and web client reach the
# homeserver on.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# ------------------------------------------------------------- media (S3)
# Media goes to this bucket; the database stays in /data/pb_data. The bucket
# must already exist: nothing here runs a gateway or creates it. For a
# gateway on the Docker host, use http://host.docker.internal:8333. Media
# stored before S3 was on is not moved into the bucket.
WARP_PB_S3_ENDPOINT=
WARP_PB_S3_BUCKET=warp
WARP_PB_S3_ACCESS_KEY=
WARP_PB_S3_SECRET=
# SeaweedFS and MinIO ignore the region; the client insists on one.
WARP_PB_S3_REGION=us-east-1
# true for SeaweedFS and MinIO, false for AWS S3 proper.
WARP_PB_S3_FORCE_PATH_STYLE=true
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=localhost
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=http://localhost:8008
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
+177
View File
@@ -0,0 +1,177 @@
# Settings for docker-compose.pocketbase.s3.prod.yml:
# the homeserver on PocketBase with media in an S3 bucket elsewhere, the
# admin panel and the web client, each in its own container.
#
# cp .env.pocketbase.s3.prod.example .env # then edit it
# docker compose -f docker-compose.pocketbase.s3.prod.yml up -d
#
# Required, with no default: WARP_PB_S3_ENDPOINT, WARP_PB_S3_ACCESS_KEY
# and WARP_PB_S3_SECRET.
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the compose file, not here: the database driver and connection
# string, and the address the admin panel and web client reach the
# homeserver on.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# The images are pulled from $WARP_REGISTRY/warp, warp-admin and warp-web
# at this tag. Pin a release in production.
WARP_REGISTRY=ghcr.io/dariuszjaniak
WARP_VERSION=latest
# ------------------------------------------------------------- media (S3)
# Media goes to this bucket; the database stays in /data/pb_data. The bucket
# must already exist: nothing here runs a gateway or creates it. For a
# gateway on the Docker host, use http://host.docker.internal:8333. Media
# stored before S3 was on is not moved into the bucket.
WARP_PB_S3_ENDPOINT=
WARP_PB_S3_BUCKET=warp
WARP_PB_S3_ACCESS_KEY=
WARP_PB_S3_SECRET=
# SeaweedFS and MinIO ignore the region; the client insists on one.
WARP_PB_S3_REGION=us-east-1
# true for SeaweedFS and MinIO, false for AWS S3 proper.
WARP_PB_S3_FORCE_PATH_STYLE=true
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=matrix.example.org
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=https://matrix.example.org
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
+176
View File
@@ -0,0 +1,176 @@
# Settings for docker-compose.pocketbase.seaweedfs.yml:
# the homeserver on PocketBase, the admin panel and the web client, with
# media in SeaweedFS in a container of its own.
#
# cp .env.pocketbase.seaweedfs.example .env # then edit it
# docker compose -f docker-compose.pocketbase.seaweedfs.yml up -d --build
#
# Required, with no default: WARP_PB_S3_ACCESS_KEY and WARP_PB_S3_SECRET.
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the compose file, not here: the database driver and connection
# string, and the address the admin panel and web client reach the
# homeserver on.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# -------------------------------------------------------------- seaweedfs
# Media goes to this bucket in SeaweedFS, created on start; the database
# stays in /data/pb_data. The key pair is the homeserver's S3 identity:
# the gateway's only one, and what the homeserver signs with.
# Media stored before S3 was on is not moved into the bucket.
WARP_PB_S3_BUCKET=warp
WARP_PB_S3_ACCESS_KEY=
WARP_PB_S3_SECRET=
# The SeaweedFS image every SeaweedFS container runs. Pin it: the data
# volume outlives the image.
SEAWEED_IMAGE=chrislusf/seaweedfs:4.45
# The S3 gateway's host port, on loopback unless the bind address says
# otherwise. The homeserver does not need it; it is for aws-cli and the
# like.
SEAWEED_S3_BIND=127.0.0.1
SEAWEED_S3_PORT=8333
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=localhost
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=http://localhost:8008
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
@@ -0,0 +1,181 @@
# Settings for docker-compose.pocketbase.seaweedfs.prod.yml:
# the homeserver on PocketBase, the admin panel and the web client, with
# media in SeaweedFS in a container of its own.
#
# cp .env.pocketbase.seaweedfs.prod.example .env # then edit it
# docker compose -f docker-compose.pocketbase.seaweedfs.prod.yml up -d
#
# Required, with no default: WARP_PB_S3_ACCESS_KEY and WARP_PB_S3_SECRET.
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the compose file, not here: the database driver and connection
# string, and the address the admin panel and web client reach the
# homeserver on.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# The images are pulled from $WARP_REGISTRY/warp, warp-admin and warp-web
# at this tag. Pin a release in production.
WARP_REGISTRY=ghcr.io/dariuszjaniak
WARP_VERSION=latest
# -------------------------------------------------------------- seaweedfs
# Media goes to this bucket in SeaweedFS, created on start; the database
# stays in /data/pb_data. The key pair is the homeserver's S3 identity:
# the gateway's only one, and what the homeserver signs with.
# Media stored before S3 was on is not moved into the bucket.
WARP_PB_S3_BUCKET=warp
WARP_PB_S3_ACCESS_KEY=
WARP_PB_S3_SECRET=
# The SeaweedFS image every SeaweedFS container runs. Pin it: the data
# volume outlives the image.
SEAWEED_IMAGE=chrislusf/seaweedfs:4.45
# The S3 gateway's host port, on loopback unless the bind address says
# otherwise. The homeserver does not need it; it is for aws-cli and the
# like.
SEAWEED_S3_BIND=127.0.0.1
SEAWEED_S3_PORT=8333
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=matrix.example.org
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=https://matrix.example.org
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
@@ -1,18 +1,21 @@
# Settings for every compose file in this folder.
# Settings for docker-compose.pocketbase.seaweedfs.split.yml:
# the homeserver on PocketBase, the admin panel and the web client, with
# media in SeaweedFS split into a container per role.
#
# cp .env.example .env
# cp .env.pocketbase.seaweedfs.split.example .env # then edit it
# docker compose -f docker-compose.pocketbase.seaweedfs.split.yml up -d --build
#
# then edit .env. Compose reads it for the ports, the registry and the
# PostgreSQL password, and hands all of it to the containers, so anything
# below takes effect on the next `docker compose ... up -d`.
# Required, with no default: WARP_PB_S3_ACCESS_KEY, WARP_PB_S3_SECRET and
# SEAWEED_ADMIN_PASSWORD.
#
# An empty value means the built-in default, given in the comment above it.
# Every homeserver setting is described in docs/configuration.md.
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the compose files, not here: the database driver and connection
# string (each file is one database), the listen addresses, the signing key
# and media paths inside /data, and the address the admin panel and web
# client reach the homeserver on.
# Set by the compose file, not here: the database driver and connection
# string, and the address the admin panel and web client reach the
# homeserver on.
# ---------------------------------------------------------------- compose
@@ -21,34 +24,30 @@ WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# The *.prod.yml files pull $WARP_REGISTRY/warp, warp-admin and warp-web at
# this tag. Pin a release in production.
WARP_REGISTRY=ghcr.io/dariuszjaniak
WARP_VERSION=latest
# -------------------------------------------------------------- seaweedfs
# docker-compose.postgresql*.yml only. Used when PostgreSQL is first set up;
# changing it later does not change the database's password. The prod file
# refuses to start without it.
WARP_POSTGRES_PASSWORD=change-me
# Media goes to this bucket in SeaweedFS, created on start; the database
# stays in /data/pb_data. The key pair is the homeserver's S3 identity:
# written into the filer's IAM store on every start, beside any identity
# added in the admin UI, so a new secret here lands on the next start.
# Media stored before S3 was on is not moved into the bucket.
WARP_PB_S3_BUCKET=warp
WARP_PB_S3_ACCESS_KEY=
WARP_PB_S3_SECRET=
# ------------------------------------------------------------- seaweedfs
# docker-compose.pocketbase.seaweedfs*.yml only; set WARP_PB_S3_ACCESS_KEY
# and WARP_PB_S3_SECRET below as well.
#
# The SeaweedFS image every SeaweedFS container runs. Pin it: the data
# volume outlives the image.
SEAWEED_IMAGE=chrislusf/seaweedfs:4.45
# The S3 gateway's host port, on loopback unless the bind address says
# otherwise. The homeserver reaches it over the compose network; this is
# for aws-cli and the like.
# otherwise. The homeserver does not need it; it is for aws-cli and the
# like.
SEAWEED_S3_BIND=127.0.0.1
SEAWEED_S3_PORT=8333
# The split file only: SeaweedFS's admin UI. It can mint credentials for
# the bucket, so the password is required. Put it behind a reverse proxy
# before binding it to 0.0.0.0. The read-only login is optional.
# SeaweedFS's admin UI. It can mint credentials for the bucket, so the
# password is required. Put it behind a reverse proxy before binding it
# to 0.0.0.0. The read-only login is optional.
SEAWEED_ADMIN_BIND=127.0.0.1
SEAWEED_ADMIN_PORT=23646
SEAWEED_ADMIN_USER=admin
@@ -103,33 +102,9 @@ WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Database pool (PostgreSQL). Defaults 10, 5, 1h, true.
WARP_DB_MAX_OPEN_CONNS=
WARP_DB_MAX_IDLE_CONNS=
WARP_DB_CONN_MAX_LIFETIME=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# docker-compose.pocketbase*.yml only: keep media in an S3 bucket instead
# of pb_data/storage. Bucket, region, endpoint and keys are all required
# when it is on.
#
# The pocketbase.seaweedfs files turn it on themselves, against their own
# SeaweedFS; there only the access key and secret are needed (required:
# they are the gateway's credentials too), and the bucket defaults to warp.
#
# The pocketbase.s3 files turn it on against a bucket elsewhere: the
# endpoint, access key and secret are required, the bucket (default warp)
# must exist, the region defaults to us-east-1 and path style to true
# (SeaweedFS, MinIO; set false for AWS S3). For a gateway on the Docker
# host, use http://host.docker.internal:8333.
WARP_PB_S3_ENABLED=false
WARP_PB_S3_BUCKET=
WARP_PB_S3_REGION=
WARP_PB_S3_ENDPOINT=
WARP_PB_S3_ACCESS_KEY=
WARP_PB_S3_SECRET=
WARP_PB_S3_FORCE_PATH_STYLE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
@@ -196,6 +171,7 @@ WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
@@ -0,0 +1,193 @@
# Settings for docker-compose.pocketbase.seaweedfs.split.prod.yml:
# the homeserver on PocketBase, the admin panel and the web client, with
# media in SeaweedFS split into a container per role.
#
# cp .env.pocketbase.seaweedfs.split.prod.example .env # then edit it
# docker compose -f docker-compose.pocketbase.seaweedfs.split.prod.yml up -d
#
# Required, with no default: WARP_PB_S3_ACCESS_KEY, WARP_PB_S3_SECRET and
# SEAWEED_ADMIN_PASSWORD.
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the compose file, not here: the database driver and connection
# string, and the address the admin panel and web client reach the
# homeserver on.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# The images are pulled from $WARP_REGISTRY/warp, warp-admin and warp-web
# at this tag. Pin a release in production.
WARP_REGISTRY=ghcr.io/dariuszjaniak
WARP_VERSION=latest
# -------------------------------------------------------------- seaweedfs
# Media goes to this bucket in SeaweedFS, created on start; the database
# stays in /data/pb_data. The key pair is the homeserver's S3 identity:
# written into the filer's IAM store on every start, beside any identity
# added in the admin UI, so a new secret here lands on the next start.
# Media stored before S3 was on is not moved into the bucket.
WARP_PB_S3_BUCKET=warp
WARP_PB_S3_ACCESS_KEY=
WARP_PB_S3_SECRET=
# The SeaweedFS image every SeaweedFS container runs. Pin it: the data
# volume outlives the image.
SEAWEED_IMAGE=chrislusf/seaweedfs:4.45
# The S3 gateway's host port, on loopback unless the bind address says
# otherwise. The homeserver does not need it; it is for aws-cli and the
# like.
SEAWEED_S3_BIND=127.0.0.1
SEAWEED_S3_PORT=8333
# SeaweedFS's admin UI. It can mint credentials for the bucket, so the
# password is required. Put it behind a reverse proxy before binding it
# to 0.0.0.0. The read-only login is optional.
SEAWEED_ADMIN_BIND=127.0.0.1
SEAWEED_ADMIN_PORT=23646
SEAWEED_ADMIN_USER=admin
SEAWEED_ADMIN_PASSWORD=
SEAWEED_ADMIN_READONLY_USER=
SEAWEED_ADMIN_READONLY_PASSWORD=
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=matrix.example.org
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=https://matrix.example.org
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
+161
View File
@@ -0,0 +1,161 @@
# Settings for docker-compose.postgresql.yml:
# the homeserver on PostgreSQL, the admin panel, the web client and
# PostgreSQL, each in its own container.
#
# cp .env.postgresql.example .env # then edit it
# docker compose -f docker-compose.postgresql.yml up -d --build
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the compose file, not here: the database driver and connection
# string, and the address the admin panel and web client reach the
# homeserver on.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# PostgreSQL's password, used when its database is first set up; changing
# it later does not change the database's password.
WARP_POSTGRES_PASSWORD=change-me
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=localhost
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=http://localhost:8008
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Database pool (PostgreSQL). Defaults 10, 5, 1h, true.
WARP_DB_MAX_OPEN_CONNS=
WARP_DB_MAX_IDLE_CONNS=
WARP_DB_CONN_MAX_LIFETIME=
WARP_DB_AUTO_MIGRATE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
+169
View File
@@ -0,0 +1,169 @@
# Settings for docker-compose.postgresql.prod.yml:
# the homeserver on PostgreSQL, the admin panel, the web client and
# PostgreSQL, each in its own container.
#
# cp .env.postgresql.prod.example .env # then edit it
# docker compose -f docker-compose.postgresql.prod.yml up -d
#
# Required, with no default: WARP_POSTGRES_PASSWORD.
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the compose file, not here: the database driver and connection
# string, and the address the admin panel and web client reach the
# homeserver on.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# The images are pulled from $WARP_REGISTRY/warp, warp-admin and warp-web
# at this tag. Pin a release in production.
WARP_REGISTRY=ghcr.io/dariuszjaniak
WARP_VERSION=latest
# PostgreSQL's password, used when its database is first set up; changing
# it later does not change the database's password.
# Required: this file refuses to start without it.
WARP_POSTGRES_PASSWORD=
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=matrix.example.org
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=https://matrix.example.org
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Database pool (PostgreSQL). Defaults 10, 5, 1h, true.
WARP_DB_MAX_OPEN_CONNS=
WARP_DB_MAX_IDLE_CONNS=
WARP_DB_CONN_MAX_LIFETIME=
WARP_DB_AUTO_MIGRATE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
+154
View File
@@ -0,0 +1,154 @@
# Settings for docker-compose.sqlite.yml:
# the homeserver on SQLite, the admin panel and the web client, each in
# its own container.
#
# cp .env.sqlite.example .env # then edit it
# docker compose -f docker-compose.sqlite.yml up -d --build
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the compose file, not here: the database driver and connection
# string, and the address the admin panel and web client reach the
# homeserver on.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=localhost
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=http://localhost:8008
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
+159
View File
@@ -0,0 +1,159 @@
# Settings for docker-compose.sqlite.prod.yml:
# the homeserver on SQLite, the admin panel and the web client, each in
# its own container.
#
# cp .env.sqlite.prod.example .env # then edit it
# docker compose -f docker-compose.sqlite.prod.yml up -d
#
# Compose reads .env for the values it puts into the compose file, and hands
# all of it to the containers, so a change takes effect on the next `up -d`.
# An empty value means the built-in default, given in the comment above it;
# every homeserver setting is described in docs/configuration.md.
#
# Set by the compose file, not here: the database driver and connection
# string, and the address the admin panel and web client reach the
# homeserver on.
# ---------------------------------------------------------------- compose
# Host ports for the homeserver, the admin panel and the web client.
WARP_PORT=8008
WARP_ADMIN_PORT=8009
WARP_WEB_PORT=8080
# The images are pulled from $WARP_REGISTRY/warp, warp-admin and warp-web
# at this tag. Pin a release in production.
WARP_REGISTRY=ghcr.io/dariuszjaniak
WARP_VERSION=latest
# ------------------------------------------------------------ homeserver
# Part of every user and room ID: it cannot be changed later.
WARP_SERVER_NAME=matrix.example.org
# The URL clients are told to use, in /.well-known/matrix/client.
# Default https://<server name>.
WARP_WELL_KNOWN_CLIENT_BASE_URL=https://matrix.example.org
# Default empty.
WARP_WELL_KNOWN_IDENTITY_SERVER_BASE_URL=
# host:port other homeservers should use. Default empty: no delegation.
WARP_WELL_KNOWN_SERVER_ADDRESS=
# Registration. Default false; the admin API can switch it at runtime.
WARP_REGISTRATION_ENABLED=false
# Default true.
WARP_REGISTRATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated sign-up tokens. Default none.
WARP_REGISTRATION_TOKENS=
# Default false.
WARP_REGISTRATION_REQUIRE_TOKEN=
# Federation. Default false.
WARP_FEDERATION_ENABLED=false
# Default true.
WARP_FEDERATION_ALLOW_RUNTIME_TOGGLE=
# Comma-separated server names. Default none.
WARP_FEDERATION_ALLOWLIST=
WARP_FEDERATION_DENYLIST=
WARP_FEDERATION_TRUSTED_KEY_SERVERS=
# Default 24h.
WARP_FEDERATION_KEY_VALIDITY_PERIOD=
# A second, TLS listener for federation, e.g. :8448, with its certificate
# and key (paths inside the container). Publish the port yourself.
WARP_LISTEN_FEDERATION_ADDRESS=
WARP_TLS_CERT_FILE=
WARP_TLS_KEY_FILE=
WARP_FEDERATION_TLS_CA_FILE=
# HTTP server. Defaults 10s, 60s, 120s, 120s, 1048576, 30s.
WARP_READ_HEADER_TIMEOUT=
WARP_READ_TIMEOUT=
WARP_WRITE_TIMEOUT=
WARP_IDLE_TIMEOUT=
WARP_MAX_HEADER_BYTES=
WARP_SHUTDOWN_TIMEOUT=
# Apply pending database migrations at startup. Default true.
WARP_DB_AUTO_MIGRATE=
# Client API. Defaults *, false, 0s (never expire), 0s, true.
WARP_CORS_ALLOWED_ORIGINS=
WARP_TRUST_X_FORWARDED_FOR=
WARP_ACCESS_TOKEN_LIFETIME=
WARP_REFRESH_TOKEN_LIFETIME=
WARP_RATE_LIMIT_ENABLED=
# Calls: the LiveKit JWT service's URL (see docs/calls.md). Default empty.
WARP_RTC_LIVEKIT_SERVICE_URL=
# Delayed events. Defaults 24h, 100.
WARP_DELAYED_EVENTS_MAX_DELAY=
WARP_DELAYED_EVENTS_MAX_PER_USER=
# TURN for legacy 1:1 calls: comma-separated URIs, then a shared secret or
# a static username and password. Lifetime default 1h.
WARP_TURN_URIS=
WARP_TURN_SHARED_SECRET=
WARP_TURN_USER_LIFETIME=
WARP_TURN_USERNAME=
WARP_TURN_PASSWORD=
# Sync. Defaults false, 30s, 30s.
WARP_SYNC_PRESENCE=
WARP_SYNC_TYPING_TIMEOUT=
WARP_SYNC_LONG_POLL_TIMEOUT=
# Media. Defaults 52428800 (50 MiB), 0 (no limit), 32000000, 24h, 10, false.
WARP_MEDIA_MAX_UPLOAD_BYTES=
WARP_MEDIA_MAX_USER_STORAGE_BYTES=
WARP_MEDIA_MAX_THUMBNAIL_PIXELS=
WARP_MEDIA_PENDING_UPLOAD_EXPIRY=
WARP_MEDIA_MAX_PENDING_UPLOADS=
WARP_MEDIA_LEGACY_UNAUTHENTICATED_DOWNLOADS=
# Push. Defaults true, true, 10s, 720h.
WARP_PUSH_ENABLED=
WARP_PUSH_INCLUDE_CONTENT=
WARP_PUSH_GATEWAY_TIMEOUT=
WARP_PUSH_NOTIFICATION_RETENTION=
# Application services: comma-separated registration files (paths inside
# the container). Timeout default 30s.
WARP_APPSERVICE_CONFIG_FILES=
WARP_APPSERVICE_TIMEOUT=
# Server notices. Defaults false, server-notices, Server Notices, Server
# Notices.
WARP_SERVER_NOTICES_ENABLED=
WARP_SERVER_NOTICES_LOCALPART=
WARP_SERVER_NOTICES_DISPLAY_NAME=
WARP_SERVER_NOTICES_ROOM_NAME=
# Logging: debug, info, warn or error; text or json; file and line.
WARP_LOG_LEVEL=info
WARP_LOG_FORMAT=json
WARP_LOG_ADD_SOURCE=
# Metrics. Defaults true, /metrics.
WARP_METRICS_ENABLED=
WARP_METRICS_PATH=
# OpenTelemetry tracing. Defaults false, localhost:4318, 1, warp.
WARP_TRACING_ENABLED=false
WARP_TRACING_ENDPOINT=
WARP_TRACING_SAMPLE_RATIO=
WARP_TRACING_SERVICE_NAME=
# ----------------------------------------------------------- admin panel
# text or json.
WARP_ADMIN_LOG_FORMAT=json
# ------------------------------------------------------------ web client
# The homeserver's public URL. Set, the browser talks to it directly and
# the web client proxies nothing; empty, it proxies the client API.
WARP_WEB_PUBLIC_HOMESERVER=
# Space-separated origins of the LiveKit JWT service and SFU, for calls.
WARP_WEB_CALL_ORIGINS=
# text or json.
WARP_WEB_LOG_FORMAT=json
+11 -6
View File
@@ -16,7 +16,7 @@ The homeserver (`warp`), the admin panel (`warp-admin`) and the web client
```sh
cd Docker
cp .env.example .env # then edit it
cp .env.sqlite.example .env # then edit it
docker compose -f docker-compose.sqlite.yml up -d --build
docker compose -f docker-compose.sqlite.yml exec warp warp create-account --username admin --admin
```
@@ -81,11 +81,16 @@ done
## Settings
Every setting is in `.env`, copied from [`.env.example`](.env.example),
which lists them all with their defaults; an empty value means the
default. Compose reads it for the ports, the registry and the PostgreSQL
password, and passes all of it to the homeserver, the admin panel and the
web client. `.env` is not committed.
Every compose file has its own settings file, named after it:
`docker-compose.<name>.yml` takes `.env.<name>.example`, so
`docker-compose.pocketbase.seaweedfs.prod.yml` takes
`.env.pocketbase.seaweedfs.prod.example`. Each lists only the settings
its compose file uses, with their defaults, and names the ones that are
required; an empty value means the default. Copy the one you need to
`.env`, which compose reads for the ports, the registry and the passwords,
and passes to the homeserver, the admin panel and the web client. `.env`
is not committed. The prod examples start from a public server name
rather than `localhost`.
The compose files set only what makes each one what it is: the database
driver and connection string, and the address the admin panel and web
+1 -1
View File
@@ -2,7 +2,7 @@
# each in its own container, pulled from a registry.
#
# cd Docker
# cp .env.example .env # then edit it
# cp .env.pocketbase.prod.example .env # then edit it
# docker compose -f docker-compose.pocketbase.prod.yml up -d
#
# PocketBase is embedded in the homeserver (the pocketbase database driver),
+1 -2
View File
@@ -3,8 +3,7 @@
# from a registry.
#
# cd Docker
# cp .env.example .env # then edit it; set WARP_PB_S3_ENDPOINT,
# # WARP_PB_S3_ACCESS_KEY and WARP_PB_S3_SECRET
# cp .env.pocketbase.s3.prod.example .env # then edit it
# docker compose -f docker-compose.pocketbase.s3.prod.yml up -d
#
# The database stays in /data/pb_data (warp-data); media goes to the bucket
+1 -2
View File
@@ -3,8 +3,7 @@
# this checkout.
#
# cd Docker
# cp .env.example .env # then edit it; set WARP_PB_S3_ENDPOINT,
# # WARP_PB_S3_ACCESS_KEY and WARP_PB_S3_SECRET
# cp .env.pocketbase.s3.example .env # then edit it
# docker compose -f docker-compose.pocketbase.s3.yml up -d --build
#
# The database stays in /data/pb_data (warp-data); media goes to the bucket
@@ -4,8 +4,7 @@
# process).
#
# cd Docker
# cp .env.example .env # then edit it; set WARP_PB_S3_ACCESS_KEY
# # and WARP_PB_S3_SECRET
# cp .env.pocketbase.seaweedfs.prod.example .env # then edit it
# docker compose -f docker-compose.pocketbase.seaweedfs.prod.yml up -d
#
# The database stays in /data/pb_data (warp-data); media goes to the bucket
@@ -96,7 +95,7 @@ services:
WARP_PB_S3_ENABLED: "true"
WARP_PB_S3_ENDPOINT: http://seaweedfs:8333
WARP_PB_S3_BUCKET: ${WARP_PB_S3_BUCKET:-warp}
WARP_PB_S3_REGION: ${WARP_PB_S3_REGION:-us-east-1}
WARP_PB_S3_REGION: us-east-1 # SeaweedFS ignores it; the client wants one
WARP_PB_S3_FORCE_PATH_STYLE: "true"
WARP_PB_S3_ACCESS_KEY: ${WARP_PB_S3_ACCESS_KEY:?set WARP_PB_S3_ACCESS_KEY in .env}
WARP_PB_S3_SECRET: ${WARP_PB_S3_SECRET:?set WARP_PB_S3_SECRET in .env}
@@ -4,8 +4,7 @@
# separate containers.
#
# cd Docker
# cp .env.example .env # then edit it; set WARP_PB_S3_ACCESS_KEY,
# # WARP_PB_S3_SECRET and SEAWEED_ADMIN_PASSWORD
# cp .env.pocketbase.seaweedfs.split.prod.example .env # then edit it
# docker compose -f docker-compose.pocketbase.seaweedfs.split.prod.yml up -d
#
# The database stays in /data/pb_data (warp-data); media goes to the bucket
@@ -199,7 +198,7 @@ services:
WARP_PB_S3_ENABLED: "true"
WARP_PB_S3_ENDPOINT: http://seaweedfs-s3:8333
WARP_PB_S3_BUCKET: ${WARP_PB_S3_BUCKET:-warp}
WARP_PB_S3_REGION: ${WARP_PB_S3_REGION:-us-east-1}
WARP_PB_S3_REGION: us-east-1 # SeaweedFS ignores it; the client wants one
WARP_PB_S3_FORCE_PATH_STYLE: "true"
WARP_PB_S3_ACCESS_KEY: ${WARP_PB_S3_ACCESS_KEY:?set WARP_PB_S3_ACCESS_KEY in .env}
WARP_PB_S3_SECRET: ${WARP_PB_S3_SECRET:?set WARP_PB_S3_SECRET in .env}
@@ -4,8 +4,7 @@
# separate containers.
#
# cd Docker
# cp .env.example .env # then edit it; set WARP_PB_S3_ACCESS_KEY,
# # WARP_PB_S3_SECRET and SEAWEED_ADMIN_PASSWORD
# cp .env.pocketbase.seaweedfs.split.example .env # then edit it
# docker compose -f docker-compose.pocketbase.seaweedfs.split.yml up -d --build
#
# The database stays in /data/pb_data (warp-data); media goes to the bucket
@@ -194,7 +193,7 @@ services:
WARP_PB_S3_ENABLED: "true"
WARP_PB_S3_ENDPOINT: http://seaweedfs-s3:8333
WARP_PB_S3_BUCKET: ${WARP_PB_S3_BUCKET:-warp}
WARP_PB_S3_REGION: ${WARP_PB_S3_REGION:-us-east-1}
WARP_PB_S3_REGION: us-east-1 # SeaweedFS ignores it; the client wants one
WARP_PB_S3_FORCE_PATH_STYLE: "true"
WARP_PB_S3_ACCESS_KEY: ${WARP_PB_S3_ACCESS_KEY:?set WARP_PB_S3_ACCESS_KEY in .env}
WARP_PB_S3_SECRET: ${WARP_PB_S3_SECRET:?set WARP_PB_S3_SECRET in .env}
@@ -4,8 +4,7 @@
# process).
#
# cd Docker
# cp .env.example .env # then edit it; set WARP_PB_S3_ACCESS_KEY
# # and WARP_PB_S3_SECRET
# cp .env.pocketbase.seaweedfs.example .env # then edit it
# docker compose -f docker-compose.pocketbase.seaweedfs.yml up -d --build
#
# The database stays in /data/pb_data (warp-data); media goes to the bucket
@@ -91,7 +90,7 @@ services:
WARP_PB_S3_ENABLED: "true"
WARP_PB_S3_ENDPOINT: http://seaweedfs:8333
WARP_PB_S3_BUCKET: ${WARP_PB_S3_BUCKET:-warp}
WARP_PB_S3_REGION: ${WARP_PB_S3_REGION:-us-east-1}
WARP_PB_S3_REGION: us-east-1 # SeaweedFS ignores it; the client wants one
WARP_PB_S3_FORCE_PATH_STYLE: "true"
WARP_PB_S3_ACCESS_KEY: ${WARP_PB_S3_ACCESS_KEY:?set WARP_PB_S3_ACCESS_KEY in .env}
WARP_PB_S3_SECRET: ${WARP_PB_S3_SECRET:?set WARP_PB_S3_SECRET in .env}
+1 -1
View File
@@ -2,7 +2,7 @@
# each in its own container, built from this checkout.
#
# cd Docker
# cp .env.example .env # then edit it
# cp .env.pocketbase.example .env # then edit it
# docker compose -f docker-compose.pocketbase.yml up -d --build
#
# PocketBase is embedded in the homeserver (the pocketbase database driver),
+1 -1
View File
@@ -2,7 +2,7 @@
# PostgreSQL, each in its own container, pulled from a registry.
#
# cd Docker
# cp .env.example .env # then edit it; set WARP_POSTGRES_PASSWORD
# cp .env.postgresql.prod.example .env # then edit it
# docker compose -f docker-compose.postgresql.prod.yml up -d
#
# Homeserver http://localhost:8008, admin panel http://localhost:8009, web
+1 -1
View File
@@ -2,7 +2,7 @@
# PostgreSQL, each in its own container, built from this checkout.
#
# cd Docker
# cp .env.example .env # then edit it; set WARP_POSTGRES_PASSWORD
# cp .env.postgresql.example .env # then edit it
# docker compose -f docker-compose.postgresql.yml up -d --build
#
# Homeserver http://localhost:8008, admin panel http://localhost:8009, web
+1 -1
View File
@@ -2,7 +2,7 @@
# in its own container, pulled from a registry.
#
# cd Docker
# cp .env.example .env # then edit it
# cp .env.sqlite.prod.example .env # then edit it
# docker compose -f docker-compose.sqlite.prod.yml up -d
#
# Homeserver http://localhost:8008, admin panel http://localhost:8009, web
+1 -1
View File
@@ -2,7 +2,7 @@
# in its own container, built from this checkout.
#
# cd Docker
# cp .env.example .env # then edit it
# cp .env.sqlite.example .env # then edit it
# docker compose -f docker-compose.sqlite.yml up -d --build
#
# Homeserver http://localhost:8008, admin panel http://localhost:8009, web