使用 Docker 安装

通过 Weblate 容器化部署,您可以在几秒钟内启动并运行您的个人 Weblate 实例。Weblate 的所有依赖项已包含在内。PostgreSQL 设为默认数据库,Valkey 设为缓存后端。

硬件要求

Weblate 应该可以在任何现代硬件上正常运行,以下是在单个主机(Weblate、数据库和 Web 服务器)上运行 Weblate 所需的最低配置:

  • 3 GB 的内存

  • 2 个 CPU 核心

  • 1 GB 的存储空间

备注

安装 Weblate 的实际要求会因其中管理的翻译规模而大不相同。

内存使用

内存越多越好——用于所有级别的缓存(文件系统,数据库和 Weblate)。如果有几百个翻译部件,那么推荐的最小内存为 4 GB。

提示

对于内存低于推荐值的系统,建议使用 单进程 Celery 设置

CPU 用量

许多并发用户会增加所需的 CPU 内核数量。

存储使用

典型的数据库存储用量为大约 300 MB/每 100 万托管单词。

克隆的仓库变体必须有存储空间,但 Weblate 会试着通过影子克隆最小化存储空间的大小。

节点

对中小站点(几百万托管单词),所有的 Weblate 部件(见 架构概览)可以运行在单个节点上。

当托管单词数增长到数以亿计时,推荐使用专门的数据库节点(见 Weblate 的数据库设置)。

安装

提示

以下示例假设您拥有一个工作正常的 Docker 环境,并安装了 docker-compose-plugin。请查看 Docker 文档以获取说明。

这会通过 HTTP 创建一个 Weblate 部署服务器,你应将它置于 HTTPS 终止代理之后。你也可以用 HTTPS 代理进行部署,参见 使用 Let’s Encrypt 自动生成 SSL 证书。对于更大型的安装设置,请见 横向扩展

  1. 克隆 weblate-docker 仓库:

    git clone https://github.com/WeblateOrg/docker-compose.git weblate-docker
    cd weblate-docker
    
  2. 使用您的设置创建一个 docker-compose.override.yml 文件。请参阅 Docker 环境变量 以获取环境变量的完整列表。

    services:
      weblate:
        image: weblate/weblate:latest
        environment:
          WEBLATE_EMAIL_HOST: smtp.example.com
          WEBLATE_EMAIL_HOST_USER: user
          WEBLATE_EMAIL_HOST_PASSWORD: pass
          WEBLATE_SERVER_EMAIL: weblate@example.com
          WEBLATE_DEFAULT_FROM_EMAIL: weblate@example.com
          WEBLATE_SITE_DOMAIN: weblate.example.com
          WEBLATE_ADMIN_PASSWORD: password for the admin user
          WEBLATE_ADMIN_EMAIL: weblate.admin@example.com
        ports:
        - 80:8080
    

    备注

    如果未设置 WEBLATE_ADMIN_PASSWORD,则使用首次启动时显示的随机密码创建管理员用户。

    提供的示例使 Weblate 侦听端口 80,在 docker-compose.override.yml 文件中编辑端口映射来更改。

  3. 启动 Weblate 容器:

    docker compose up
    

享受您的 Weblate 部署,可以在 weblate 容器的端口 80 上进行访问。

选择 Docker 镜像 registry

Weblate 容器发布到下列镜像库:

备注

所有示例目前从 Docker Hub 获取镜像,请相应调整配置来使用另一个镜像库。

选择 Docker 镜像标签

请选择匹配你的环境和预期的标签:

标签名称

说明

用例

latest

与最新的标签版本相匹配的Weblate 稳定发行版

在生产环境中滚动更新

<YEAR>

Weblate 稳定发行版

Rolling updates within a calendar year in a production environment

<YEAR>.<MONTH>

Weblate 稳定发行版

Rolling updates within a monthly release in a production environment

<YEAR>.<MONTH>.<PATCH>.<BUILD>

Weblate 稳定发行版

生产环境下定义良好的部署

edge

Weblate稳定发行版在Docker容器中的开发变化(例如依赖的更新)

在准生产环境中进行滚动更新

edge-<DATE>-<SHA>

Weblate稳定发行版在Docker容器中的开发变化(例如依赖的更新)

在准生产环境中定义完善部署

bleeding

来自Git的Weblate开发版

测试即将推出的 Weblate 功能的滚动更新

bleeding-<DATE>-<SHA>

来自Git的Weblate开发版

定义明确的部署以测试即将推出的 Weblate 功能

每个镜像在发布之前都经过我们的 CI 测试,所以即使是 bleeding 版本也应该可以安全使用。

可以在 GitHub Packages 找到的已发布标签的完整列表

具有 HTTPS 支持的 Docker 容器

请参阅 安装 以获取常规部署说明,本节仅提及与之相比的差异。

SSL 终止代理

可以在 Weblate 容器外终止 SSL。要实现它,需要将几个标头传递给容器,这样容器可以知道其实际的环境。关于这些标头的更详细信息见 在反向代理之后运行

Docker 容器的 nginx 反向代理示范配置。
location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_read_timeout 3600s;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $server_name;
}
外部 SSL 终止的 Docker 容器环境。
WEBLATE_ENABLE_HTTPS=1
WEBLATE_IP_PROXY_HEADER=HTTP_X_FORWARDED_FOR

使用自己的 SSL 证书

如果您要使用自己的 SSL 证书,只需将文件放入 Weblate 数据卷中(请参阅 Docker 容器卷):

  • ssl/fullchain.pem 包含证书,包括任何需要的 CA 证书

  • ssl/privkey.pem 包含有私钥

拥有这两个文件的用户必须与启动 docker 容器并将文件掩码设置为 600(仅拥有用户可读可写)的用户为同一用户。

此外,Weblate 容器现在将在端口 4443 上接受 SSL 连接,您将要在 docker compose override 中包括 HTTPS 的端口转发:

version: '3'
services:
  weblate:
    ports:
      - 80:8080
      - 443:4443

如果您已经在同一服务器上托管其他站点,则反向代理(例如 NGINX)可能会使用端口 80443。要将 HTTPS 连接从 NGINX 传递到 docker 容器,可以使用以下配置:

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name <SITE_URL>;
    ssl_certificate /etc/letsencrypt/live/<SITE>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<SITE>/privkey.pem;

    location / {
            proxy_set_header HOST $host;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Host $server_name;
            proxy_pass https://127.0.0.1:<EXPOSED_DOCKER_PORT>;
    }
}

<SITE_URL><SITE><EXPOSED_DOCKER_PORT> 替换为您环境中的实际值。

使用 Let’s Encrypt 自动生成 SSL 证书

如果要在公共安装中使用 Let’s Encrypt 自动生成的 SSL 证书,则需要在其他 Docker 容器中添加反向 HTTPS 代理,这将使用 https-portal。这是在 docker-compose-https.yml 文件中使用的。然后使用您的设置创建一个 docker-compose-https.override.yml 文件:

version: '3'
services:
  weblate:
    environment:
      WEBLATE_EMAIL_HOST: smtp.example.com
      WEBLATE_EMAIL_HOST_USER: user
      WEBLATE_EMAIL_HOST_PASSWORD: pass
      WEBLATE_SITE_DOMAIN: weblate.example.com
      WEBLATE_ADMIN_PASSWORD: password for admin user
  https-portal:
    environment:
      DOMAINS: 'weblate.example.com -> http://weblate:8080'

每当调用 docker compose 时,您都需要将两个文件都传递给它,然后执行以下操作:

docker compose -f docker-compose-https.yml -f docker-compose-https.override.yml build
docker compose -f docker-compose-https.yml -f docker-compose-https.override.yml up

升级 Docker 容器

通常,只更新 Weblate 容器并保持 PostgreSQL 容器为您的版本是一个好主意,因为升级 PostgreSQL 会很痛苦,并且在大多数情况下不会带来很多好处。

您可以通过坚持使用现有的 docker-compose,并且只是拉取最新镜像,然后重新启动,来执行此操作:

# Fetch latest versions of the images
docker compose pull
# Stop and destroy the containers
docker compose down
# Spawn new containers in the background
docker compose up -d
# Follow the logs during upgrade
docker compose logs -f

Weblate 数据库应在首次启动时自动迁移,并且不需要其他手动操作。

备注

Direct upgrades are only supported for releases from the current or previous calendar year. If you need to upgrade from an older release, upgrade first to an intermediate version listed in 特定版本的操作指南.

您可能还想更新 docker-compose 仓库,尽管在大多数情况下并不需要。在这种情况下,升级 PostgreSQL 服务器的信息,见 升级 PostgreSQL 容器

升级 PostgreSQL 容器

备注

