Instructies voor configureren

Weblate installeren

Kies, afhankelijk van uw instellingen en ervaring, een voor u toepasselijke methode om te installeren:

Overzicht architectuur

digraph architecture { graph [fontname="sans-serif", fontsize=10, newrank=true, rankdir=LR, splines=ortho ]; node [fontname="sans-serif", fontsize=10, height=0, margin=.15, shape=box ]; edge [fontname="sans-serif", fontsize=10 ]; subgraph cluster_thirdparty { graph [color=lightgrey, label="Third-party services", style=filled ]; mt [label="Machine translation", style=dotted]; sentry [label="Sentry\nError collection", style=dotted]; graylog [label="Graylog\nLog collection", style=dotted]; mail [label="E-mail server"]; auth [label="SSO\nAuthentication provider", style=dotted]; } subgraph cluster_ingress { graph [color=lightgrey, label=Ingress, style=filled ]; web [label="Web server", shape=hexagon]; } subgraph cluster_weblate { graph [color=lightgrey, label="Weblate code-base", style=filled ]; celery [fillcolor="#144d3f", fontcolor=white, label="Celery workers", style=filled]; wsgi [fillcolor="#144d3f", fontcolor=white, label="WSGI server", style=filled]; } subgraph cluster_services { graph [color=lightgrey, label=Services, style=filled ]; redis [label="Redis\nTask queue\nCache", shape=cylinder]; db [label="PostgreSQL\nDatabase", shape=cylinder]; fs [label=Filesystem, shape=cylinder]; } web -> wsgi; web -> fs; celery -> mt [style=dotted]; celery -> sentry [style=dotted]; celery -> graylog [style=dotted]; celery -> mail; celery -> redis; celery -> db; celery -> fs; wsgi -> mt [style=dotted]; wsgi -> sentry [style=dotted]; wsgi -> graylog [style=dotted]; wsgi -> auth [style=dotted]; wsgi -> redis; wsgi -> db; wsgi -> fs; }

Webserver

Afhandeling van inkomende HTTP-verzoeken, Statische bestanden serveren.

Celery-werkers

Achtergrondtaken met Celery worden hier uitgevoerd.

Afhankelijk van uw werklast wilt u misschien het aantal werkers aanpassen.

Gebruik de toegewezen node bij het horizontaal op schaal brengen van Weblate.

WSGI-server

Een WSGI-server serveert webpagina’s aan gebruikers.

Gebruik de toegewezen node bij het horizontaal op schaal brengen van Weblate.

Database

PostgreSQL databaseserver voor het opslaan van alle inhoud, bekijk Instellingen database voor Weblate.

Gebruik een toegewezen node voor de database voor sites met honderden miljoenen gehoste woorden.

Redis

Redis-server voor cache en wachtrij voor taken, bekijk Achtergrondtaken met Celery.

Gebruik de toegewezen node bij het horizontaal op schaal brengen van Weblate.

Bestandssysteem

Opslag in bestandssysteem voor het opslaan van opslagruimten van het VCS en geüploade gebruikersgegevens. Dit wordt gedeeld door alle processen.

Gebruik opslag in een netwerk bij het horizontaal schalen van Weblate.

E-mailserver

SMTP-server voor uitgaande e-mail, bekijk Configureren van uitgaande e-mail. Het kan extern worden verschaft.

Hint

Installeren met Docker bevat PostgreSQL en Redis, wat het installeren gemakkelijker maakt.

Software vereisten

Besturingssysteem

Weblate werkt goed op Linux, FreeBSD en macOS. Andere op Unix gelijkende systemen zullen zeer waarschijnlijk ook goed werken.

Weblate wordt niet ondersteund op Windows. Maar het zou nog steeds kunnen werken en patches worden met vreugde geaccepteerd.

Zie ook

Overzicht architectuur beschrijft de algehele architectuur van Weblate en de vereiste services.

Python afhankelijkheden

Weblate is geschreven in Python en ondersteunt Python 3.11 of nieuwer. U kunt afhankelijkheden installeren met pip of vanuit de pakketten van uw distributie, de volledige lijst is beschikbaar in requirements.txt.

Meest opvallende afhankelijkheden:

Django

https://www.djangoproject.com/

Celery

https://docs.celeryq.dev/

Translate Toolkit

https://toolkit.translatehouse.org/

translation-finder

https://github.com/WeblateOrg/translation-finder

Python Social Auth

https://python-social-auth.readthedocs.io/

Django REST Framework

https://www.django-rest-framework.org/

Optionele afhankelijkheden

Specificatie optionele afhankelijkheden

Python pakketten

Weblate mogelijkheid

alibaba

Alibaba

amazon

Amazon Translate

antispam

Spambeveiliging

gelf

Graylog-logbeheer

gerrit

Gerrit

google

Google Cloud Translation Advanced met ondersteuning voor woordenlijst

ldap

LDAP authenticatie

mercurial

Mercurial

mysql

MySQL of MariaDB, bekijk Instellingen database voor Weblate

openai

OpenAI

postgres

PostgreSQL, bekijk Instellingen database voor Weblate

saml

SAML authenticatie

saml2idp

Integreren van SAML 2 IDP in Weblate

wlhosted

Hosted Weblate integratie

wllegal

Hosted Weblate integratie

wsgi

WSGI-server voor Weblate

zxcvbn

Wachtwoord authenticatie

Bij het installeren met pip, kunt u direct de gewenste mogelijkheden specificeren bij het installeren:

uv pip install "weblate[Postgres,Amazon,SAML]"

Of u kunt Weblate installeren met alle optionele mogelijkheden:

uv pip install "weblate[all]"

Of u kunt Weblate installeren zonder optionele mogelijkheden:

uv pip install weblate

Andere systeemvereisten

De volgende afhankelijkheden moeten op het systeem zijn geïnstalleerd:

Git

https://git-scm.com/

Pango, Cairo en gerelateerde header-bestanden en GObject introspectie-gegevens

https://cairographics.org/, https://www.gtk.org/docs/architecture/pango, see Pango en Cairo

git-review (optioneel voor ondersteuning voor Gerrit)

https://pypi.org/project/git-review/

git-svn (optioneel voor ondersteuning van Subversion)

https://git-scm.com/docs/git-svn

tesseract (alleen nodig als tesserocr binaire wheels niet beschikbaar zijn voor uw systeem)

https://github.com/tesseract-ocr/tesseract

licensee (optioneel voor detecteren van licentie bij maken van onderdeel)

https://github.com/licensee/licensee

Afhankelijkheden tijdens bouwen

U zou misschien, om enkele van de Python afhankelijkheden te bouwen, enkele van hun afhankelijkheden moeten installeren. Dit is afhankelijk van de manier waarop u ze installeert, raadpleeg dus uw individuele pakketten voor documentatie. U heeft deze niet nodig als u vooraf gebouwde Wheels gebruikt tijdens het installeren met pip of als u pakketten van distributies gebruikt.

Pango en Cairo

Weblate gebruikt Pango en Cairo voor het renderen van bitmapwidgets (bekijk De vertaling promoten) en controles voor renderen (bekijk Lettertypen beheren). U moet, om de bindingen voor Python hiervoor juist te installeren, eerst systeembibliotheken installeren - u heeft zowel Cairo als Pango nodig, die op hun beurt GLib nodig hebben. Deze zouden allemaal moeten worden geïnstalleerd met ontwikkkelingsbestanden en GObject introspectiegegevens.

Hardware vereisten