PostgreSQL 18 更改了容器内默认的数据目录。常见的就设置将数据库卷挂载于 /var/lib/postgresql/data ,而 PostgreSQL 18 现在默认使用 /var/lib/postgresql

如果正在从老版本升级,要么将 Docker 配置中的挂载目标更新到新路径,要么保留旧的挂载目标并相应设置 PGDATA

不设置 PGDATA 就保留旧的挂载目标可能导致 PostgreSQL 在持久卷外面写入其数据。

更多信息见 PGDATA 文档

PostgreSQL 容器不支持版本间自动升级,需要手动升级。以下步骤显示了升级选项之一。

  1. 停止 Weblate 容器:

    docker compose stop weblate cache
    
  2. 备份数据库:

    docker compose exec database pg_dumpall --clean --if-exists --username weblate > backup.sql
    
  3. 停止数据库容器:

    docker compose stop database
    
  4. 删除 PostgreSQL 卷:

    docker compose rm -v database
    docker volume remove weblate-docker_postgres-data
    

    提示

    卷名包含 Docker Compose 项目名,其默认为此文档中 weblate-docker 的目录名。

  5. 调整 docker-compose.yml 以使用新的 PostgreSQL 版本。

  6. 启动数据库容器:

    docker compose up -d database
    
  7. 从备份恢复数据库:

    cat backup.sql | docker compose exec -T database psql --username weblate --dbname weblate
    

    提示

    请检查数据库名称匹配 POSTGRES_DB

  8. (可选)更新 Weblate 用户的密码。迁移到 PostgreSQL 14 或 15 时可能需要这么做,因为密码存储方式发生了改变:

    docker compose exec -T database psql --username weblate --dbname weblate -c "ALTER USER weblate WITH PASSWORD 'weblate'"
    

    提示

    请检查数据库名称匹配 POSTGRES_DB

  9. 启动所有剩余的容器:

    docker compose up -d
    

管理员登录

设置容器之后,您可以使用 WEBLATE_ADMIN_PASSWORD 中提供的密码以 管理员 用户身份登录,或者如果未设置该密码,则在首次启动时生成随机密码。

要重置 管理员 密码,请在 WEBLATE_ADMIN_PASSWORD 设置为新密码的情况下重启容器。

进程数量和内存消耗

WSGI 和 Celery 的工作进程数是根据 CPU 的数量自动确定的。这适用于大多数云虚拟机,因为这些虚拟机通常具有很少的CPU和大量的内存。

在你有很多 CPU 核心并且碰到内存用尽问题情况下,尝试减少 工作进程的数量:

environment:
  WEBLATE_WORKERS: 2

您还可以微调单个工作进程类别:

environment:
  WEB_WORKERS: 4
  CELERY_MAIN_OPTIONS: --concurrency 2
  CELERY_NOTIFY_OPTIONS: --concurrency 1
  CELERY_TRANSLATE_OPTIONS: --concurrency 1

只运行单个 Celery 进程可进一步减少内存使用:

environment:
  CELERY_SINGLE_PROCESS: 1

横向扩展

Added in version 4.6.

您可以运行多个 Weblate 容器来水平扩展服务。/app/data 卷必须由所有容器共享,建议使用集群文件系统,如 GlusterFS。对于每个容器,/app/cache 卷应该是分开的。

每个 Weblate 容器都使用 WEBLATE_SERVICE 环境变量定义了角色。请仔细阅读文档,因为某些服务应该在集群中应只运行一次,并且服务的顺序也很重要。

您可以在 docker-compose 仓库中找到示例设置,如 docker-compose-split.yml

Docker 环境变量

可以使用下述环境变量在 Docker 容器中设置 Weblate 的许多 配置

如果您需要定义不通过 Docker 环境变量公开的设置,请参考 修改未暴露为 Docker 环境变量的设置项

传递 secrets

Added in version 5.0.

Weblate 容器支持将 secrets 作为文件进行传递。要实现它,请将 _FILE 后缀附加到环境变量并通过 Docker 传递 secret 文件。

相关的 docker-compose.yml 看上去可能是这样:

services:
   weblate:
      environment:
         POSTGRES_PASSWORD_FILE: /run/secrets/db_password
      secrets:
         - db_password
   database:
      environment:
         POSTGRES_PASSWORD_FILE: /run/secrets/db_password
      secrets:
         - db_password


secrets:
   db_password:
     file: db_password.txt

通用设置

WEBLATE_DEBUG

使用 DEBUG 配置 Django 调试模式。

示例:

environment:
  WEBLATE_DEBUG: 1
WEBLATE_LOGLEVEL

配置日志记录详细程度,将此设为 DEBUG 来获得更详细的日志。

WEBLATE_DEBUG 关闭时,默认为 INFO,开启调试模式时也会使用 DEBUG 级别。

要静默记录更多的错误,请使用 ERRORWARNING 级别。

WEBLATE_LOGLEVEL_DATABASE

配置数据库查询详细程度的日志记录。

WEBLATE_LOG_GELF_HOST

Added in version 5.9.

使用 GELF TCP 连接配置远程日志记录。可被用于和 Graylog 集成。

WEBLATE_LOG_GELF_PORT

Added in version 5.9.

WEBLATE_LOG_GELF_HOST 使用自定义端口,默认为 12201。

WEBLATE_SITE_TITLE

更改所有页面页眉上显示的站点标题。

WEBLATE_SITE_DOMAIN

配置站点域名。此参数为必填项。

包括端口,如果使用的是非标准端口。

示例:

environment:
  WEBLATE_SITE_DOMAIN: example.com:8080
WEBLATE_ADMIN_NAME
WEBLATE_ADMIN_EMAIL

配置站点管理员的姓名和电子邮件。它用于 ADMINS 设置和创建 管理员 用户(有关此信息,请参阅 WEBLATE_ADMIN_PASSWORD)。

示例:

environment:
  WEBLATE_ADMIN_NAME: Weblate admin
  WEBLATE_ADMIN_EMAIL: noreply@example.com
WEBLATE_ADMIN_PASSWORD

设置 管理员 用户的密码。

  • 如果未设置并且 管理员 用户不存在,则会使用首次启动容器时显示的随机密码来创建它。

  • 如果未设置并且 管理员 用户存在,则不执行任何操作。

  • 如果设置,则在每次容器启动时都会对 管理员 用户进行调整,以匹配 WEBLATE_ADMIN_PASSWORDWEBLATE_ADMIN_NAMEWEBLATE_ADMIN_EMAIL

警告

将密码存储在配置文件中可能会带来安全风险。考虑仅将此变量用于初始设置(或让 Weblate 在初始启动时生成随机密码)或用于密码恢复。

WEBLATE_ADMIN_NOTIFY_ERROR

是否在服务器错误时给管理员发送电子邮件。默认开启。

你可能想使用其他错误收集工具,如 Sentry 或 Rollbar,并将此选项关闭。

WEBLATE_SERVER_EMAIL

发送错误消息的电子邮箱地址。

WEBLATE_DEFAULT_FROM_EMAIL

配置外发电子邮件的地址。

WEBLATE_ADMINS_CONTACT

配置 ADMINS_CONTACT.

WEBLATE_CONTACT_FORM

配置联系表单行为,请参阅 CONTACT_FORM

WEBLATE_ALLOWED_HOSTS

使用 ALLOWED_HOSTS 配置允许的 HTTP 主机名。

默认为 * 来允许所有的主机名称。

示例:

environment:
  WEBLATE_ALLOWED_HOSTS: weblate.example.com,example.com
WEBLATE_REGISTRATION_OPEN

通过切换 REGISTRATION_OPEN 配置是否打开注册。

示例:

environment:
  WEBLATE_REGISTRATION_OPEN: 0
WEBLATE_REGISTRATION_CAPTCHA

Added in version 5.10.

配置是否将人机验证码用于账户注册和其他未经身份认证的操作,见 REGISTRATION_CAPTCHA

示例:

environment:
  WEBLATE_REGISTRATION_CAPTCHA: 0
WEBLATE_REGISTRATION_ALLOW_BACKENDS

配置可用于通过 REGISTRATION_ALLOW_BACKENDS 创建新账户的身份认证方法。

示例:

environment:
  WEBLATE_REGISTRATION_OPEN: 0
  WEBLATE_REGISTRATION_ALLOW_BACKENDS: azuread-oauth2,azuread-tenant-oauth2
WEBLATE_REGISTRATION_REBIND

Added in version 4.16.

配置 REGISTRATION_REBIND

WEBLATE_REGISTRATION_ALLOW_DISPOSABLE_EMAILS

Added in version 5.16.1.

配置 REGISTRATION_ALLOW_DISPOSABLE_EMAILS

示例:

environment:
  WEBLATE_REGISTRATION_ALLOW_DISPOSABLE_EMAILS: 1
WEBLATE_PROJECT_WEB_RESTRICT_PRIVATE

Added in version 5.17.

配置 PROJECT_WEB_RESTRICT_PRIVATE

默认为启用。

WEBLATE_PROJECT_WEB_RESTRICT_ALLOWLIST

Added in version 5.17.

Configures PROJECT_WEB_RESTRICT_ALLOWLIST.

Expects a comma-separated list of trusted project slugs.

WEBLATE_WEBHOOK_RESTRICT_PRIVATE

Added in version 5.17.

配置 WEBHOOK_RESTRICT_PRIVATE.

默认为启用。

WEBLATE_WEBHOOK_PRIVATE_ALLOWLIST

Added in version 5.17.

配置 WEBHOOK_PRIVATE_ALLOWLIST.

Expects a comma-separated list of trusted hostnames or domains.

WEBLATE_ASSET_RESTRICT_PRIVATE

Added in version 2025.5.

Configures ASSET_RESTRICT_PRIVATE.

默认为启用。

WEBLATE_ASSET_PRIVATE_ALLOWLIST

Added in version 2025.5.

Configures ASSET_PRIVATE_ALLOWLIST.

Expects a comma-separated list of trusted hostnames or domains.

WEBLATE_TIME_ZONE

在 Weblate 中配置使用的时区,请参阅 TIME_ZONE

备注

为了更改 Docker 自己的时区,使用 TZ 环境变量。

示例:

environment:
  WEBLATE_TIME_ZONE: Europe/Prague
WEBLATE_ENABLE_HTTPS

让 Weblate 假定在反向 HTTPS 代理后面操作,这使 Weblate 在电子邮件和 API 链接中使用 HTTPS,或者在 cookies 上设置安全标记。

提示

可能的警告请参见 ENABLE_HTTPS 文档。

备注

这不会使 Weblate 容器接受 HTTPS 连接,您同样需要配置它,示例请参见 具有 HTTPS 支持的 Docker 容器

示例:

environment:
  WEBLATE_ENABLE_HTTPS: 1
WEBLATE_NGINX_IPV6

Added in version 5.17.

控制捆绑的 NGINX 是否监听 IPv6 地址。

支持的值为:

  • auto 表示仅当容器运行时 IPv6 可用时才启用 IPv6 监听器。这是默认设置。

  • on 表示始终启用 IPv6 监听器。

  • off 表示禁用 IPv6 监听器。

示例:

environment:
  WEBLATE_NGINX_IPV6: auto
WEBLATE_IP_PROXY_HEADER

让 Weblate 从任何给定的 HTTP 标头中取回 IP 地址。在使用 Weblate 容器之前的反向代理时使用它。

允许 IP_BEHIND_REVERSE_PROXY 并设置 IP_PROXY_HEADER

备注

格式必须符合 Django 的要求。Django transforms 原始 HTTP 标头如下命名:

  • 将所有字符装换为大写

  • 用下划线替换任何连字符

  • 预置 HTTP_ 前缀

所以 X-Forwarded-For 将被映射到 HTTP_X_FORWARDED_FOR

示例:

environment:
  WEBLATE_IP_PROXY_HEADER: HTTP_X_FORWARDED_FOR
WEBLATE_IP_PROXY_OFFSET

Added in version 5.0.1.

配置 IP_PROXY_OFFSET

WEBLATE_USE_X_FORWARDED_PORT

Added in version 5.0.1.

布尔值,用于明确是否在选项中对 SERVER_PORT META 变量使用 X-Forwarded-Port 标头。除非使用设置了此标头的代理,否则你不应该启用它。

备注

这是一个布尔值设定(使用 "true" 或者 "false")。

WEBLATE_SECURE_PROXY_SSL_HEADER

A tuple representing an HTTP header/value combination that signifies a request is secure. This is needed when Weblate is running behind a reverse proxy doing SSL termination which does not pass standard HTTPS headers.

示例:

environment:
  WEBLATE_SECURE_PROXY_SSL_HEADER: HTTP_X_FORWARDED_PROTO,https
WEBLATE_REQUIRE_LOGIN

启用 REQUIRE_LOGIN 而在整个 Weblate 上强制认证。

示例:

environment:
  WEBLATE_REQUIRE_LOGIN: 1

在 Docker 部署中启用 法律组件 模块。该集成默认禁用;不设置此变量或留空来禁用它。

支持的值为:

  • tos-confirm 以启用法律模块并在社媒身份认证期间和对已登录用户强制确认服务条款。

  • wllegal 来启用相同集成并额外从 wllegal 加载托管的法律文档模板。这些模板由 Weblate s.r.o. 运营的服务所使用,不用于一般用途。

要在 Docker 中提供自己的法律文档,请覆盖 /app/data/python/customize/templates/legal/documents 中的模板,见 替换标志和其他静态文件

示例:

environment:
  WEBLATE_LEGAL_INTEGRATION: tos-confirm
WEBLATE_PUBLIC_ENGAGE

启用 PUBLIC_ENGAGE

WEBLATE_GOOGLE_ANALYTICS_ID

通过更改 GOOGLE_ANALYTICS_ID 来配置 Google Analytics 的 ID。

WEBLATE_DEFAULT_PULL_MESSAGE

通过更改 DEFAULT_PULL_MESSAGE 来配置使用 API 发起的拉取请求的默认标题和说明。

WEBLATE_SIMPLIFY_LANGUAGES

配置语言简化策略,请参见 SIMPLIFY_LANGUAGES

WEBLATE_HIDE_SHARED_GLOSSARY_COMPONENTS

分享到其他项目时禁用术语表部件,见 HIDE_SHARED_GLOSSARY_COMPONENTS

WEBLATE_DEFAULT_ACCESS_CONTROL

为新项目配置默认的 访问控制,请参见 DEFAULT_ACCESS_CONTROL

WEBLATE_DEFAULT_TRANSLATION_REVIEW

Added in version 5.16.

配置 启用审核 的默认值,默认关闭。

WEBLATE_DEFAULT_SOURCE_REVIEW

Added in version 5.16.

配置 启用原文审核 的默认值,默认关闭。

WEBLATE_DEFAULT_RESTRICTED_COMPONENT

为新部件的 受限制的访问 配置默认值,请参见 DEFAULT_RESTRICTED_COMPONENT

WEBLATE_DEFAULT_TRANSLATION_PROPAGATION

为新部件的 允许同步翻译 配置默认值,请参见 DEFAULT_TRANSLATION_PROPAGATION

WEBLATE_DEFAULT_COMMITER_EMAIL

配置 DEFAULT_COMMITER_EMAIL

WEBLATE_DEFAULT_COMMITER_NAME

配置 DEFAULT_COMMITER_NAME

WEBLATE_DEFAULT_SHARED_TM

配置 DEFAULT_SHARED_TM.

WEBLATE_DEFAULT_AUTOCLEAN_TM

配置 DEFAULT_AUTOCLEAN_TM.

WEBLATE_COMMIT_PENDING_HOURS

为新部件的 对更改进行提交的延时时间 配置默认值,请参见 COMMIT_PENDING_HOURS

WEBLATE_GPG_IDENTITY

配置提交的 GPG 签名,请参见 WEBLATE_GPG_IDENTITY

WEBLATE_URL_PREFIX

配置 Weblate 运行的 URL 前缀,请参见 URL_PREFIX

WEBLATE_STATIC_URL

配置 CACHE_DIR 提供的静态文件的 URL 前缀。

WEBLATE_SILENCED_SYSTEM_CHECKS

配置您不想要显示的检查,请参见 SILENCED_SYSTEM_CHECKS

WEBLATE_CSP_SCRIPT_SRC
WEBLATE_CSP_IMG_SRC
WEBLATE_CSP_CONNECT_SRC
WEBLATE_CSP_STYLE_SRC
WEBLATE_CSP_FONT_SRC
WEBLATE_CSP_FORM_SRC

允许定制 Content-Security-Policy HTTP 标头。

WEBLATE_LICENSE_FILTER

配置 LICENSE_FILTER.

WEBLATE_LICENSE_REQUIRED

配置 LICENSE_REQUIRED

WEBLATE_WEBSITE_REQUIRED

配置 WEBSITE_REQUIRED

WEBLATE_VERSION_DISPLAY

配置 VERSION_DISPLAY.

WEBLATE_HIDE_VERSION

配置 HIDE_VERSION

WEBLATE_BASIC_LANGUAGES

配置 BASIC_LANGUAGES.

WEBLATE_DEFAULT_AUTO_WATCH

配置 DEFAULT_AUTO_WATCH.

WEBLATE_RATELIMIT_ATTEMPTS
WEBLATE_RATELIMIT_LOCKOUT
WEBLATE_RATELIMIT_WINDOW

Added in version 4.6.