Weblate zou zonder problemen moeten kunnen worden uitgevoerd op elke hedendaagse hardware, het volgende is de minimale configuratie die is vereist om Weblate uit te voeren als een enkele host (Weblate, database en webserver):

  • 3 GB RAM

  • 2 CPU-bronnen

  • 1 GB opslagruimte

Notitie

Feitelijke vereisten voor uw installatie van Weblate kunnen enorm variëren, gebaseerd op de grootte van de vertalingen die erin beheerd moeten worden.

Geheugengebruik

Hoe meer geheugen hoe beter - het wordt gebruikt voor cachen op alle niveaus (bestandssysteem, database en Weblate). Voor honderden vertaalonderdelen wordt ten minste 4 GB RAM aanbevolen.

Hint

Voor systemen met minder geheugen dan aanbevolen, wordt Opstelling een-proces Celery aanbevolen.

CPU-gebruik

Veel gelijktijdige gebruikers verhogen het aantal benodigde CPU-bronnen.

Opslaggebruik

Het gewoonlijke gebruik voor opslag van de database ligt rond de 300 MB per 1 miljoen gehoste woorden.

Opslagruimte die nodig is voor gekloonde opslagruimten varieert, maar Weblate probeert hun grootte minimaal te houden door oppervlakkig te klonen.

Knooppunt

Voor kleine en gemiddelde sites (miljoenen gehoste woorden), kunnen alle onderdelen van Weblate (bekijk Overzicht architectuur) worden uitgevoerd op ene enkel knooppunt.

Wanneer u groeit naar honderden miljoenen gehoste woorden, wordt aanbevolen om een toegewezen knooppunt voor de database te hebben (bekijk Instellingen database voor Weblate).

Verifiëren van handtekeningen van uitgaven

Uitgaven van Weblate zijn cryptografisch ondertekend met Sigstore handtekeningen. De handtekeningen zijn gekoppeld aan de uitgave op GitHub.

Verificatie kan worden uitgevoerd met het sigstore-pakket. Het volgende voorbeeld verifieert de handtekening van de uitgave 5.4:

sigstore verify github \
   --cert-identity https://github.com/WeblateOrg/weblate/.github/workflows/setup.yml@refs/tags/weblate-5.4 \
   --bundle Weblate-5.4-py3-none-any.whl.sigstore \
   Weblate-5.4-py3-none-any.whl

Rechten voor bestandssysteem

Het proces van Weblate moet in staat zijn te lezen en schrijven naar de map waarin de gegevens worden bewaard - DATA_DIR. Alle bestanden binnen die map zouden eigendom moeten zijn van en kunnen worden geschreven door de gebruiker die alle processen van Weblate uitvoert (gewoonlijk WSGI en Celery, bekijk Server uitvoeren en Achtergrondtaken met Celery).

De standaard configuratie plaatst ze in dezelfde boom als de bronnen voor Weblate, het zou echter uw voorkeur kunnen hebben deze te verplaatsen naar een betere locatie, zoals: /var/lib/weblate.

Weblate probeert om deze mappen automatisch te maken, maar dat zal mislukken als het geen rechten heeft om dit te doen.

U zou ook voorzichtig moeten zijn bij het uitvoeren van Opdrachten voor beheer, omdat dat moet worden uitgevoerd onder dezelfde gebruiker als die welke Weblate zelf uitvoert, anders zouden rechten voor bepaalde bestanden misschien verkeerd zijn.

In de Docker container moeten alle bestanden in het volume /app/data eigendom zijn van de gebruiker weblate binnen de container (UID 1000).

Instellingen database voor Weblate

Aanbevolen wordt om Weblate uit te voeren met een PostgreSQL databaseserver.

PostgreSQL 13 en hoger wordt ondersteund. PostgreSQL 15 of nieuwer wordt aanbevolen.

MySQL en MariaDB wordt ondersteund, maar wordt niet aanbevolen voor nieuwe installaties.

Notitie

Momenteel worden geen andere databaseservers ondersteund, maar ondersteuning voor andere door Django ondersteunde databases zou mogelijk geïmplementeerd moeten kunnen worden.

Databaseverbindingen

In de standaard configuratie behoudt elk proces van Weblate een blijvende verbinding met de database. Blijvende verbindingen verbeteren de reactie door Weblate, maar zouden meer bronnen voor de databaseserver kunnen vereisen. Raadpleeg CONN_MAX_AGE en Persistent connections voor meer informatie.

Weblate heeft ten minste het volgende aantal verbindingen nodig:

  • \((4 \times \mathit{nCPUs}) + 2\) voor processen van Celery

  • \(\mathit{nCPUs} + 1\) voor werkers van WSGI

Dit is van toepassing op Docker container standaarden en voorbeeld configuraties die worden verschaft in deze documentatie, maar de aantallen zullen wijzigen als u het aantal werkers voor WSGI aanpast of het parallellisme van Celery aanpast.

De feitelijke limiet voor het aantal databaseverbindingen moet hoger zijn om rekening te houden met de volgende situaties:

  • Opdrachten voor beheer heeft ook zijn verbinding nodig.

  • Als het proces case wordt beëindigd (bijvoorbeeld door OOM killer), zou het de bestaande verbinding kunnen blokkeren tot time-out.

PostgreSQL

PostgreSQL is gewoonlijk de beste keuze voor op Django gebaseerde sites. Het is de verwijzingsdatabase die wordt gebruikt voor het implementeren van de databaselaag voor Django.

Notitie

Weblate gebruikt de extensie trigram die in sommige gevallen afzonderlijk moet worden geïnstalleerd. Zoek naar postgresql-contrib of een soortgelijk genaamd pakket.

Een database maken in PostgreSQL

Het is gewoonlijk een goed idee om Weblate uit te voeren in een afzonderlijke database, en afzonderlijk gebruikersaccount:

# If PostgreSQL was not installed before, set the main password
sudo -u postgres psql postgres -c "\password postgres"

# Create a database user called "weblate"
sudo -u postgres createuser --superuser --pwprompt weblate

# Create the database "weblate" owned by "weblate"
sudo -u postgres createdb -E UTF8 -O weblate weblate

Hint

Als u de gebruiker van Weblate geen superuser in PostgreSQL wilt maken, kun u dat weglaten. In dat geval zult u enkele stappen voor de migratie handmatig moeten uitvoeren, omdat een superuser van PostgreSQL in het schema Weblate zal gebruiken:

CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE EXTENSION IF NOT EXISTS btree_gin;

Weblate configureren om PostgreSQL te gebruiken

De snipper uit settings.py voor PostgreSQL:

DATABASES = {
    "default": {
        # Database engine
        "ENGINE": "django.db.backends.postgresql",
        # Database name
        "NAME": "weblate",
        # Database user
        "USER": "weblate",
        # Configures name of the PostgreSQL role to alter during the database migration
        # "ALTER_ROLE": "weblate",
        # Database password
        "PASSWORD": "password",
        # Set to empty string for localhost
        "HOST": "database.example.com",
        # Set to empty string for default
        "PORT": "",
        # Persistent connections
        "CONN_MAX_AGE": None,
        "CONN_HEALTH_CHECKS": True,
    }
}

De migratie van de database voert uit ALTER ROLE op de rol van de database die wordt gebruikt door Weblate. In de meeste gevallen komt de naam van de rol overeen met de gebruikersnaam. In meer complexe opstellingen is de naam van de rol een andere dan de gebruikersnaam, en zult u een fout krijgen over een niet bestaande rol tijdens het migreren van de database (psycopg2.errors.UndefinedObject: role "weblate@hostname" does not exist). Bekend is dat dit gebeurt met Azure Database voor PostgreSQL, maar het is niet beperkt tot die omgeving. Stel ALTER_ROLE in om de naam van de rol te wijzigen die Weblate zou moeten wijzigen tijdens het migreren van de database.