配置速率限制器。

提示

你可以为任何速率限制器的范围设置配置。要做到这一点,请在 频次限制 中描述的任何设置中添加 WEBLATE_ 前缀。

WEBLATE_API_RATELIMIT_ANON
WEBLATE_API_RATELIMIT_USER

Added in version 4.11.

配置 API 速率限制。默认值如下:匿名用户 100/day,已验证身份用户 5000/hour

WEBLATE_ENABLE_HOOKS

Added in version 4.13.

配置 ENABLE_HOOKS

WEBLATE_ENABLE_AVATARS

Added in version 4.6.1.

配置 ENABLE_AVATARS.

WEBLATE_AVATAR_URL_PREFIX

Added in version 4.15.

配置 AVATAR_URL_PREFIX

WEBLATE_LIMIT_TRANSLATION_LENGTH_BY_SOURCE_LENGTH

Added in version 4.9.

配置 LIMIT_TRANSLATION_LENGTH_BY_SOURCE_LENGTH.

WEBLATE_SSH_EXTRA_ARGS

Added in version 4.9.

配置 SSH_EXTRA_ARGS

WEBLATE_BORG_EXTRA_ARGS

Added in version 4.9.

配置 BORG_EXTRA_ARGS,其为英文逗号所分隔的参数列表。

示例:

environment:
  WEBLATE_BORG_EXTRA_ARGS: --exclude,vcs/
WEBLATE_ENABLE_SHARING

Added in version 4.14.1.

配置 ENABLE_SHARING.

WEBLATE_SUPPORT_STATUS_CHECK

Added in version 5.5.

配置 SUPPORT_STATUS_CHECK.

WEBLATE_EXTRA_HTML_HEAD

Added in version 4.15.

配置 EXTRA_HTML_HEAD.

WEBLATE_PRIVATE_COMMIT_EMAIL_TEMPLATE

Added in version 4.15.

配置 PRIVATE_COMMIT_EMAIL_TEMPLATE.

WEBLATE_PRIVATE_COMMIT_EMAIL_OPT_IN

Added in version 4.15.

配置 PRIVATE_COMMIT_EMAIL_OPT_IN.

WEBLATE_PRIVATE_COMMIT_NAME_TEMPLATE

Added in version 5.16.

配置 PRIVATE_COMMIT_NAME_TEMPLATE.

WEBLATE_PRIVATE_COMMIT_NAME_OPT_IN

Added in version 5.16.

配置 PRIVATE_COMMIT_NAME_OPT_IN.

WEBLATE_UNUSED_ALERT_DAYS

Added in version 4.17.

配置 UNUSED_ALERT_DAYS.

WEBLATE_UPDATE_LANGUAGES

Added in version 4.3.2.

配置 UPDATE_LANGUAGES.

WEBLATE_VCS_ALLOW_HOSTS

Added in version 5.15.

配置 VCS_ALLOW_HOSTS.

WEBLATE_VCS_ALLOW_SCHEMES

Added in version 5.15.

配置 VCS_ALLOW_SCHEMES.

WEBLATE_VCS_RESTRICT_PRIVATE

Added in version 5.17.

配置 VCS_RESTRICT_PRIVATE.

WEBLATE_VCS_CLONE_DEPTH

Added in version 5.4.

配置 VCS_CLONE_DEPTH.

WEBLATE_VCS_API_DELAY

Added in version 5.4.

配置 VCS_API_DELAY.

WEBLATE_VCS_API_TIMEOUT

Added in version 5.15.

配置 VCS_API_TIMEOUT.

WEBLATE_CORS_ALLOWED_ORIGINS

Added in version 4.16.

允许来自给定来源的到 API 的 CORS 请求。

示例:

environment:
  WEBLATE_CORS_ALLOWED_ORIGINS: https://example.com,https://weblate.org
WEBLATE_CORS_ALLOW_ALL_ORIGINS

Added in version 5.6.1: 允许来自所有来源的到 API 的 CORS 请求。

WEBLATE_WEBSITE_ALERTS_ENABLED

Added in version 5.17.

配置 WEBSITE_ALERTS_ENABLED

CLIENT_MAX_BODY_SIZE

Added in version 4.16.3.

配置内置 web 服务器接受的最大正文大小。

environment:
    CLIENT_MAX_BODY_SIZE: 200m

提示

此变量刻意缺少 WEBLATE_ 前缀,因它和 使用 Let’s Encrypt 自动生成 SSL 证书 中所用的第三方容器共享。

WEBLATE_TRANSLATION_UPLOAD_MAX_SIZE

Configures TRANSLATION_UPLOAD_MAX_SIZE.

The value is in bytes.

WEBLATE_COMPONENT_ZIP_UPLOAD_MAX_SIZE

Configures COMPONENT_ZIP_UPLOAD_MAX_SIZE.

The value is in bytes.

WEBLATE_PROJECT_BACKUP_UPLOAD_MAX_SIZE

Configures PROJECT_BACKUP_UPLOAD_MAX_SIZE.

The value is in bytes. Make sure CLIENT_MAX_BODY_SIZE is also large enough for uploaded backup files.

WEBLATE_PROJECT_BACKUP_IMPORT_MAX_MEMBERS

Added in version 2026.5.

Configures PROJECT_BACKUP_IMPORT_MAX_MEMBERS.

WEBLATE_PROJECT_BACKUP_IMPORT_MAX_TOTAL_UNCOMPRESSED_SIZE

Added in version 2026.5.

Configures PROJECT_BACKUP_IMPORT_MAX_TOTAL_UNCOMPRESSED_SIZE.

The value is in bytes.

WEBLATE_PROJECT_BACKUP_IMPORT_MAX_COMPRESSED_ENTRY_SIZE

Added in version 2026.5.

Configures PROJECT_BACKUP_IMPORT_MAX_COMPRESSED_ENTRY_SIZE.

The value is in bytes.

WEBLATE_PROJECT_BACKUP_IMPORT_MIN_RATIO_SIZE

Added in version 2026.5.

Configures PROJECT_BACKUP_IMPORT_MIN_RATIO_SIZE.

The value is in bytes.

WEBLATE_PROJECT_BACKUP_IMPORT_MAX_COMPRESSED_ENTRY_RATIO

Added in version 2026.5.

Configures PROJECT_BACKUP_IMPORT_MAX_COMPRESSED_ENTRY_RATIO.

代码托管站点凭据

In the Docker container, the code hosting credentials can be configured either in separate variables or using a Python dictionary to set them at once. The following examples are for GitHub 拉取请求, but apply to all 版本控制集成 with appropriately changed variable names.

重要

所有环境变量名必须包含 WEBLATE_ 前缀。例如,要配置 Weblate 凭据,使用 WEBLATE_GITHUB_USERNAME,而不是 GITHUB_USERNAME。 不论是配置拉取请求还是其他任何 VCS 集成,这都适用。

GitHub 拉取请求的配置示例看上去像这样:

WEBLATE_GITHUB_USERNAME=api-user
WEBLATE_GITHUB_TOKEN=api-token
WEBLATE_GITHUB_HOST=api.github.com

将用作:

GITHUB_CREDENTIALS = {
    "api.github.com": {
        "username": "api-user",
        "token": "api-token",
    }
}

此外,也可以将 Python 字典作为一条字符串提供:

WEBLATE_GITHUB_CREDENTIALS='{ "api.github.com": { "username": "api-user", "token": "api-token", } }'

或者到包含该 Python 字典的文件的路径:

echo '{ "api.github.com": { "username": "api-user", "token": "api-token", } }' > /path/to/github-credentials
WEBLATE_GITHUB_CREDENTIALS_FILE='/path/to/github-credentials'
WEBLATE_GITHUB_USERNAME
WEBLATE_GITHUB_TOKEN
WEBLATE_GITHUB_HOST
WEBLATE_GITHUB_CREDENTIALS

Configures GitHub 拉取请求 by changing GITHUB_CREDENTIALS.

WEBLATE_GITLAB_USERNAME
WEBLATE_GITLAB_TOKEN
WEBLATE_GITLAB_HOST
WEBLATE_GITLAB_CREDENTIALS

Configures GitLab 合并请求 by changing GITLAB_CREDENTIALS.

WEBLATE_GITEA_USERNAME
WEBLATE_GITEA_TOKEN
WEBLATE_GITEA_HOST
WEBLATE_GITEA_CREDENTIALS

Configures Gitea 拉取请求 by changing GITEA_CREDENTIALS.

WEBLATE_PAGURE_USERNAME
WEBLATE_PAGURE_TOKEN
WEBLATE_PAGURE_HOST
WEBLATE_PAGURE_CREDENTIALS

Configures Pagure 合并请求 by changing PAGURE_CREDENTIALS.