MySQL en MariaDB

Waarschuwing

Hoewel ondersteuning voor MySQL en MariaDB nog steeds wordt onderhouden in Weblate, ligt onze primaire focus op PostgreSQL. Aanbevolen wordt om PostgreSQL te gebruiken voor nieuwe installaties, en om bestaande installaties te migreren naar PostgreSQL, bekijk Migreren vanuit andere databases naar PostgreSQL.

Sommige mogelijkheden van Weblate zullen beter presteren met PostgreSQL. Dit omvat zoeken en vertaalgeheugen, die beide de mogelijkheden voor volledige tekst in de database gebruiken en de implementatie van PostgreSQL daarin is superieur.

Weblate kan ook worden gebruikt met MySQL of MariaDB, bekijk MySQL notes en MariaDB notes voor valkuilen bij het gebruiken van Django daarbij. Vanwege de beperkingen wordt aanbevolen om PostgreSQL te gebruiken voor nieuwe installaties.

Weblate vereist ten minste MySQL 8 of ten minste MariaDB 10.5.

De volgende configuratie wordt aanbevolen voor Weblate:

  • Gebruik de tekenset utf8mb4 om weergave van de hogere vlakken in Unicode mogelijk te maken (bijvoorbeeld emoji’s).

  • Configureer de server met innodb_large_prefix om langere indices voor tekstvelden mogelijk te maken.

  • Stel het niveau voor isoleren in op READ COMMITTED.

  • De modus voor SQL zou moeten zijn ingesteld op STRICT_TRANS_TABLES.

MySQL 8.x, MariaDB 10.5.x of nieuwer hebben een redelijke standaard configuratie, zodat aanpassen van de server niet nodig zou zijn en alles wat nodig zou kunnen zijn kan worden geconfigureerd aan de kant van de cliënt.

Hieronder staat een voorbeeld /etc/my.cnf.d/server.cnf voor een server met 8 GB RAM. Deze instellingen zouden voldoende moeten zijn voor de meeste installaties. MySQL en MariaDB zijn zo af te stemmen dat de prestaties van uw server worden verhoogd, maar die worden geacht niet nodig te zijn, tenzij u van plan bent om tegelijkertijd grote aantallen gebruikers toe te laten tot het systeem. Bekijk de verscheidene documentatie van verkopers voor deze details.

Het is absoluut kritisch voor het verminderen van problemen bij het installeren dat de instelling innodb_file_per_table juist is ingesteld en dat MySQL/MariaDB opnieuw wordt gestart voordat u Weblate installeert.

[mysqld]
character-set-server = utf8mb4
character-set-client = utf8mb4
collation-server = utf8mb4_unicode_ci

datadir=/var/lib/mysql

log-error=/var/log/mariadb/mariadb.log

innodb_large_prefix=1
innodb_file_format=Barracuda
innodb_file_per_table=1
innodb_buffer_pool_size=2G
sql_mode=STRICT_TRANS_TABLES

Hint

In het geval dat u de fout #1071 - Specified key was too long; max key length is 767 bytes krijgt, werk uw configuratie bij door de instellingen innodb van hierboven op te nemen en start uw installatie opnieuw.

Hint

In het geval dat u de fout #2006 - MySQL server has gone away krijgt, zou configureren van CONN_MAX_AGE kunnen helpen.

Weblate configureren om te gebruiken met MySQL/MariaDB

De snipper uit settings.py voor MySQL en MariaDB:

DATABASES = {
    "default": {
        # Database engine
        "ENGINE": "django.db.backends.mysql",
        # Database name
        "NAME": "weblate",
        # Database user
        "USER": "weblate",
        # Database password
        "PASSWORD": "password",
        # Set to empty string for localhost
        "HOST": "127.0.0.1",
        # Set to empty string for default
        "PORT": "3306",
        # In case you wish to use additional
        # connection options
        "OPTIONS": {},
    }
}

U zou ook het gebruikersaccount weblate in MySQL of MariaDB moeten maken voordat u de installatie begint. Gebruik de opdrachten hieronder om dat te doen:

GRANT ALL ON weblate.* to 'weblate'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Andere configuraties

Configureren van uitgaande e-mail

Weblate verzendt e-mails bij verschillende gebeurtenissen - voor het activeren van een account en bij verscheidene notificaties die worden geconfigureerd door gebruikers. Hiervoor heeft het toegang nodig tot een SMTP-server.

Het instellen van de mailserver wordt geconfigureerd met deze instellingen: EMAIL_HOST, EMAIL_HOST_PASSWORD, EMAIL_USE_TLS, EMAIL_USE_SSL, EMAIL_HOST_USER en EMAIL_PORT. Hun namen verklaren zichzelf voldoende, maar u kunt meer informatie vinden in de documentatie van Django.

Hint

In het geval u een fout krijgt over niet ondersteunde authenticatie (bijvoorbeeld SMTP AUTH extension not supported by server), wordt dat heel waarschijnlijk veroorzaakt door een onveilige verbinding te gebruiken en de server weigert op die manier te authenticeren. Probeer in een dergelijk geval EMAIL_USE_TLS in te schakelen.

Uitvoeren achter een omgekeerde proxy

Verscheidene mogelijkheden in Weblate vertrouwen erop een cliënt IP-adres op te kunnen halen. Dit omvat Opvraaglimiet gebruiken, Spambeveiliging of Revisielogboek.

Weblate parst het IP-adres vanuit het REMOTE_ADDR dat is ingesteld door de afhandeling van WSGI. Dit zou leeg kunnen zijn (als een socket wordt gebruikt voor WSGI) of een omgekeerd proxy-adres kunnen bevatten, dus Weblate heeft een aanvullende kop HTTP nodig met het IP-adres van de cliënt.

Instellen van IP_BEHIND_REVERSE_PROXY zou genoeg kunnen zijn voor de meest gewone opstellingen, maar u zou misschien IP_PROXY_HEADER en IP_PROXY_OFFSET ook moeten aanpassen (gebruik WEBLATE_IP_PROXY_HEADER en WEBLATE_IP_PROXY_OFFSET in de container van Docker).

Hint

Deze configuratie kan niet ingeschakeld worden, omdat dat het voor het IP-adres mogelijk zou maken om te spoofen op installaties die geen juist geconfigureerde omgekeerde proxy hebben.

Een ander ding dat moet worden verzorgd is de kop Host. Het zou overeen moeten komen met dat wat is geconfigureerd als SITE_DOMAIN. Aanvullende configuratie in uw omgekeerde proxy zou misschien nodig kunnen zijn (gebruik bijvoorbeeld ProxyPreserveHost On voor Apache of proxy_set_header Host $host; met nginx).

HTTP proxy

Weblate voert geen opdrachten voor VCS uit en die accepteren de proxyconfiguratie uit de omgeving. De aanbevolen benadering is om de instellingen voor de proxy te definiëren in settings.py:

import os

os.environ["http_proxy"] = "http://proxy.example.com:8080"
os.environ["HTTPS_PROXY"] = "http://proxy.example.com:8080"

Configuratie aanpassen

Kopieer weblate/settings_example.py naar weblate/settings.py en pas het aan zodat het overeen komt met uw opstelling. U zult waarschijnlijk de volgende opties willen veranderen:

ADMINS

Lijst met beheerders van de site om notificaties te ontvangen als er iets mis gaat, bijvoorbeeld notificaties voor mislukte samenvoegingen, of fouten in Django.