WEBLATE_BITBUCKETSERVER_USERNAME
WEBLATE_BITBUCKETSERVER_TOKEN
WEBLATE_BITBUCKETSERVER_HOST
WEBLATE_BITBUCKETSERVER_CREDENTIALS

Configures Bitbucket 数据中心拉取请求 by changing BITBUCKETSERVER_CREDENTIALS.

WEBLATE_BITBUCKETCLOUD_USERNAME
WEBLATE_BITBUCKETCLOUD_WORKSPACE
WEBLATE_BITBUCKETCLOUD_TOKEN
WEBLATE_BITBUCKETCLOUD_HOST
WEBLATE_BITBUCKETCLOUD_CREDENTIALS

Configures Bitbucket Cloud 拉取请求 by changing BITBUCKETCLOUD_CREDENTIALS.

WEBLATE_AZURE_DEVOPS_USERNAME
WEBLATE_AZURE_DEVOPS_ORGANIZATION
WEBLATE_AZURE_DEVOPS_TOKEN
WEBLATE_AZURE_DEVOPS_HOST
WEBLATE_AZURE_DEVOPS_CREDENTIALS

Configures Azure DevOps 拉取请求 by changing AZURE_DEVOPS_CREDENTIALS.

自动建议设置

在 4.13 版本发生变更: 自动建议服务现在在用户界面进行配置,见 自动建议

现有的环境变量在迁移到Weblate 4.13时被导入,但改变它们不会有任何进一步的影响。

身份认证设置

提示

除非通过 WEBLATE_NO_EMAIL_AUTH 停用,否则基于电子邮件的身份认证将开启。

LDAP

WEBLATE_AUTH_LDAP_SERVER_URI
WEBLATE_AUTH_LDAP_USER_DN_TEMPLATE
WEBLATE_AUTH_LDAP_USER_ATTR_MAP
WEBLATE_AUTH_LDAP_BIND_DN
WEBLATE_AUTH_LDAP_BIND_PASSWORD
WEBLATE_AUTH_LDAP_CONNECTION_OPTION_REFERRALS
WEBLATE_AUTH_LDAP_USER_SEARCH_FILTER
WEBLATE_AUTH_LDAP_USER_SEARCH_UNION
WEBLATE_AUTH_LDAP_USER_SEARCH_UNION_DELIMITER

LDAP 身份认证配置。

直接绑定的示例:

environment:
  WEBLATE_AUTH_LDAP_SERVER_URI: ldap://ldap.example.org
  WEBLATE_AUTH_LDAP_USER_DN_TEMPLATE: uid=%(user)s,ou=People,dc=example,dc=net
  # map weblate 'full_name' to ldap 'name' and weblate 'email' attribute to 'mail' ldap attribute.
  # another example that can be used with OpenLDAP: 'full_name:cn,email:mail'
  WEBLATE_AUTH_LDAP_USER_ATTR_MAP: full_name:name,email:mail

搜索与绑定的示例:

environment:
  WEBLATE_AUTH_LDAP_SERVER_URI: ldap://ldap.example.org
  WEBLATE_AUTH_LDAP_BIND_DN: CN=ldap,CN=Users,DC=example,DC=com
  WEBLATE_AUTH_LDAP_BIND_PASSWORD: password
  WEBLATE_AUTH_LDAP_USER_ATTR_MAP: full_name:name,email:mail
  WEBLATE_AUTH_LDAP_USER_SEARCH: CN=Users,DC=example,DC=com

联合搜索与绑定的示例:

environment:
  WEBLATE_AUTH_LDAP_SERVER_URI: ldap://ldap.example.org
  WEBLATE_AUTH_LDAP_BIND_DN: CN=ldap,CN=Users,DC=example,DC=com
  WEBLATE_AUTH_LDAP_BIND_PASSWORD: password
  WEBLATE_AUTH_LDAP_USER_ATTR_MAP: full_name:name,email:mail
  WEBLATE_AUTH_LDAP_USER_SEARCH_UNION: ou=users,dc=example,dc=com|ou=otherusers,dc=example,dc=com

针对 Active Directory 的搜索与绑定的示例:

environment:
  WEBLATE_AUTH_LDAP_BIND_DN: CN=ldap,CN=Users,DC=example,DC=com
  WEBLATE_AUTH_LDAP_BIND_PASSWORD: password
  WEBLATE_AUTH_LDAP_SERVER_URI: ldap://ldap.example.org
  WEBLATE_AUTH_LDAP_CONNECTION_OPTION_REFERRALS: 0
  WEBLATE_AUTH_LDAP_USER_ATTR_MAP: full_name:name,email:mail
  WEBLATE_AUTH_LDAP_USER_SEARCH: CN=Users,DC=example,DC=com
  WEBLATE_AUTH_LDAP_USER_SEARCH_FILTER: (sAMAccountName=%(user)s)

GitHub

WEBLATE_SOCIAL_AUTH_GITHUB_KEY
WEBLATE_SOCIAL_AUTH_GITHUB_SECRET
WEBLATE_SOCIAL_AUTH_GITHUB_ORG_KEY
WEBLATE_SOCIAL_AUTH_GITHUB_ORG_SECRET
WEBLATE_SOCIAL_AUTH_GITHUB_ORG_NAME
WEBLATE_SOCIAL_AUTH_GITHUB_TEAM_KEY
WEBLATE_SOCIAL_AUTH_GITHUB_TEAM_SECRET
WEBLATE_SOCIAL_AUTH_GITHUB_TEAM_ID

允许 GitHub 身份认证

GitHub 企业版

WEBLATE_SOCIAL_AUTH_GITHUB_ENTERPRISE_KEY
WEBLATE_SOCIAL_AUTH_GITHUB_ENTERPRISE_SECRET
WEBLATE_SOCIAL_AUTH_GITHUB_ENTERPRISE_URL
WEBLATE_SOCIAL_AUTH_GITHUB_ENTERPRISE_API_URL
WEBLATE_SOCIAL_AUTH_GITHUB_ENTERPRISE_SCOPE

启用 GitHub 企业身份认证

Bitbucket

WEBLATE_SOCIAL_AUTH_BITBUCKET_OAUTH2_KEY
WEBLATE_SOCIAL_AUTH_BITBUCKET_OAUTH2_SECRET

允许 Bitbucket 身份认证

Facebook

WEBLATE_SOCIAL_AUTH_FACEBOOK_KEY
WEBLATE_SOCIAL_AUTH_FACEBOOK_SECRET

允许 Facebook OAuth 2.

Google

WEBLATE_SOCIAL_AUTH_GOOGLE_OAUTH2_KEY
WEBLATE_SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET
WEBLATE_SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS
WEBLATE_SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_EMAILS

允许 Google OAuth 2

GitLab

WEBLATE_SOCIAL_AUTH_GITLAB_KEY
WEBLATE_SOCIAL_AUTH_GITLAB_SECRET
WEBLATE_SOCIAL_AUTH_GITLAB_API_URL

允许 GitLab OAuth 2

Gitea

WEBLATE_SOCIAL_AUTH_GITEA_API_URL
WEBLATE_SOCIAL_AUTH_GITEA_KEY
WEBLATE_SOCIAL_AUTH_GITEA_SECRET

启用 Gitea 身份认证。

Microsoft Entra ID

WEBLATE_SOCIAL_AUTH_AZUREAD_OAUTH2_KEY
WEBLATE_SOCIAL_AUTH_AZUREAD_OAUTH2_SECRET

启用 Microsoft Entra ID 身份认证,见 Microsoft Entra ID

支持 Tenant 的 Microsoft Entra ID

WEBLATE_SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_KEY
WEBLATE_SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_SECRET
WEBLATE_SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_TENANT_ID

启用支持租户的 Microsoft Entra ID 身份认证,见 Microsoft Entra ID

Keycloak

WEBLATE_SOCIAL_AUTH_KEYCLOAK_KEY
WEBLATE_SOCIAL_AUTH_KEYCLOAK_SECRET
WEBLATE_SOCIAL_AUTH_KEYCLOAK_PUBLIC_KEY
WEBLATE_SOCIAL_AUTH_KEYCLOAK_ALGORITHM
WEBLATE_SOCIAL_AUTH_KEYCLOAK_AUTHORIZATION_URL
WEBLATE_SOCIAL_AUTH_KEYCLOAK_ACCESS_TOKEN_URL
WEBLATE_SOCIAL_AUTH_KEYCLOAK_TITLE
WEBLATE_SOCIAL_AUTH_KEYCLOAK_IMAGE

启用 Keycloak 身份认证,请参见 Keycloak - Open Source Red Hat SSO

WEBLATE_SOCIAL_AUTH_KEYCLOAK_ID_KEY

Added in version 5.17.

配置将什么用作来自 Keycloak 的唯一用户标识符。默认为 电子邮箱