Contactformulier verzendt hier ook e-mail over, tenzij ADMINS_CONTACT is geconfigureerd.

ALLOWED_HOSTS

U moet dit instellen met de vermelding van de hosts die uw site wordt geacht te serveren. Bijvoorbeeld:

ALLOWED_HOSTS = ["demo.weblate.org"]

Als alternatief kunt u een jokerteken opnemen:

ALLOWED_HOSTS = ["*"]

SESSION_ENGINE

Configureer hoe uw sessies zullen worden opgeslagen. In het geval dat u de standaard backend van het database-programma behoud, zou u: weblate clearsessions in het schema moeten opnemen om gegevens van verouderde sessies uit de database te verwijderen.

Als u Redis gebruikt als cache (bekijk Cachen inschakelen) wordt aanbevolen om het ook voor sessies te gebruiken:

SESSION_ENGINE = "django.contrib.sessions.backends.cache"

DATABASES

Connectiviteit met de databaseserver, controleer de documentatie van Django voor meer details.

DEBUG

Schakel dit voor alle productieservers uit. Met de modus debug ingeschakeld, zal Django, in het geval van fouten, sporen die terugvoeren naar die fouten aan gebruikers sturen, wanneer u het uitschakelt zullen de fouten per e-mail worden verzonden aan ADMINS (zie boven).

Modus Debug vertraagt ook Weblate, omdat Django in dat geval veel meer informatie intern opslaat.

DEFAULT_FROM_EMAIL

E-mailadres afzender voor uitgaande e-mail, bijvoorbeeld e-mails voor het registreren.

SECRET_KEY

Sleutel, gebruikt door Django, om enige informatie te tekenen in cookies, bekijk Django geheime sleutel voor meer informatie.

Zie ook

SECRET_KEY

SERVER_EMAIL

E-mail, gebruikt als afzenderadres, voor het sturen van e-mails aan de beheerder, bijvoorbeeld notificaties voor mislukt samenvoegen.

Zie ook

SERVER_EMAIL

De database vullen

Nadat uw configuratie voltooid is, kunt u migrate uitvoeren om de structuur van de database te maken. Nu zou u in staat moeten zijn vertaalprojecten te maken met de beheerinterface.

Als u daar eenmaal klaar mee bent zou u ook Prestatieverslag in de beheerinterface moeten controleren, dat u hints zal geven over potentiële niet optimale configuratie voor uw site.

Productie opstelling

Voor een productie opstelling zou u aanpassingen moeten uitvoeren die zijn beschreven in de volgende gedeelten. De meest kritische instellingen zullen een waarschuwing activeren, die wordt aangegeven door een uitroepteken in de bovenste balk indien ingelogd als een superuser:

../_images/admin-wrench.webp

Ook wordt aanbevolen de controles te inspecteren die worden geactiveerd door Django (hoewel u ze niet allemaal zou hoeven te repareren):

weblate check --deploy

U kunt ook precies dezelfde controlelijst bekijken in Prestatieverslag van de Beheerinterface.

Modus Debug uitschakelen

Schakel de modus Debug van Django uit (DEBUG) met:

DEBUG = False

Met de modus Debug ingeschakeld slaat Django alle uitgevoerde query’s op en laat gebruikers sporen zien die terugvoeren naar fouten, wat in een productie opstelling niet gewenst is.

Juist geconfigureerde beheerders

Stel de correcte adressen voor de beheerders in voor de instelling ADMINS om te definiëren wie e-mails moet ontvangen als er iets mis gaat met de server, bijvoorbeeld:

ADMINS = (("Your Name", "your_email@example.com"),)

Correcte domein site instellen

Pas de naam van de site en het domein aan in de beheerinterface, anders zullen koppelingen in RSS of e-mails voor registreren niet werken. Dit wordt geconfigureerd met SITE_DOMAIN wat de domeinnaam van de site zou moeten bevatten.

Veranderd in versie 4.2: Voorafgaande aan de uitgave 4.2 werd in plaats daarvan het framewerk sites van Django gebruikt, bekijk The “sites” framework.

Configureer HTTPS correct

Sterk aanbevolen wordt om Weblate uit te voeren met het versleutelde protocol HTTPS. Na het inschakelen daarvan zou u ENABLE_HTTPS moeten instellen in de instellingen:

ENABLE_HTTPS = True

Hint

U zou misschien ook HSTS willen instellen, bekijk SSL/HTTPS voor meer details.

SECURE_HSTS_SECONDS juist instellen

Als uw site wordt geserveerd over SSL, moet u een waarde overwegen voor SECURE_HSTS_SECONDS in settings.py om HTTP Strict Transport Security in te schakelen. Standaard is het ingesteld op 0, zoals hieronder weergegeven.

SECURE_HSTS_SECONDS = 0

Indien ingesteld op een niet nul waarde Integer, stelt django.middleware.security.SecurityMiddleware de kop HTTP Strict Transport Security in voor alle antwoorden die dat nog niet hebben.

Waarschuwing

Verkeerd instellen hiervan kan onomkeerbaar (voor enige tijd) uw site verstoren. Lees eerst de documentatie HTTP Strict Transport Security.

Een krachtig databaseprogramma gebruiken

  • Gebruik PostgreSQL voor een productieomgeving, bekijk Instellingen database voor Weblate voor meer informatie.

  • Gebruik een aanliggende locatie voor het uitvoeren van de databaseserver, anders zouden de prestaties van het netwerk of de betrouwbaarheid ervan uw ervaring met Weblate kunnen ruïneren.

  • Controleer de prestaties van de databaseserver of pas zijn configuratie aan, door bijvoorbeeld PGTune te gebruiken.

Cachen inschakelen

Gebruik, indien mogelijk, Redis vanuit Django door de variabele voor de configuratie CACHES aan te passen, bijvoorbeeld:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/0",
        # If redis is running on same host as Weblate, you might
        # want to use unix sockets instead:
        # 'LOCATION': 'unix:///var/run/redis/redis.sock?db=0',
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PARSER_CLASS": "redis.connection.HiredisParser",
        },
    }
}

Hint

In het geval u instellingen van Redis voor de cache wijzigt, moet u ze misschien ook voor Celery aanpassen, bekijk Achtergrondtaken met Celery.

Cachen avatar

In aanvulling op het cachen van Django, voert Weblate ook cachen van avatars uit. Aanbevolen wordt om hiervoor een afzonderlijke, door bestanden gesteunde, cache te gebruiken:

CACHES = {
    "default": {
        # Default caching backend setup, see above
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "unix:///var/run/redis/redis.sock?db=0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PARSER_CLASS": "redis.connection.HiredisParser",
        },
    },
    "avatar": {
        "BACKEND": "django.core.cache.backends.filebased.FileBasedCache",
        "LOCATION": os.path.join(DATA_DIR, "avatar-cache"),
        "TIMEOUT": 604800,
        "OPTIONS": {
            "MAX_ENTRIES": 1000,
        },
    },
}

Verzenden van e-mail configureren

Weblate moet e-mails kunnen verzenden bij verscheidene gelegenheden, en deze e-mails zouden juiste afzenderadres moeten hebben, configureer SERVER_EMAIL en DEFAULT_FROM_EMAIL om overeen te komen met uw omgeving, bijvoorbeeld:

SERVER_EMAIL = "admin@example.org"
DEFAULT_FROM_EMAIL = "weblate@example.org"

Notitie

Stel, om het verzenden van e-mails door Weblate uit te schakelen, EMAIL_BACKEND in op django.core.mail.backends.dummy.EmailBackend.

Dit zal alle aflevering van e-mail uitschakelen, inclusief e-mails voor registreren of herstellen van wachtwoorden.

Instellen van toegestane hosts

Django vereist ALLOWED_HOSTS om een lijst te bevatten van domeinnamen die uw site mag serveren, leeg laten zal alle verzoeken blokkeren.

In het geval dit niet is geconfigureerd om overeen te komen met uw server van HTTP, zult u fouten krijgen als Invalid HTTP_HOST header: '1.1.1.1'. You may need to add '1.1.1.1' to ALLOWED_HOSTS.

Hint

Op de Docker container is dit beschikbaar als WEBLATE_ALLOWED_HOSTS.

Django geheime sleutel

De instelling SECRET_KEY wordt door Django gebruikt om cookies te ondertekenen, en u zou echt uw eigen waarde moeten genereren, in plaats van die uit de voorbeeld opstelling te gebruiken.

U kunt een nieuwe sleutel maken met weblate-generate-secret-key dat met Weblate wordt meegeleverd.

Zie ook

SECRET_KEY

Onderhoudstaken uitvoeren

Voor optimale prestaties is het een goed idee om enkele onderhoudstaken op de achtergrond uit te voeren. Dit wordt automatisch gedaan door Achtergrondtaken met Celery en behandelt de volgende taken:

  • Gezondheidscontrole configuratie (elk uur).

  • Openstaande wijzigingen doorvoeren (elk uur), bekijk Vetraagd indienen en commit_pending.

  • Alarmen voor onderdelen bijwerken (dagelijks).

  • Takken op afstand bijwerken (‘s nachts), bekijk AUTO_UPDATE.

  • Back-up vertaalgeheugen naar JSON (dagelijks), bekijk dump_memory.

  • Onderhoudstaken voor volledige tekst en database (dagelijkse en wekelijkse taken), bekijk cleanuptrans.

Systeemlocalen en codering

De systeemlocalen zouden moeten zijn geconfigureerd naar die welke geschikt zijn voor UTF-8. Op de meeste distributies voor Linux is dat de standaard instelling. In het geval dat het voor uw systeem niet het geval is, wijzig locales naar de variant UTF-8.

Bijvoorbeeld door /etc/default/locale te bewerken en daar in te stellen LANG="C.UTF-8".

In sommige gevallen hebben de individuele services afzonderlijke configuratie voor locales. Dit varieert tussen distributie en webservers, dus controleer de documentatie van de pakketten voor uw webserver daarop.

Apache op Ubuntu gebruikt /etc/apache2/envvars:

export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'

Apache op CentOS gebruikt /etc/sysconfig/httpd (of /opt/rh/httpd24/root/etc/sysconfig/httpd):

LANG='en_US.UTF-8'

Aangepaste autoriteit certificaat gebruiken

Weblate verifieert certificaten van SSL tijdens HTTP-verzoeken. Voor het geval u een aangepaste autoriteit voor certificaten gebruikt die niet als vertrouwd is aangemerkt in de standaard bundels, zult u het certificaat moeten toevoegen als vertrouwd.

De voorkeursmethode is om dat te doen op systeemniveau, controleer de documentatie van uw distributie voor meer details (bijvoorbeeld voor Debian kan dit worden gedaan door het CA-certificaat te plaatsen in /usr/local/share/ca-certificates/ en update-ca-certificates uit te voeren).

Hint

De Weblate container heeft het niet opgenomen in het zoekpad, u moet het volledige pad specificeren om het uit te voeren. Bijvoorbeeld:

docker compose exec -u root weblate /usr/sbin/update-ca-certificates

Als dat eenmaal is gedaan, zullen de gereedschappen van het systeem het certificaat vertrouwen en dat is inclusief Git.

Voor code van Python zult u verzoeken moeten configureren om de systeem CA-bundel te gebruiken, in plaats van die welke ermee is meegeleverd. Dat kan worden bereikt door de volgende snipper te plaatsen in settings.py (het pad is specifiek voor Debian):

import os

os.environ["REQUESTS_CA_BUNDLE"] = "/etc/ssl/certs/ca-certificates.crt"

Comprimeren toebehoren cliënt

Weblate komt met heel veel bestanden voor JavaScript en CSS. Om redenen van prestaties is het goed om ze te comprimeren voordat ze naar een cliënt worden verzonden. In de standaard configuratie wordt dit direct uitgevoerd ten koste van een kleine extra belasting. Op grote installaties wordt aanbevolen om de offline modus voor comprimeren in te schakelen. Dat moet worden gedaan in de configuratie en de compressie moet worden geactiveerd bij elke upgrade van Weblate.

Het inschakelen in de configuratie is eenvoudig door django.conf.settings.COMPRESS_OFFLINE in te schakelen en django.conf.settings.COMPRESS_OFFLINE_CONTEXT te configureren (de laatste is al opgenomen in de voorbeeldconfiguratie):

COMPRESS_OFFLINE = True

Bij elke uitrol moet u de bestanden comprimeren om overeen te komen met de huidige versie:

weblate compress

Hint

De officiële Docker image heeft deze mogelijkheid al ingeschakeld.

Server uitvoeren

Hint

In het geval u geen ervaring hebt met de services die hieronder beschreven worden, zou u misschien Installeren met Docker willen proberen.

U zult verschillende services nodig hebben om Weblate uit te voeren, de aanbevolen opstelling bestaat uit:

Notitie

Er bestaan enkele afhankelijkheden tussen de services, cache en database zouden bijvoorbeeld moeten worden uitgevoerd bij het opstarten van Celery of uWSGI-processen.

In de meeste gevallen zult u alle services uitvoeren op een enkele (virtuele) server, maar voor het geval uw installatie nogal vol is, kunt u de services opsplitsen. De enige beperking hierin is dat Celery- en WSGI-servers toegang nodig hebben tot DATA_DIR.

Notitie

Het proces van WSGI moet worden uitgevoerd onder dezelfde gebruiker als die voor het proces van Celery, anders zullen bestanden in de DATA_DIR worden opgeslagen met gemixte eigenaren, wat leidt tot problemen tijdens uitvoering.

Bekijk ook Rechten voor bestandssysteem en Achtergrondtaken met Celery.

Webserver uitvoeren

Uitvoeren van Weblate is niet anders dan het uitvoeren van enig ander op Django gebaseerd programma. Django wordt gewoonlijk uitgevoerd als WSGI of fcgi (bekijk voorbeelden voor de verschillende webservers hieronder).

U kunt, om te testen, de ingebouwde webserver in Django gebruiken:

weblate runserver

Waarschuwing

GEBRUIK DEZE SERVER NIET IN EEN PRODUCTIE OPSTELLING. Het heeft niet voldoende beveiligingstesten ondergaan of prestatietesten. Bekijk ook de documentatie van Django op runserver.

Hint

De ingebouwde server van Django serveert statische bestanden alleen met DEBUG ingeschakeld, omdat het alleen voor ontwikkeling is bedoeld. Voor gebruik in productie, bekijk de opstellingen voor WSGI in Voorbeeld configuratie voor NGINX en uWSGI, Voorbeeld configuratie voor Apache, Voorbeeld configuratie voor Apache en Gunicorn, en Statische bestanden serveren.

Statische bestanden serveren

Django moet zijn statische bestanden verzamelen in een enkele map. Voer, om dat te doen, weblate collectstatic --noinput uit. Dat zal de statische bestanden kopiëren naar een map die wordt gespecificeerd door de instelling STATIC_ROOT (dit is standaard een map static binnen CACHE_DIR).