提示

当 Keycloak 配置为抽象第三方 IDP,需要配置第三方 IDP 域名的 WEBLATE_CSP_FORM_SRC

示例当 Keycloak 正传递身份认证到 Microsoft 时。
environment:
  WEBLATE_CSP_FORM_SRC: login.microsoftonline.com

Linux 销售商

您可以通过将后面的变量设置为任何值,使用 Linux 销售商身份认证服务来允许身份认证。

WEBLATE_SOCIAL_AUTH_FEDORA
WEBLATE_SOCIAL_AUTH_OPENSUSE
WEBLATE_SOCIAL_AUTH_OPENINFRA
WEBLATE_SOCIAL_AUTH_UBUNTU

Slack

WEBLATE_SOCIAL_AUTH_SLACK_KEY
WEBLATE_SOCIAL_AUTH_SLACK_SECRET

允许 Slack 身份认证,请参见 Slack

OpenID 连接

Added in version 4.13-1.

WEBLATE_SOCIAL_AUTH_OIDC_OIDC_ENDPOINT
WEBLATE_SOCIAL_AUTH_OIDC_KEY
WEBLATE_SOCIAL_AUTH_OIDC_SECRET
WEBLATE_SOCIAL_AUTH_OIDC_USERNAME_KEY
WEBLATE_SOCIAL_AUTH_OIDC_TITLE
WEBLATE_SOCIAL_AUTH_OIDC_IMAGE

配置通用 OpenID Connect 集成。

Fedora OpenID 连接

Added in version 5.15.

WEBLATE_SOCIAL_AUTH_FEDORA_OIDC_KEY
WEBLATE_SOCIAL_AUTH_FEDORA_OIDC_SECRET

配置 Fedora OpenID 连接集成。

参见

Fedora

SAML

在第一次启动容器时会自动生成自签名的 SAML 密钥。如果您想要使用自己的密钥,请将证书和私钥分别放在 /app/data/ssl/saml.crt/app/data/ssl/saml.key 中。

WEBLATE_SAML_IDP_ENTITY_ID
WEBLATE_SAML_IDP_URL
WEBLATE_SAML_IDP_X509CERT
WEBLATE_SAML_IDP_IMAGE
WEBLATE_SAML_IDP_TITLE

SAML 身份提供者设置,请参见 SAML 身份认证

WEBLATE_SAML_ID_ATTR_FULL_NAME
WEBLATE_SAML_ID_ATTR_FIRST_NAME
WEBLATE_SAML_ID_ATTR_LAST_NAME
WEBLATE_SAML_ID_ATTR_USERNAME
WEBLATE_SAML_ID_ATTR_EMAIL
WEBLATE_SAML_ID_ATTR_USER_PERMANENT_ID

Added in version 4.18.

SAML 属性映射。

其他身份认证设置

WEBLATE_NO_EMAIL_AUTH

当设置为任何值时禁止电子邮箱身份认证。请参见 关闭密码身份认证

WEBLATE_MIN_PASSWORD_SCORE

最小的密码得分由 zxcvbn 密码长度预测器进行评估。默认为 3,设为 0 禁用强度检查。

PostgreSQL 数据库设置

数据库由 docker-compose.yml 建立,所以这些设置影响 Weblate 和 PostgreSQL 容器。

POSTGRES_PASSWORD

PostgreSQL 密码。

POSTGRES_USER

PostgreSQL 用户名。

POSTGRES_DB

PostgreSQL 数据库名。

POSTGRES_HOST

PostgreSQL 服务器主机名成或 IP 地址。默认为 database

POSTGRES_PORT

PostgreSQL 服务器端口。默认为无(使用默认值)。

POSTGRES_SSL_MODE

配置 PostgreSQL 如何处理 SSL 连接到服务器,可能的选项请参见 SSL Mode Descriptions

POSTGRES_ALTER_ROLE

配置在数据库迁移过程要改变的 PostgreSQL 角色名称,请参见 配置 Weblate 来使用 PostgreSQL

默认为 POSTGRES_USER.

POSTGRES_CONN_MAX_AGE

Added in version 4.8.1.

数据库连接的寿命,以秒为单位的整数。使用0可以在每次请求结束时关闭数据库连接。

在 5.1 版本发生变更: 默认行为是拥有无限制的持久性数据库连接。

启用连接持久性通常会导致更多的数据库开放连接。请在启用前调整你的数据库配置。

配置的示例:

environment:
    POSTGRES_CONN_MAX_AGE: 3600
POSTGRES_DISABLE_SERVER_SIDE_CURSORS

Added in version 4.9.1.

禁用数据库中的服务器端游标。这在一些 pgbouncer 设置中是必要的。

配置的示例:

environment:
    POSTGRES_DISABLE_SERVER_SIDE_CURSORS: 1
WEBLATE_DATABASES

Added in version 5.1.

Set to false to disable environment based configuration of the database connection. Use 覆盖数据卷的设置 to configure the database connection manually.

数据库备份设置

WEBLATE_DATABASE_BACKUP

使用 DATABASE_BACKUP 配置每日数据库转储。默认为 plain

数据存储服务器设置

Weblate 容器要求使用 Valkey 或 Redis, 在 Docker 中运行 Weblate 时必须提供连接参数。

参见

配置缓存

REDIS_HOST

数据存储服务器主机名或 IP 地址。默认为 cache

REDIS_PORT

数据存储服务器端口。默认为 6379

REDIS_DB

数据存储数据库数目,默认为 1

REDIS_USER

Added in version 5.13: 数据存储数据库用户,默认不使用。

REDIS_PASSWORD

数据存储服务器密码,默认不使用。

REDIS_TLS

允许使用 SSL 进行数据存储连接。

REDIS_VERIFY_SSL

可多于禁用数据存储连接的 SSL 证书验证。

电子邮件服务器设置

要使外发电子邮件正常工作,您需要提供一个电子邮件服务器。

TLS 配置示例:

environment:
    WEBLATE_EMAIL_HOST: smtp.example.com
    WEBLATE_EMAIL_HOST_USER: user
    WEBLATE_EMAIL_HOST_PASSWORD: pass

SSL 配置的示例:

environment:
    WEBLATE_EMAIL_HOST: smtp.example.com
    WEBLATE_EMAIL_PORT: 465
    WEBLATE_EMAIL_HOST_USER: user
    WEBLATE_EMAIL_HOST_PASSWORD: pass
    WEBLATE_EMAIL_USE_TLS: 0
    WEBLATE_EMAIL_USE_SSL: 1
WEBLATE_EMAIL_HOST

电子邮件服务器主机名或 IP 地址。

WEBLATE_EMAIL_PORT

电子邮件服务器端口,默认为 25。

参见

EMAIL_PORT

WEBLATE_EMAIL_HOST_USER

电子邮件身份认证用户。

WEBLATE_EMAIL_HOST_PASSWORD

电子邮件验证密码。

WEBLATE_EMAIL_USE_SSL

与 SMTP 服务器通信时是否使用隐式 TLS(安全)连接。在大多数电子邮件文档中,这种 TLS 连接类型称为 SSL。通常在端口 465 上使用。如果遇到问题,请参阅显式 TLS 设置 WEBLATE_EMAIL_USE_TLS

在 4.11 版本发生变更: SSL/TLS支持是根据 WEBLATE_EMAIL_PORT 自动启用的。

WEBLATE_EMAIL_USE_TLS

与 SMTP 服务器通讯时是否使用 TLS(安全)连接。这用于显式 TLS 连接,通常在端口 587 或 25 上。如果您遇到挂起的连接,请参见隐式 TLS 设置 WEBLATE_EMAIL_USE_SSL

在 4.11 版本发生变更: SSL/TLS支持是根据 WEBLATE_EMAIL_PORT 自动启用的。

WEBLATE_EMAIL_BACKEND

将 Django 后端配置为用于发送电子邮件。

WEBLATE_AUTO_UPDATE

配置 Weblate 是否更新仓库以及如何更新。

参见

AUTO_UPDATE

备注

这是一个布尔值设定(使用 "true" 或者 "false")。

站点集成

WEBLATE_GET_HELP_URL

配置 GET_HELP_URL.

WEBLATE_STATUS_URL

配置 STATUS_URL.

配置 LEGAL_URL.

WEBLATE_PRIVACY_URL

配置 PRIVACY_URL.

WEBLATE_PASSWORD_RESET_URL

配置 PASSWORD_RESET_URL.

收集错误报告并监控性能

推荐从安装中系统地收集错误,请参见 收集错误报告并监控性能

要启用对 Rollbar 的支持,请进行以下设置:

ROLLBAR_KEY

您的 Rollbar 发布服务器访问令牌。

ROLLBAR_ENVIRONMENT