Aanbevolen wordt om statische bestanden direct vanaf uw webserver te serveren, u zou dat moeten gebruiken voor de volgende paden:

/static/

Serveert statische bestanden voor Weblate en de beheerinterface (die wordt gedefinieerd door STATIC_ROOT).

/media/

Gebruikt voor uploaden van gebruikersmedia (bijv. schermafdrukken).

/favicon.ico

Zou moeten worden herschreven om een regel te herschrijven om te serveren /static/favicon.ico.

Beleid beveiliging inhoud

De standaard configuratie van Weblate schakelt middleware weblate.middleware.SecurityMiddleware in die op beveiliging gerelateerde HTTP-koppen, zoals Content-Security-Policy of X-XSS-Protection, instelt. Deze worden standaard ingesteld om te werken met Weblate en zijn configuratie, maar dit zou aanpassingen kunnen vergen voor uw omgeving.

Voorbeeld configuratie voor NGINX en Gunicorn

De volgende configuratie voert Weblate met Gunicorn onder de webserver NGINX (ook beschikbaar als weblate/examples/weblate.nginx.gunicorn.conf):

#
# nginx configuration for Weblate
#
# You will want to change:
#
# - server_name
# - change /home/weblate/weblate-env to location where Weblate virtualenv is placed
# - change /home/weblate/data to match your DATA_DIR
# - change /home/weblate/data/cache to match your CACHE_DIR
# - change python3.12 to match your Python version
# - change weblate user to match your Weblate user
#
server {
    listen 80;
    server_name weblate;
    # Not used
    root /var/www/html;

    location ~ ^/favicon.ico$ {
        # CACHE_DIR/static/favicon.ico
        alias /home/weblate/data/cache/static/favicon.ico;
        expires 30d;
    }

    location /static/ {
        # CACHE_DIR/static/
        alias /home/weblate/data/cache/static/;
        expires 30d;
    }

    location /media/ {
        # DATA_DIR/media/
        alias /home/weblate/data/media/;
        expires 30d;
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_pass http://unix:/run/gunicorn.sock;
        proxy_read_timeout 3600;
    }
}

Voorbeeld configuratie voor NGINX en uWSGI

Gebruik, om de productie webserver uit te voeren, de WSGI-wrapper die wordt geïnstalleerd met Weblate (in het geval van een virtuele omgeving is dit geïnstalleerd als ~/weblate-env/lib/python3.9/site-packages/weblate/wsgi.py). Vergeet niet om het zoekpad naar Python naar uw virtualenv ook in te stellen (bijvoorbeeld met virtualenv = /home/user/weblate-env in uWSGI).

De volgende configuratie voert Weblate als uWSGI uit onder de webserver NGINX.

Configuratie voor NGINX (ook beschikbaar als weblate/examples/weblate.nginx.conf):

#
# nginx configuration for Weblate
#
# You will want to change:
#
# - server_name
# - change /home/weblate/weblate-env to location where Weblate virtualenv is placed
# - change /home/weblate/data to match your DATA_DIR
# - change /home/weblate/data/cache to match your CACHE_DIR
# - change python3.12 to match your Python version
# - change weblate user to match your Weblate user
#
server {
    listen 80;
    server_name weblate;
    # Not used
    root /var/www/html;

    location ~ ^/favicon.ico$ {
        # CACHE_DIR/static/favicon.ico
        alias /home/weblate/data/cache/static/favicon.ico;
        expires 30d;
    }

    location /static/ {
        # CACHE_DIR/static/
        alias /home/weblate/data/cache/static/;
        expires 30d;
    }

    location /media/ {
        # DATA_DIR/media/
        alias /home/weblate/data/media/;
        expires 30d;
    }

    location / {
        include uwsgi_params;
        # Needed for long running operations in admin interface
        uwsgi_read_timeout 3600;
        # Adjust based to uwsgi configuration:
        uwsgi_pass unix:///run/uwsgi/app/weblate/socket;
        # uwsgi_pass 127.0.0.1:8080;
    }
}

Configuratie voor uWSGI (ook beschikbaar als weblate/examples/weblate.uwsgi.ini):

#
# uWSGI configuration for Weblate
#
# You will want to change:
#
# - change /home/weblate/weblate-env to location where Weblate virtualenv is placed
# - change /home/weblate/data to match your DATA_DIR
# - change python3.12 to match your Python version
# - change weblate user to match your Weblate user
#
[uwsgi]
plugins       = python3
master        = true
protocol      = uwsgi
socket        = 127.0.0.1:8080
wsgi-file     = /home/weblate/weblate-env/lib/python3.12/site-packages/weblate/wsgi.py

# Add path to Weblate checkout if you did not install
# Weblate by pip
# python-path   = /path/to/weblate

# In case you're using virtualenv uncomment this:
virtualenv = /home/weblate/weblate-env

# Needed for OAuth/OpenID
buffer-size   = 8192

# Reload when consuming too much of memory
reload-on-rss = 250

# Increase number of workers for heavily loaded sites
workers       = 8

# Enable threads for Sentry error submission
enable-threads = true

# Child processes do not need file descriptors
close-on-exec = true

# Avoid default 0000 umask
umask = 0022

# Run as weblate user
uid = weblate
gid = weblate

# Enable harakiri mode (kill requests after some time)
# harakiri = 3600
# harakiri-verbose = true

# Enable uWSGI stats server
# stats = :1717
# stats-http = true

# Do not log some errors caused by client disconnects
ignore-sigpipe = true
ignore-write-errors = true
disable-write-exception = true

Voorbeeld configuratie voor Apache

Aanbevolen wordt om MPM vooraf te forken bij het gebruiken van WSGI met Weblate.

De volgende configuratie voert Weblate uit als WSGI, u moet mod_wsgi hebben ingeschakeld (beschikbaar als weblate/examples/apache.conf):

#
# VirtualHost for Weblate
#
# You will want to change:
#
# - ServerAdmin and ServerName
# - change /home/weblate/weblate-env to location where Weblate virtualenv is placed
# - change /home/weblate/data to match your DATA_DIR
# - change /home/weblate/data/cache to match your CACHE_DIR
# - change python3.12 to match Python version mod-wsgi is compiled for
# - change weblate user to match your Weblate user
#
<VirtualHost *:80>
    ServerAdmin admin@weblate.example.org
    ServerName weblate.example.org

    # CACHE_DIR/static/favicon.ico
    Alias /favicon.ico /home/weblate/data/cache/static/favicon.ico

    # CACHE_DIR/static/
    Alias /static/ /home/weblate/data/cache/static/
    <Directory /home/weblate/data/cache/static/>
        Require all granted
    </Directory>

    # DATA_DIR/media/
    Alias /media/ /home/weblate/data/media/
    <Directory /home/weblate/data/media/>
        Require all granted
    </Directory>

    # Path to your Weblate virtualenv
    WSGIDaemonProcess weblate python-home=/home/weblate/weblate-env user=weblate request-timeout=600
    WSGIProcessGroup weblate
    WSGIApplicationGroup %{GLOBAL}

    WSGIScriptAlias / /home/weblate/weblate-env/lib/python3.12/site-packages/weblate/wsgi.py process-group=weblate
    WSGIPassAuthorization On

    <Directory /home/weblate/weblate-env/lib/python3.12/site-packages/weblate/>
        <Files wsgi.py>
        Require all granted
        </Files>
    </Directory>

</VirtualHost>

Notitie

Weblate vereist Python 3, zorg er dus voor dat u de variant voor Python 3 van modwsgi uitvoert. Gewoonlijk is die beschikbaar als een afzonderlijk pakket, bijvoorbeeld libapache2-mod-wsgi-py3.