您的 Rollbar 环境,默认为 production

要启用对 Sentry 的支持,请进行以下设置:

SENTRY_DSN

你的 Sentry DSN,见 SENTRY_DSN.

SENTRY_ENVIRONMENT

您的 Sentry 环境(可选)。默认为 WEBLATE_SITE_DOMAIN

SENTRY_MONITOR_BEAT_TASKS

是否用 Sentry 监控 Celery Beat 任务,默认值是 True.

SENTRY_TRACES_SAMPLE_RATE

配置 SENTRY_TRACES_SAMPLE_RATE.

示例:

environment:
  SENTRY_TRACES_SAMPLE_RATE: 0.5
SENTRY_PROFILES_SAMPLE_RATE

配置 SENTRY_PROFILES_SAMPLE_RATE.

示例:

environment:
  SENTRY_PROFILES_SAMPLE_RATE: 0.5
SENTRY_SEND_PII

配置 SENTRY_SEND_PII.

语言本地化内容分发网络

WEBLATE_LOCALIZE_CDN_URL
WEBLATE_LOCALIZE_CDN_PATH

Added in version 4.2.1.

Configuration for CDN add-ons, including JavaScript 本地化 CDN and Translation files CDN.

WEBLATE_LOCALIZE_CDN_PATH 是容器内的路径。它应该存储在持久卷上,而不能存储在瞬态存储器中。

一种可能性是存储在 Weblate 数据目录中:

environment:
  WEBLATE_LOCALIZE_CDN_URL: https://cdn.example.com/
  WEBLATE_LOCALIZE_CDN_PATH: /app/data/l10n-cdn

备注

You are responsible for setting up serving of the files generated by Weblate, it only stores the files in configured location. See 语言本地化内容分发网络 for secure serving guidance.

更改启用的应用、检查、附加组件、机器翻译或自动修复

可以通过后面的变量来调整允许的检查、附加组件或自动修复的内建配置:

WEBLATE_ADD_APPS
WEBLATE_REMOVE_APPS
WEBLATE_ADD_CHECK
WEBLATE_REMOVE_CHECK
WEBLATE_ADD_AUTOFIX
WEBLATE_REMOVE_AUTOFIX
WEBLATE_ADD_ADDONS
WEBLATE_REMOVE_ADDONS
WEBLATE_ADD_MACHINERY

Added in version 5.6.1.

WEBLATE_REMOVE_MACHINERY

Added in version 5.6.1.

示例:

environment:
  WEBLATE_REMOVE_AUTOFIX: weblate.trans.autofixes.whitespace.SameBookendingWhitespace
  WEBLATE_ADD_ADDONS: customize.addons.MyAddon,customize.addons.OtherAddon

容器设置

WEBLATE_WORKERS

Added in version 4.6.1.

容器中运行的工作者进程的基本数量。如果没有设置,它将在容器启动时根据可用的CPU核数自动确定。

它被用来确定 CELERY_MAIN_OPTIONS, CELERY_NOTIFY_OPTIONS, CELERY_MEMORY_OPTIONS, CELERY_TRANSLATE_OPTIONS, CELERY_BACKUP_OPTIONS, CELERY_BEAT_OPTIONS, 和 WEB_WORKERS。你可以使用这些设置来微调。

CELERY_MAIN_OPTIONS
CELERY_NOTIFY_OPTIONS
CELERY_MEMORY_OPTIONS
CELERY_TRANSLATE_OPTIONS
CELERY_BACKUP_OPTIONS
CELERY_BEAT_OPTIONS

这些变量允许您调整 Celery 工作进程选项。它可以用于调整并发性(--concurrency 16),或使用不同的池实现(--pool=gevent)。

默认情况下,并发工作者的数量是基于 WEBLATE_WORKERS

示例:

environment:
  CELERY_MAIN_OPTIONS: --concurrency 16
CELERY_SINGLE_PROCESS

Added in version 5.7.1: 此变量可以设置为 1,以便只运行一个 Celery 进程。这会减少内存使用,但可能会影响 Weblate 性能。

environment:
  CELERY_SINGLE_PROCESS: 1
WEB_WORKERS

配置应该执行多少个 WSGI 工作进程。

默认是 WEBLATE_WORKERS 的一半,但始终至少是 2 个。

示例:

environment:
  WEB_WORKERS: 4

在 5.13 版本发生变更: WEB_WORKERS 配置 granian 将使用多少 worker 进程。

WEBLATE_SERVICE

定义应在容器内执行哪些服务,使用对象 横向扩展

定义了以下服务:

celery-beat

Celery任务调度器,应该只有一个实例在运行。这个容器也负责数据库结构的迁移,它应该在其他容器之前启动。

celery-backup

用于备份的 Celery 工作进程,应该只有一个实例在运行。

celery-celery

普通的 Celery 工作进程。

celery-memory

翻译记忆库 Celery 工作进程。

celery-notify

通知 Celery 工作进程。

celery-translate

自动翻译 Celery 工作进程。

web

Web 服务器。

WEBLATE_ANUBIS_URL

Added in version 5.11.4.

处理子请求身份认证的 Anubis 服务器 URL。这也许有助使用工作证明来筛选传入 HTTP 标头以阻止 AI 爬虫。要让此功能正常运转,你需要配置 Anubis for Subrequest Authentication .

Docker 容器卷

Weblate 容器导出了两个卷(datacache)。

备注

其他服务容器(如 PostgreSQL 或 Valkey)也有它们的数据卷,需要保持 Weblate 持久性。

PostgreSQL 容器在 /var/lib/postgresql 卷中存储数据库,Valkey 容器在 /data 卷中存储数据库。Valkey 容器默认不保存数据,需要额外配置来启用持久性。

以 Weblate 提供的示例作为配置的基础或者查看文档获取更多信息。

data 卷作为 /app/data 装载并被用来储存克隆的仓库等 Weblate 持久数据或者定制 Weblate 安装。DATA_DIR 更详细描述了存储内容。

data 卷也是存储 Weblate 定制内容,如 覆盖数据卷的设置替换标志和其他静态文件自定义代码 的地方。

Docker 卷在主机系统上的位置取决于您的 Docker 配置,但通常存储在 /var/lib/docker/volumes/weblate-docker_weblate-data/_data/ 中。(该路径由你的 docker-compose 目录的名称、容器和卷的名称组成)。

The cache volume is mounted as /app/cache and is used to store static files and CACHE_DIR. Its content is recreated on container startup and the volume can be mounted using ephemeral filesystem such as tmpfs, but the mount has to allow execution because Weblate stores generated helper files there.

When mounting /app/cache explicitly as tmpfs in Docker Compose, enable execution:

tmpfs:
  - /app/cache:exec

When also setting ownership options, keep the exec option:

tmpfs:
  - /app/cache:exec,uid=1000,gid=1000

当手动创建卷时,目录应该由 UID 1000 拥有,因为那是容器内使用的用户。

Weblate 容器也可以用只读根文件系统执行。这种情况下,应该挂载两个额外 tmpfs 卷:/tmp/run

只读根文件系统

Added in version 4.18.

运行只读根文件系统的容器时,需要两个额外的 tmpfs 卷 - /tmp/run

修改未暴露为 Docker 环境变量的设置项

Docker 环境变量 旨在暴露与 Weblate 安装相关的大多数 配置设置

如果您发现没有作为环境变量公开的设置,并且您认为它应该公开,请随时 要求在未来版本的 Weblate 中公开它

如果您需要修改未公开为 Docker 环境变量的设置,您仍然可以这样做,要么 来自数据卷,要么 扩展 Docker 镜像

覆盖数据卷的设置

您可以在 /app/data/settings-override.py 创建一个文件,即在 数据卷 的根目录,以扩展或覆盖通过环境变量定义的设置。

通过扩展 Docker 镜像覆盖设置

要在 Docker 镜像级别而不是从数据卷覆盖设置:

  1. 创建自定义 Python 包

  2. 将一个模块添加到您的包中,该模块从 weblate.settings_docker 导入所有设置。

    例如,在 建立 Python 模块weblate_customization/weblate_customization/settings.py 定义的示例包结构中,您可以使用以下初始代码创建一个文件:

    from weblate.settings_docker import *
    
  3. 创建一个继承自官方 Weblate Docker 镜像的自定义 Dockerfile,然后安装你的包并将 DJANGO_SETTINGS_MODULE 环境变量指向你的设置模块:

    FROM weblate/weblate
    
    USER root
    
    COPY weblate_customization /usr/src/weblate_customization
    RUN source /app/venv/bin/activate && uv pip install --no-cache-dir /usr/src/weblate_customization
    ENV DJANGO_SETTINGS_MODULE=weblate_customization.settings
    
    USER 1000
    
  4. 不要使用官方的 Weblate Docker 镜像,而是从这个 Dockerfile 文件构建一个自定义镜像。

    使用 docker-compose.override.yml无法干净地 做到这一点。您 可以build: . 添加到该文件中的 weblate 节点,但随后您的自定义镜像将在系统中被打上 weblate/weblate 的标签,这可能会出问题。

    因此,比起原封不动直接套用来自 官方仓库docker-compose.yml,并通过 docker-compose.override.yml 进行扩展,你或许想要复制一份 docker-compose.yml 文件对其进行编辑,然后借助 build: . 用编辑后的文件替换 image: weblate/weblate.

    有关使用 docker-compose 时从源代码构建镜像的详情请见 Compose file build reference.

  5. 扩展你的自定义设置模块来定义或重新定义设置。

    你可以定义上方 import 语句之前或之后的设置,以确定哪些设置优先。import 语句之前定义的设置可以被环境变量和数据卷中定义的设置覆盖所覆盖。不能覆盖 import 语句后定义的设置。

    你也可以更进一步。比如,你可以重现一些 weblate.docker_settings 所做的事,如将设置暴露为环境变量,或允许在数据卷中覆盖来自 Python 文件的设置。

替换标志和其他静态文件

Weblate 附带的静态文件可以通过放置到 /app/data/python/customize/static 中来覆盖(请参阅 Docker 容器卷)。例如,创建 /app/data/python/customize/static/favicon.ico 将替换 favicon。

提示

在容器启动时,这些文件被复制到相应的位置,因此需要在更改卷的内容后重新启动 Weblate。

这种方法也可以用来覆盖 Weblate 的模板。例如 法律组件 文件可以放在 /app/data/python/customize/templates/legal/documents 里。

或者,您也可以包括自己的模块(请参阅 定制 Weblate),并将其作为单独的卷添加到 Docker 容器中,例如:

weblate:
  volumes:
    - weblate-data:/app/data
    - ./weblate_customization/weblate_customization:/app/data/python/weblate_customization
  environment:
    WEBLATE_ADD_APPS: weblate_customization

自定义代码

备注

不同版本的 Weblate 内部 API 可能差异巨大,并不稳定。请在每次升级时审核与 Weblate 内部 API 交互的自定义代码。

你可以将额外的 Python 代码放进 /app/data/python/customize(见:Docker 容器卷)。它已作为 Weblate 内的一个 Django 程序被安装(如上所述,这是用来自定义模板和静态文件)。

这可被用来放置任何代码(如 编写自己的检查)或添加自定义维护任务到 Celery 任务计划程序。

An example of custom scheduled tasks in /app/data/python/customize/tasks.py.
"""Custom scheduled task."""

import subprocess  # noqa: S404

from celery.schedules import crontab

from weblate.utils.celery import app


@app.task
def custom_task() -> None:
    """Execute custom task code."""
    subprocess.run(["sleep", "1"], check=True)  # noqa: S607


@app.on_after_finalize.connect
def setup_periodic_tasks(sender, **kwargs) -> None:
    """Configure when periodic task is triggered."""
    sender.add_periodic_task(
        crontab(hour=1, minute=0), custom_task.s(), name="custom-task"
    )

集成第三方容器

可以用附加容器扩展 Weblate Docker 设置来提供补充性服务,比如机器翻译、拼写检查或其他增强翻译工作流的工具。这些服务可以集成进 Docker Compose 配置中,和 Weblate 一起工作。

添加第三方容器时,考虑下列因素:

  • 网络连接:将容器放在相同的 Docker 网络上确保不同容器能彼此通信

  • 数据持久性:对需要留存数据的服务使用卷

  • 安全:配置恰当的访问控制,避免暴露不必要的端口

LibreTranslate Docker 容器集成

LibreTranslate 是可以自托管的自由开源的机器翻译服务。将它与 Weblate 集成提供不依赖外部服务的离线机器翻译能力。

你可以把 LibreTranslate 服务加到 Weblate 部署中,方法是在 docker-compose.override.yml 文件中包含它。因它运行在 Docker 网络内部,所以只有 Weblate 能访问,不会暴露在公网上。

使用 docker-compose.override.yml 的基础设置:

services:
  libretranslate:
    image: libretranslate/libretranslate:latest
    command: --disable-web-ui
    restart: unless-stopped
    environment:
      LT_UPDATE_MODELS: true
    volumes:
      - libretranslate_models:/home/libretranslate/.local:rw
    healthcheck:
      test: ['CMD-SHELL', './venv/bin/python scripts/healthcheck.py']
      interval: 10s
      timeout: 4s
      retries: 4
      start_period: 5s

volumes:
  libretranslate_models:

对于 GPU 加速的翻译(如果你有 NVIDIA GPU 可用):

services:
  libretranslate:
    image: libretranslate/libretranslate:latest-cuda
    command: --disable-web-ui
    restart: unless-stopped
    environment:
      LT_UPDATE_MODELS: true
      PUID: root
    volumes:
      - libretranslate_models:/home/libretranslate/.local:rw
    healthcheck:
      test: ['CMD-SHELL', './venv/bin/python scripts/healthcheck.py']
      interval: 10s
      timeout: 4s
      retries: 4
      start_period: 5s
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

volumes:
  libretranslate_models:

docker compose down && docker compose up -d 启动服务后,在 Weblate 中配置 LibreTranslate:

  1. 访问 Weblate 管理界面

  2. 导航至 机器翻译自动建议

  3. 添加新的 LibreTranslate 服务的途径:

    服务:

    LibreTranslate

    API 网址:

    http://libretranslate:5000

    API 密钥:

    留空

已配置 LibreTranslate 可用于 Weblate 中的机器翻译。

备注

  • LibreTranslate 服务运行没有 web 用户界面(--disable-web-ui),只能通过 API 在 Docker 网络内部访问。

  • 容器启动时,模型会自动更新。(LT_UPDATE_MODELS: true)

  • 出于最优性能和数据安全目的用 Docker 卷留存数据。

  • 健康检查确保 Docker 引擎正确观测服务状态。

  • 对 GPU 加速,使用 CUDA 映像并保证系统有 NVIDIA Docker 支持。为了能使用 GPU,这个容器以特权用户身份运行。

  • 不暴露外部端口,使设置在默认情况下就安全。

Anubis Docker 容器集成

Anubis 是 web AI 防火墙工具,用来在服务器上拦截 AI 数据抓取器和其他破坏性流量。公开的 Weblate 安装通常需要它来避免由数据抓取导致的过大网站负载。

可用 Docker Compose 部署 Anubis:

anubis:
   image: ghcr.io/techarohq/anubis:latest
   environment:
      BIND: ":8923"
      DIFFICULTY: "4"
      METRICS_BIND: ":9090"
      SERVE_ROBOTS_TXT: "false"
      OG_PASSTHROUGH: "false"
      # The single space in TARGET enables subrequest authentication
      TARGET: " "
      # The redirect domain has to match WEBLATE_SITE_DOMAIN
      REDIRECT_DOMAINS: weblate.example.com
      # Generate a random private key using: openssl rand -hex 32
      ED25519_PRIVATE_KEY_HEX: "..."
      # Customize your Anubis policy
      POLICY_FNAME: /data/botPolicies.yaml
   healthcheck:
      test: ["CMD", "anubis", "--healthcheck"]
      interval: 5s
      timeout: 30s
      retries: 5
      start_period: 500ms
   volumes:
      - anubis-data:/data

volumes:
   anubis-data:

备注

以上配置中的 anubis-data 卷预计含有按您的需要配置了 bot 策略的 botPolicies.yaml 文件。

你至少需要按 https://anubis.techaro.lol/docs/admin/configuration/subrequest-auth 所述调整状态码。

同样推荐按 https://anubis.techaro.lol/docs/admin/policies/#storage-backends 所述配置持久化存储后端。

接着你可以用下列命令在 Weblate 中打开 Anubis:

environment:
   WEBLATE_ANUBIS_URL: http://anubis:8923

配置 PostgreSQL 服务器

PostgreSQL容器使用默认的PostgreSQL配置,它不会有效地利用你的CPU核心或内存。建议自定义配置以提高性能。

配置可以按照 https://hub.docker.com/_/postgres 数据库配置 中的描述来调整。匹配你的环境的配置可以使用 https://pgtune.leopard.in.ua/

容器内部构件

容器使用 supervisor 来启动单个服务。遇到 横向扩展,它只在一个容器中启动单个服务。

要检查服务状态,请使用:

docker compose exec --user weblate weblate supervisorctl status

每个 Celery 队列有单独服务(详见 使用 Celery 的后台任务)。你可以停止相应的 工作进程来停止处理某些任务:

docker compose exec --user weblate weblate supervisorctl stop celery-translate