Gebruik de overeenkomende versie van Python om Weblate te installeren.

Voorbeeld configuratie voor Apache en Gunicorn

De volgende configuratie voert Weblate uit in Gunicorn en Apache 2.4 (beschikbaar als weblate/examples/apache.gunicorn.conf):

#
# VirtualHost for Weblate using gunicorn on localhost:8000
#
# You will want to change:
#
# - ServerAdmin and ServerName
# - change /home/weblate/weblate-env to location where Weblate virtualenv is placed
# - change /home/weblate/data to match your DATA_DIR
# - change /home/weblate/data/cache to match your CACHE_DIR
# - change weblate user to match your Weblate user
#
<VirtualHost *:443>
    ServerAdmin admin@weblate.example.org
    ServerName weblate.example.org

    # CACHE_DIR/static/favicon.ico
    Alias /favicon.ico /home/weblate/data/cache/static/favicon.ico

    # CACHE_DIR/static/
    Alias /static/ /home/weblate/data/cache/static/
    <Directory /home/weblate/data/cache/static/>
        Require all granted
    </Directory>

    # DATA_DIR/media/
    Alias /media/ /home/weblate/data/media/
    <Directory /home/weblate/data/media/>
        Require all granted
    </Directory>

    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/https_cert.cert
    SSLCertificateKeyFile /etc/apache2/ssl/https_key.pem
    SSLProxyEngine On

    ProxyPass /favicon.ico !
    ProxyPass /static/ !
    ProxyPass /media/ !

    ProxyPass / http://localhost:8000/
    ProxyPassReverse / http://localhost:8000/
    ProxyPreserveHost On
</VirtualHost>

Voorbeeld configuratie om Gunicorn op te starten

Weblate heeft wsgi optionele afhankelijkheid (bekijk Python afhankelijkheden) dat alles zal installeren dat u nodig hebt om Gunicorn uit te kunnen voeren. Bij het installeren van Weblate kunt u het specificeren als:

uv pip install Weblate[all,wsgi]

Als u Gunicorn eenmaal hebt geïnstalleerd, kunt u het uitvoeren. Dat wordt gewoonlijk gedaan op het systeemniveau. De volgende voorbeelden laten zien hoe op te starten via systemd:

/etc/systemd/system/gunicorn.socket
[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/run/gunicorn.sock

[Install]
WantedBy=sockets.target
/etc/systemd/system/gunicorn.service
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
User=weblate
Group=weblate
WorkingDirectory=/home/weblate/weblate-env/
Environment="DJANGO_SETTINGS_MODULE=weblate.settings"
ExecStart=/home/weblate/weblate-env/bin/gunicorn \
    --preload \
    --timeout 3600 \
    --graceful-timeout 3600 \
    --worker-class=gthread \
    --workers=2 \
    --threads=16 \
    --bind unix:/run/gunicorn.sock \
    weblate.wsgi:application

[Install]
WantedBy=multi-user.target

Weblate uitvoeren onder pad

Aanbevolen wordt om MPM vooraf te forken bij het gebruiken van WSGI met Weblate.

Een voorbeeldconfiguratie voor Apache om Weblate te serveren onder /weblate. Opnieuw met mod_wsgi (ook beschikbaar als weblate/examples/apache-path.conf):

# Copyright © Michal Čihař <michal@weblate.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later

#
# VirtualHost for Weblate, running under /weblate path
#
# You will want to change:
#
# - ServerAdmin and ServerName
# - change /home/weblate/weblate-env to location where Weblate virtualenv is placed
# - change /home/weblate/data to match your DATA_DIR
# - change /home/weblate/data/cache to match your CACHE_DIR
# - change python3.12 to match Python version mod-wsgi is compiled for
# - change weblate user to match your Weblate user
#
<VirtualHost *:80>
    ServerAdmin admin@weblate.example.org
    ServerName weblate.example.org

    # CACHE_DIR/static/favicon.ico
    Alias /weblate/favicon.ico /home/weblate/data/cache/static/favicon.ico

    # CACHE_DIR/static/
    Alias /weblate/static/ /home/weblate/data/cache/static/
    <Directory /home/weblate/data/cache/static/>
        Require all granted
    </Directory>

    # DATA_DIR/media/
    Alias /weblate/media/ /home/weblate/data/media/
    <Directory /home/weblate/data/media/>
        Require all granted
    </Directory>

    # Path to your Weblate virtualenv
    WSGIDaemonProcess weblate python-home=/home/weblate/weblate-env user=weblate request-timeout=600
    WSGIProcessGroup weblate
    WSGIApplicationGroup %{GLOBAL}

    WSGIScriptAlias /weblate /home/weblate/weblate-env/lib/python3.12/site-packages/weblate/wsgi.py process-group=weblate
    WSGIPassAuthorization On

    <Directory /home/weblate/weblate-env/lib/python3.12/site-packages/weblate/>
        <Files wsgi.py>
        Require all granted
        </Files>
    </Directory>

</VirtualHost>

Aanvullend dient u weblate/settings.py aan te passen:

URL_PREFIX = "/weblate"

Achtergrondtaken met Celery

Weblate gebruikt Celery om normale en achtergrondtaken uit te voeren. U wordt geacht een service voor Celery uit te voeren die deze zal uitvoeren. Het is bijvoorbeeld verantwoordelijk voor het afhandelen van de volgende bewerkingen (deze lijst is niet voledig):

Een normale opstelling met Redis als backend ziet eruit als dit:

CELERY_TASK_ALWAYS_EAGER = False
CELERY_BROKER_URL = "redis://localhost:6379"
CELERY_RESULT_BACKEND = CELERY_BROKER_URL

U zou ook de werker van Celery moeten starten om de taken te verwerken en geplande taken te starten, dit kan direct worden gedaan op de opdrachtregel (die meestal nuttig is bij debuggen of ontwikkelen):

./weblate/examples/celery start
./weblate/examples/celery stop

Notitie

Het proces van Celery moet worden uitgevoerd onder dezelfde gebruiker als het proces van WSGI, anders zullen bestanden in de DATA_DIR worden opgeslagen met gemixte eigenaren, wat leidt tot problemen tijdens uitvoering.

Bekijk ook Rechten voor bestandssysteem en Server uitvoeren.

Uitvoeren van taken van Celery in de modus eager met WSGI

Notitie

Dit zal een enorme impact op de prestaties van de webinterface hebben, en zal mogelijkheden verstoren die afhankelijk zijn van normale activatie (bijvoorbeeld het indienen van openstaande wijzigingen, samengevatte notificaties, of back-ups).

Voor ontwikkeling zou u misschien de configuratie eager willen gebruiken, die alle taken op hun plaats verwerkt:

CELERY_TASK_ALWAYS_EAGER = True
CELERY_BROKER_URL = "memory://"
CELERY_TASK_EAGER_PROPAGATES = True

Celery uitvoeren als systeemservice

Meest waarschijnlijk is dat u Celery wilt uitvoeren als een daemon en dat wordt behandeld in Daemonization. Voor de meest voorkomende opstelling in Linux met systemd, kunt u de voorbeeldbestanden gebruiken die worden meegeleverd in de map examples die hieronder zijn vermeld.

Systemd eenheid om te worden geplaatst als /etc/systemd/system/celery-weblate.service:

[Unit]
Description=Celery Service (Weblate)
After=network.target

[Service]
Type=forking
User=weblate
Group=weblate
EnvironmentFile=/etc/default/celery-weblate
WorkingDirectory=/home/weblate
RuntimeDirectory=celery
RuntimeDirectoryPreserve=restart
LogsDirectory=celery
ExecStart=/bin/sh -c '${CELERY_BIN} multi start ${CELERYD_NODES} \
  -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
  --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
ExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait ${CELERYD_NODES} \
  --pidfile=${CELERYD_PID_FILE}'
ExecReload=/bin/sh -c '${CELERY_BIN} multi restart ${CELERYD_NODES} \
  -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
  --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'

[Install]
WantedBy=multi-user.target

Configuratie van de omgeving om te worden geplaatst als /etc/default/celery-weblate:

# Name of nodes to start
CELERYD_NODES="celery notify memory backup translate"

# Absolute or relative path to the 'celery' command:
CELERY_BIN="/home/weblate/weblate-env/bin/celery"

# App instance to use
# comment out this line if you don't use an app
CELERY_APP="weblate.utils"

# Extra command-line arguments to the worker,
# increase concurrency if you get weblate.E019
CELERYD_OPTS="--beat:celery --queues:celery=celery --prefetch-multiplier:celery=4 \
    --queues:notify=notify --prefetch-multiplier:notify=10 \
    --queues:memory=memory --prefetch-multiplier:memory=10 \
    --queues:translate=translate --prefetch-multiplier:translate=4 \
    --concurrency:backup=1 --queues:backup=backup  --prefetch-multiplier:backup=2"

# Logging configuration
# - %n will be replaced with the first part of the nodename.
# - %I will be replaced with the current child process index
#   and is important when using the prefork pool to avoid race conditions.
CELERYD_PID_FILE="/run/celery/weblate-%n.pid"
CELERYD_LOG_FILE="/var/log/celery/weblate-%n%I.log"
CELERYD_LOG_LEVEL="INFO"

Aanvullende configuratie om logs van Celery te roteren met logrotate om te worden geplaatst als /etc/logrotate.d/celery:

# Copyright © Michal Čihař <michal@weblate.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later

/var/log/celery/*.log {
        weekly
        missingok
        rotate 12
        compress
        notifempty
}

Periodieke taken met Celery beat

Weblate komt met een ingebouwde opstelling voor geplande taken. Het schema voor de taak wordt opgeslagen in de database en taken worden uitgevoerd door de Celery beat daemon.

Hint

U kunt aanvullende taken definiëren in settings.py, bekijk bijvoorbeeld Vetraagd indienen.

Status Celery monitoren

U kunt de huidige lengte van de wachtrij voor taken van Celery vinden in de Beheerinterface of u kunt celery_queues op de opdrachtregel gebruiken. In het geval de rij te lang wordt, zult u ook een configuratiefout in de beheerinterface krijgen.

Waarschuwing

De fouten voor Celery worden standaard alleen gelogd in het log van Celery en zijn niet zichtbaar voor de gebruiker. In het geval u overzicht wilt houden op dergelijke mislukkingen, wordt aanbevolen om Foutrapporten verzamelen en prestaties monitoren te configureren.

Opstelling een-proces Celery

In het geval u een erg beperkt geheugen hebt, zou u misschien het aantal processen van Weblate willen beperken. Alle taken voor Celery kunnen in een proces worden uitgevoerd met:

celery --app=weblate.utils worker --beat --queues=celery,notify,memory,translate,backup --pool=solo

Een installatie met Docker kan worden geconfigureerd om een opstelling van een-proces Celery te gebruiken door CELERY_SINGLE_PROCESS in te stellen.

Waarschuwing

Dit zal een niet te missen impact op de prestaties van Weblate hebben.

Weblate monitoren

Weblate verschaft de URL /healthz/ om te worden gebruikt in eenvoudig controles voor de gezondheid, bijvoorbeeld met Kubernetes. De Docker container heeft een ingebouwde controle voor de gezondheid met deze URL.

Voor het monitoren van metrieken van Weblate kunt u het API-eindpunt GET /api/metrics/ gebruiken.

Foutrapporten verzamelen en prestaties monitoren

Weblate, net als elke andere software, kan falen. Voor het verzamelen van nuttige statistieken voor mislukkingen bevelen wij services van derde partijen aan om dergelijke informatie te verzamelen. Dit is speciaal nuttige bij falende taken van Celery, die anders alleen in de logs zouden worden gerapporteerd en u zou er geen notificatie voor ontvangen. Weblate heeft ondersteuning voor de volgende services:

Sentry

Weblate heeft ingebouwde ondersteuning voor Sentry. Het is voldoende, om het te gebruiken, om SENTRY_DSN in te stellen in settings.py:

SENTRY_DSN = "https://id@your.sentry.example.com/"

Sentry kan ook worden gebruikt om de prestaties van Weblate te monitoren door sporen en profielen te monitoren voor een gedefinieerd percentage bewerkingen. Dit kan worden geconfigureerd met SENTRY_TRACES_SAMPLE_RATE en SENTRY_PROFILES_SAMPLE_RATE.

Rollbar

Weblate heeft ingebouwde ondersteuning voor Rollbar. Het is voldoende, om te gebruiken, de instructies te volgen voor Rollbar notificatie voor Python.

In het kort, u moet settings.py aanpassen:

# Add rollbar as last middleware:
MIDDLEWARE = [
    # … other middleware classes …
    "rollbar.contrib.django.middleware.RollbarNotifierMiddleware",
]

# Configure client access
ROLLBAR = {
    "access_token": "POST_SERVER_ITEM_ACCESS_TOKEN",
    "environment": "development" if DEBUG else "production",
    "branch": "main",
    "root": "/absolute/path/to/code/root",
}

Alle andere dingen zijn automatisch geïntegreerd, u zult nu zowel fouten van de kant van de server als van de cliënt ontvangen.

Notitie

Loggen van fouten bevat ook uitzonderingen die gracieus werden afgehandeld, maar zouden een probleem aan kunnen duiden - zoals het mislukt parsen van een geüpload bestand.

Graylog-logbeheer

Added in version 5.9.

Weblate kan worden geconfigureerd om te loggen met het TCP-protocol GELF. Dit werd ontwikkeld voor integratie met Graylog, maar kan worden gebruikt met elk conform platform voor loggen.

Het sjabloon voor de configuratie is opgenomen in de Voorbeeld configuratie, voor Docker kan dit worden geconfigureerd met WEBLATE_LOG_GELF_HOST.

Weblate migreren naar een andere server

Migreren van Weblate naar een andere server zou behoorlijk gemakkelijk moeten zijn, het slaat echter gegevens op in een paar locaties die u met zorg zou moeten migreren. De beste benadering is om Weblate af te sluiten voor de migratie.

Database migreren

Afhankelijk van de backend van uw database, zou u misschien verschillende opties kunnen hebben voor het migreren van de database. De meest rechtstreekse benadering is om de eigen gereedschappen van de database te gebruiken, omdat die gewoonlijk meestal het meest effectief zijn (bijv. mysqldump of pg_dump). Als alternatief kunt u repliceren gebruiken als uw database dat ondersteunt.

Zie ook

Migreren tussen databases beschreven in Migreren vanuit andere databases naar PostgreSQL.

Opslagruimten VCS migreren

De opslagruimten voor VCS die zijn opgeslagen onder DATA_DIR moeten ook worden gemigreerd. U kunt ze eenvoudigweg kopiëren of rsync gebruiken om de migratie meer effectief uit te voeren.

Andere opmerkingen

Vergeet niet om andere services die Weblate gebruikt zou kunnen hebben te verplaatsen, zoals Redis, Cron jobs of aangepaste backends voor authenticatie.