Yapılandırma yönergeleri#

Weblate kurulumu#

Kurulumunuza ve deneyiminize bağlı olarak, size en uygun kurulum yöntemi seçin:

Mimari özeti#

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]; 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 -> mail; celery -> redis; celery -> db; celery -> fs; wsgi -> mt [style=dotted]; wsgi -> sentry [style=dotted]; wsgi -> auth [style=dotted]; wsgi -> redis; wsgi -> db; wsgi -> fs; }

Yazılım gereksinimleri#

İşletim sistemi#

Weblate platformunun, Linux, FreeBSD ve macOS üzerinde çalıştığı biliniyor. Diğer Unix benzeri sistemlerde de büyük olasılıkla çalışacaktır.

Weblate, Windows üzerinde desteklenmez. Ancak yine de çalışabilir ve yazılım yamaları mutlulukla kabul edilir.

Diğer hizmetler#

Weblate, çalışabilmek için başka hizmetleri kullanır. En azından şu hizmetlerin çalışması gerekir:

İpucu

Docker ile kurmak includes PostgreSQL and Redis, making the installation easier.

Python bağımlılıkları#

Weblate, Python ile yazılmıştır ve Python 3.9 ya da üzerindeki sürümleri destekler. Bağımlılıkları pip kullanarak ya da dağıtım paketlerinizden kurabilirsiniz. Tam listeyi requirements.txt adresinde bulabilirsiniz.

Uyarı

Weblate uygulamasında Python 3.12 kullanılmasını engelleyen bir şey olmasa da birkaç önemli sorun var:

En önemli bağımlılıklar:

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 çatısı

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

İsteğe bağlı bağımlılıklar#

pip extra

Python paketi

Weblate özelliği

Amazon

boto3

Amazon Translate

LDAP

django-auth-ldap

LDAP kimlik doğrulaması

zxcvbn

django-zxcvbn-password

Parola ile kimlik doğrulama

Gerrit

git-review

Gerrit

Google

google-cloud-translate

Google Cloud Translation Advanced

Mercurial

mercurial

Mercurial

MySQL

mysqlclient

MySQL ya da MariaDB (ayrıntılı bilgi almak için: Weblate için veri tabanı kurulumu)

OpenAI

openai

OpenAI

Postgres

psycopg

PostgreSQL, ayrıntılı bilgi almak için: Weblate için veri tabanı kurulumu

Antispam

python-akismet

İstenmeyen gönderim koruması

SAML

python3-saml

SAML kimlik doğrulaması

Pip kullanarak kurulum yapılırken istediğiniz özellikleri doğrudan belirtebilirsiniz:

pip install "Weblate[Postgres,Amazon,SAML]"

Ya da tüm isteğe bağlı özelliklerle Weblate kurulumu yapabilirsiniz:

pip install "Weblate[all]"

Ya da hiç bir isteğe bağlı özellik olmadan Weblate kurulumu yapabilirsiniz:

pip install Weblate

Diğer sistem gereksinimleri#

Sisteme şu bağımlılıkların kurulması gerekir:

Git

https://git-scm.com/

Pango, Cairo ve ilişkili üst bilgi dosyaları ile GObject iç gözlem verileri

https://cairographics.org/, https://pango.gnome.org/, ayrıntılı bilgi almak için: Pango ve Cairo

git-review (Gerrit desteği için isteğe bağlı)

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

git-svn (Subversion desteği için isteğe bağlı)

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

tesseract (yalnızca tesserocr çalışan dosyaları sisteminizde bulunmuyorsa gereklidir)

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

licensee (bileşen oluştururken lisansın algılanması için isteğe bağlı)

https://github.com/licensee/licensee

Yapım zamanı bağımlılıkları#

Bazı Python bağımlılıkları bağımlılıklarını kurmanız gerekebilir. Bu durum, bunları nasıl kurduğunuza bağlıdır. O yüzden her paketin kendi belgesine başvurun. Pip kullanarak yapılan kurulum sorasında ya da dağıtım paketlerini kullanırken önceden oluşturulmuş Wheels kullanıyorsanız, bunlara gerek duymazsınız.

Pango ve Cairo#

Weblate, bitmap bileşenlerini (ayrıntılı bilgi almak için: Çeviriyi tanıtmak) ve görüntüleme denetimlerini (ayrıntılı bilgi almak için: Yazı tiplerini yönetmek) oluşturmak için Pango ve Cairo kullanır. Python bağlantılarını düzgün olarak kurmak için önce sistem kitaplıklarını kurmanız gerekir. Hem Cairo hem de Pango gereklidir, bunlar için de GLib gereklidir. Tüm bunlar geliştirme dosyaları ve GObject iç gözlem verileriyle birlikte kurulmalıdır.

Sürüm imzalarını doğrulamak#

Weblate release are cryptographically signed using Sigstore signatures. The signatures are attached to the GitHub release.

The verification can be performed using sigstore package. The following example verifies signature of the 5.4 release:

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

Dosya sistemi izinleri#

Weblate işleminin, verileri tuttuğu DATA_DIR klasöründe okuma ve yazma yapabilmesi gerekir. Bu klasördeki tüm dosyaların sahibi, tüm Weblate işlemlerini çalıştıran kullanıcı olmalı ve bu klasöre yazabilmelidir (genellikle WSGI ve Celery, ayrıntılı bilgi almak için: sunucu ve Celery ile arka plan görevlerini kullanmak).

Varsayılan yapılandırmada bunlar Weblate kaynaklarıyla aynı ağaca yerleştirilir. Ancak bunları /var/lib/weblate gibi daha iyi bir konuma taşımayı yeğleyebilirsiniz.

Weblate bu klasörleri kendiliğinden oluşturmaya çalışır. Ancak bunu yapmak için yeterli izinleri yoksa bunu yapamaz.

Yönetim komutları komutunu çalıştırırken de dikkatli olmalısınız. Komut aynı Weblate kullanıcısı ile çalıştırılmalıdır yoksa bazı dosyaların izinler yanlış olabilir.

Docker kapsayıcısında, /app/data birimindeki tüm dosyaların sahibi kapsayıcı içindeki weblate kullanıcısı olmalıdır (UID 1000).

Ayrıca bakınız

Durağan dosyalar sunmak

Weblate için veri tabanı kurulumu#

Weblate için PostgreSQL veri tabanı sunucusunun kullanılması önerilir.

PostgreSQL 12 ve üzeri sürümler desteklenir.

MySQL ve MariaDB is supported, but not recommended for new installs.

No other database servers are supported.

Veri tabanı bağlantıları#

Varsayılan yapılandırmada, her Weblate işlemi veri tabanı ile kalıcı bir bağlantı kurar. Kalıcı bağlantılar Weblate yanıt verme hızını artırır ancak veri tabanı sunucusu için daha fazla kaynak gerekebilir. Ayrıntılı bilgi almak için Django:CONN_MAX_AGE bölümüne bakabilirsiniz.

Weblate en az şu sayıda bağlantıya gerek duyar:

  • Celery işlemleri için \((4 \times \mathit{nCPUs}) + 2\)

  • WSGI işlemleri için \(\mathit{nCPUs} + 1\)

Bu durum, bu belgede belirtilen Docker kapsayıcı varsayılanları ve örnek yapılandırmalar için geçerlidir. Ancak WSGI işlemlerinin sayısını özelleştirdiğinizde veya Celery paralelliğini ayarladığınızda sayılar değişir.

Aşağıdaki durumları hesaba katmak için gerçek veri tabanı bağlantı sayısı sınırının daha yüksek olması gerekir:

  • Yönetim komutları kendi bağlantılarına gerek duyar.

  • Olay işlemi sonlandırılırsa (örneğin bellek tükendi sonlandırıcısı tarafından), geçerli bağlantı zaman aşımına uğrayana kadar engellenebilir.

PostgreSQL#

Django temelli siteler için genellikle en iyi seçim PostgreSQL kullanmaktır. Django tarafından referans olarak kullanılan veri tabanıdır.

Not

Weblate, bazı durumlarda ayrı olarak kurulması gereken trigram eklentisini kullanır. Postgresql-contrib ya da benzer şekilde adlandırılmış bir paket arayın.

Ayrıca bakınız

PostgreSQL notes

PostgreSQL üzerinde bir veri tabanı oluşturmak#

Weblate için ayrı bir kullanıcı hesabı ile ayrı bir veri tabanı kullanmak genellikle iyi bir fikirdir:

# 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

İpucu

Weblate kullanıcısını PostgreSQL üzerinde süper kullanıcı yapmak istemiyorsanız, bu seçeneği atlayabilirsiniz. Bu durumda, PostgreSQL süper kullanıcısı ile Weblate şemasındaki bazı aktarım adımlarını el ile yapmanız gerekir:

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

Weblate yapılandırmasını PostgreSQL kullanacak biçimde ayarlamak#

PostgreSQL için settings.py dosyasına eklenecek kod parçası:

DATABASES = {
    "default": {
        # Database engine
        "ENGINE": "django.db.backends.postgresql",
        # Database name
        "NAME": "weblate",
        # Database user
        "USER": "weblate",
        # Name of role to alter to set parameters in PostgreSQL,
        # use in case role name is different than user used for authentication.
        # "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,
    }
}

Veri tabanı aktarımı, Weblate tarafından kullanılan ALTER ROLE veri tabanı rolüyle gerçekleştirir. Çoğu durumda rolün adı kullanıcı adıyla aynıdır. Daha karmaşık kurulumlarda rol adı kullanıcı adından farklıdır ve veri tabanı aktarımı sırasında rolün var olmadığı ile ilgili bir hata iletisi görürsünüz (psycopg2.errors.UndefinedObject: role "weblate@hostname" des not exist). Bu sorunun PostgreSQL için Azure veri tabanı ile ortaya çıktığı biliniyor. Ancak yalnızca bu durumla sınırlı değildir. Lütfen veri tabanı aktarımı sırasında Weblate tarafından kullanılacak rolün adını ALTER_ROLE seçeneğinden ayarlayın.

Ayrıca bakınız

Veri tabanı bağlantıları

MySQL ve MariaDB#

Uyarı

Weblate üzerinde MySQL ve MariaDB desteğini sürdürürken, birincil önceliğimiz PostgreSQL kullanmak. Yeni kurulumlar için PostgreSQL kullanılması ve var olan kurulumların PostgreSQL üzerine taşınması önerilir. Ayrıntılı bilgi almak için: Diğer veri tabanlarından PostgreSQL üzerine aktarmak.

Bazı Weblate özellikleri PostgreSQL ile daha iyi çalışır. PostgreSQL veri tabanı, tam metin özelliklerinin kullanılmasını sağlar ve arama ile çeviri belleği işlemlerinde daha üstündür.

Weblate, MySQL ya da MariaDB ile de kullanılabilir. Lütfen bunları Django ile kullanmakla ilgili uyarılar için MySQL notes ve MariaDB notes bölümlerine bakın. Bazı sınırlamalar nedeniyle, yeni kurulumlar için PostgreSQL kullanılması önerilir.

Weblate için en az MySQL 8 ya da MariaDB 10.4 sürümü kullanılmalıdır.

Weblate için önerilen yapılandırma:

  • Daha yüksek Unicode düzlemlerinin (emojiler gibi) görüntülenmesini sağlamak için utf8mb4 karakter kümesini kullanın.

  • Metin alanlarında daha uzun dizinlerin kullanılabilmesini sağlamak için sunucuyu innodb_large_prefix seçeneği ile yapılandırın.

  • Yalıtım düzeyini READ COMMITTED olarak ayarlayın.

  • SQL kipi STRICT_TRANS_TABLES olarak ayarlanmalıdır.

MySQL 8.x, MariaDB 10.5.x ya da üzeri için varsayılan yapılandırma yeterlidir. Bu nedenle sunucunun ayarlanması gerekmez ve gereken her şey istemci tarafında yapılandırılabilir.

Aşağıda 8 GB RAM belleği olan bir sunucu için /etc/my.cnf.d/server.cnf dosyasının örneğini bulabilirsiniz. Bu ayarlar çoğu kurulum için yeterli olmalıdır. MySQL ve MariaDB için, sisteme aynı anda çok sayıda kullanıcının erişmesinin gerekmediği durumlarda sunucu başarımını artıracak seçenekler vardır. Ayrıntılı bilgiyi üretici belgelerinde bulabilirsiniz.

Weblate kurulumunuza başlamadan önce innodb_file_per_table seçeneğinin doğru ayarlanması ve MySQL ya da MariaDB veri tabanı sunucusunun yeniden başlatılması kurulum yaparken karşılaşılabilecek sorunları azaltmak için çok önemlidir.

[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

İpucu

#1071 - Specified key was too long; max key length is 767 bytes hatasını görürseniz, yapılandırmanızı yukarıdaki innodb ayarlarına uygun olarak güncelleyin ve kurulumu yeniden başlatın.

İpucu

#2006 - MySQL server has gone away hatasını görürseniz, CONN_MAX_AGE seçeneğini yapılandırmak yardımcı olabilir.

Ayrıca bakınız

Veri tabanı bağlantıları

Weblate için MySQL/MariaDB yapılandırması#

MySQL ve MariaDB için settings.py dosyasına eklenecek kod parçası:

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": {},
    }
}

Kuruluma başlamadan önce MySQL ya da MariaDB veri tabanı sunucusu üzerinde weblate kullanıcı hesabını oluşturmanız gerekir. Bunun için şu komutları kullanın:

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

Ayrıca bakınız

Veri tabanı bağlantıları

Diğer yapılandırmalar#

Giden e-postayı yapılandırmak#

Weblate, hesap etkinleştirme işlemleri ve kullanıcılar tarafından yapılandırılmış çeşitli bildirimler gibi çeşitli durumlar için e-posta gönderir. Bunun için bir SMTP sunucu erişiminin yapılandırılması gerekir.

E-posta sunucusu şu ayarlar kullanılarak yapılandırılır: EMAIL_HOST, EMAIL_HOST_PASSWORD, EMAIL_USE_TLS, EMAIL_USE_SSL, EMAIL_HOST_USER ve EMAIL_PORT. Seçeneklerin adları oldukça açıklayıcıdır. Ayrıntılı bilgi almak için Django belgelerine bakabilirsiniz.

İpucu

Kimlik doğrulanmasının desteklenmediği ile ilgili bir hata görürseniz (SMTP AUTH extension not supported by server gibi), bu sorun büyük olasılıkla güvenli olmayan bağlantı kullanımından kaynaklanıyordur ve sunucu kimliğin bu şekilde doğrulanmasını reddeder. Böyle bir durumda EMAIL_USE_TLS seçeneğini kullanıma almayı deneyin.

Ters vekil sunucu arkasında çalıştırmak#

Hızı sınırlamak, İstenmeyen gönderim koruması ve Denetim günlüğü Weblate özellikleri istemci IP adresinin bilinmesine dayanır.

Varsayılan yapılandırmada Weblate, WSGI işleyicisi tarafından ayarlanan REMOTE_ADDR IP adresini alır.

Ters vekil sunucu kullanıyorsanız, bu alanda büyük olasılıkla ters vekil sunucu adresi bulunacaktır. Weblate yapılandırmasını ek HTTP üst bilgilerine güvenecek ve IP adresini bunlardan alacak şekilde ayarlamanız gerekir. Bu yapılandırma, ters vekil sunucu kullanmayan kurulumlar için IP adresi sahteciliğine olanak sağlayacağından varsayılan olarak kullanıma alınamaz. IP_BEHIND_REVERSE_PROXY seçeneğini kullanıma almak genel kurulumlar için yeterli olabilir. Ancak IP_PROXY_HEADER ve IP_PROXY_OFFSET seçeneklerini de ayarlamanız gerekebilir.

Dikkat edilmesi gereken başka bir şey de Host üst bilgisidir ve SITE_DOMAIN olarak yapılandırılmış değerle eşleşmelidir. Ters vekil sunucunuzda ek yapılandırma gerekebilir (örneğin, Apache için ProxyPreserveHost On ya da nginx ile ``proxy_set_header Host $host;` kullanın).

HTTP vekil sunucu#

Weblate, sürüm denetimi sistemi komutlarını yürütür ve bunlar ortamın vekil sunucu yapılandırmasını alır. Önerilen yaklaşım, settings.py dosyasında vekil sunucu ayarlarını belirtmektir:

import os

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

Yapılandırmayı ayarlama#

Ayrıca bakınız

Örnek yapılandırma

weblate/settings_example.py dosyasını weblate/settings.py dosyasına kopyalayın ve kurulumunuza uygun olarak ayarlayın. Büyük olasılıkla şu seçenekleri ayarlamak isteyeceksiniz:

ADMINS

Bir şeyler ters gittiğinde bildirim alacak site yöneticilerinin listesi. Başarısız olan birleştirme bildirimleri ya da Django hataları gibi.

Contact form sends e-mail on these as well unless ADMINS_CONTACT is configured.

ALLOWED_HOSTS

Bu seçeneği, sitenizin sunması gereken barındırma hizmetlerini listeleyecek biçimde ayarlamalısınız. Örneğin:

ALLOWED_HOSTS = ["demo.weblate.org"]

Alternatif olarak genel arama karakteri ekleyebilirsiniz:

ALLOWED_HOSTS = ["*"]

SESSION_ENGINE

Oturumlarınızın nasıl kaydedileceğini yapılandırın. Varsayılan veri tabanı arka uç altyapısını korumanız durumunda, eski oturum verilerini veri tabanından kaldırmak için weblate clearsessions görevini zamanlamanız gerekir.

Ön bellek olarak Redis kullanıyorsanız (ayrıntılı bilgi almak için: Ön belleği kullanıma alın) onu oturumlar için de kullanmanız önerilir:

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

DATABASES

Veri tabanı sunucusu ile bağlantı. Ayrıntı bilgi almak içinDjango belgelerine bakabilirsiniz.

DEBUG

Herhangi bir üretim sunucusunda bu seçeneği kullanımdan kaldırın. Hata ayıklama kipi kullanıma alındığında, Django kullanıcılara hata bildirimlerini görüntüler. Kullanımdan kaldırıldığında, hatalar e-posta olarak ADMINS seçeneğindeki adreslere gönderilir (yukarıya bakın).

Hata ayıklama kipi de Weblate işleyişini yavaşlatır. Çünkü Django bu durumda içeride çok daha fazla bilgi depolar.

DEFAULT_FROM_EMAIL

Hesap açma e-postaları gibi giden e-postalar için e-posta gönderici adresi.

Ayrıca bakınız

DEFAULT_FROM_EMAIL

SECRET_KEY

Django tarafından çerezlerdeki bazı bilgileri imzalamak için kullanılan anahtar. Ayrıntılı bilgi almak için: Django gizli anahtarı.

Ayrıca bakınız

SECRET_KEY

SERVER_EMAIL

Başarısız olan birleştirme bildirimleri gibi, yöneticiye gönderilecek e-postalarda gönderici adresi olarak kullanılacak e-posta adresleri.

Ayrıca bakınız

SERVER_EMAIL

Veri tabanını doldurmak#

Yapılandırmanız hazır olduktan sonra, veri tabanı yapısını oluşturmak için migrate komutunu çalıştırabilirsiniz. Bundan sonra yönetici arayüzünü kullanarak çeviri projeleri oluşturabilmelisiniz.

İşiniz bittiğinde, yönetici arayüzündeki :guilabel:Başarım raporu bölümüne bakmalısınız. Burada size site yapılandırmasını iyileştirmeniz için ipuçları sunulur.

Üretim kurulumu#

Bir üretim kurulumu için aşağıdaki bölümlerde açıklanan ayarlamaları yapmanız gerekir. Süper kullanıcı olarak oturum açıldığında en önemli ayarlar üst çubukta ünlem simgesi ile bir uyarı olarak görüntülenir:

../_images/admin-wrench.webp

Django tarafından tetiklenen denetimleri de incelemeniz önerilir (ancak hepsini düzeltmeniz gerekmeyebilir):

weblate check --deploy

You can also review the very same checklist at Başarım raporu in the Yönetim arayüzü.

Ayrıca bakınız

Deployment checklist

Hata ayıklama kipini kapatın#

Şununla Django hata ayıklama kipini kaptın (DEBUG):

DEBUG = False

Hata ayıklama kipi açıkken, Django yürütülen tüm sorguları depolar ve kullanıcılara, üretim kipinde gerek duyulmayan hata izlerini görüntüler.

Ayrıca bakınız

Yapılandırmayı ayarlama

Yöneticileri düzgün şekilde yapılandırın#

Sunucuda bir sorun olması durumunda e-postaları kimlerin alacağını belirlemek için doğru yönetici adreslerini ADMINS seçeneği ile ayarlayın. Örneğin:

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

Ayrıca bakınız

Yapılandırmayı ayarlama

Doğru site etki alanını ayarlayın#

Yönetici arabiriminde site adını ve etki alanını ayarlayın. Yoksa RSS ya da kayıt e-postalarındaki bağlantılar çalışmaz. Bu ayar, site etki alanı adının yazılması gereken SITE_DOMAIN seçeneği ile yapılandırılır.

4.2 sürümünde değişti: 4.2 sürümünden önce bunun yerine Django site çatısı kullanılıyordu. Ayrıntılı bilgi almak için: The “sites” framework.

HTTPS ayarını düzgün biçimde yapın#

Weblate için şifrelenmiş HTTPS iletişim kuralını kullanmanız önemle önerilir. Sertifikanızı hazırladıktan sonra ENABLE_HTTPS seçeneğini ayarlamanız gerekir:

ENABLE_HTTPS = True

İpucu

Ayrıca HSTS özelliğini de kurmak isteyebilirsiniz. Ayrıntılı bilgi almak için: SSL/HTTPS.

SECURE_HSTS_SECONDS seçeneğini düzgün biçimde ayarlayın#

Siteniz SSL üzerinden sunuluyorsa, HTTP sıkı aktarım güvenliği (HTTP Strict Transport Security) özelliğini kullanıma almak için settings.py dosyasında SECURE_HSTS_SECONDS değerini ayarlamayı değerlendirmeniz gerekir. Bu seçenek varsayılan olarak, aşağıda gösterildiği gibi 0 olarak ayarlanmıştır.

SECURE_HSTS_SECONDS = 0

Sıfır olmayan bir tamsayı değerine ayarlanırsa, django.middleware.security.SecurityMiddleware üst bilgisi bulunmayan tüm yanıtlarda HTTP Strict Transport Security üst bilgisini ayarlar.

Uyarı

Bu ayar yanlış yapılırsa, sitenizi geri dönüşü olmayan bir şekilde (bir süreliğine) bozabilir. Önce HTTP Strict Transport Security belgelerini okuyun.

Güç bir veri tabanı sunucusu kullanın#

  • Lütfen üretim ortamı için PostgreSQL kullanın. Ayrıntılı bilgi almak için: Weblate için veri tabanı kurulumu.

  • Veri tabanı sunucusunu çalıştırmak için yakın konumları kullanın. Yoksa ağ başarımı ya da güvenilirliği sorunları Weblate deneyiminizi mahvedebilir.

  • Veri tabanı sunucusunun başarımını denetleyin veya yapılandırmasını değiştirin. Örneğin PGTune kullanabilirsiniz.

Ön belleği kullanıma alın#

Olabiliyorsa, CACHES yapılandırma değişkenini ayarlayarak Django Redis kullanın. Örneğin:

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",
        },
    }
}

İpucu

Ön bellek için Redis ayarlarını değiştirirseniz, bunları Celery için de ayarlamanız gerekebilir. Ayrıntılı bilgi almak için: :ref:`Celery.

Avatar ön belleği#

Django ön belleğinin yanında, Weblate avatarları da ön belleğe alır. Bu amaçla ayrı, dosya temelli bir ön bellek kullanılması önerilir:

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,
        },
    },
}

E-posta gönderimini yapılandırın#

Weblate tarafından bazı e-postaların gönderilmesi gerekir ve bu e-postaların doğru bir gönderici adresi olmalıdır. Lütfen SERVER_EMAIL ve DEFAULT_FROM_EMAIL değerlerini ortamınıza uygun şekilde yapılandırın. Örneğin:

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

Not

Weblate tarafından e-posta gönderilmesini kullanımdan kaldırmak için EMAIL_BACKEND seçeneğini django.core.mail.backends.dummy.EmailBackend olarak ayarlayın.

Bu yapılandırma, kayıt ve parola sıfırlama e-postaları ile birlikte tüm e-posta gönderimini kullanımdan kaldırır.

Allowed hosts kurulumu#

Django, sitenizin sunmasına izin verilen etki alanı adlarının listesini ALLOWED_HOSTS seçeneğinde tutar. Bu seçenek boş bırakılırsa tüm istekler engellenir.

Bu seçenek, HTTP sunucunuzla eşleşecek şekilde yapılandırılmamışsa, Invalid HTTP_HOST header: ‘1.1.1.1’. You may need to add ‘1.1.1.1’ to ALLOWED_HOSTS. gibi hata iletileri görürsünüz

İpucu

Docker kapsayıcısında WEBLATE_ALLOWED_HOSTS seçeneği kullanılabilir.

Django gizli anahtarı#

SECRET_KEY ayarı Django tarafından çerezleri imzalamak için kullanılır. Örnek kurulumdaki değeri kullanmayıp kendiniz için oluşturacağınız gerçek bir değeri kullanmanız gerekir.

Weblate içindeki weblate-generate-secret-key komutunu kullanarak yeni bir anahtar oluşturabilirsiniz.

Ayrıca bakınız

SECRET_KEY

Bakım görevlerini yürütmek#

En iyi başarım için, bazı bakım görevlerini arka planda çalıştırmak iyi bir fikirdir. Bu işlemler Celery ile arka plan görevlerini kullanmak tarafından kendiliğinden yapılır ve şu görevleri kapsar:

  • Yapılandırma sağlığı denetimi (saatlik).

  • Bekleyen değişiklikleri işlemek (saatlik). Ayrıntılı bilgi almak için: Lazy commit işlemeleri ve commit_pending.

  • Bileşen uyarılarını güncellemek (günlük).

  • Uzak dalları güncellemek (gecelik). Ayrıntılı bilgi almak için: :setting:`AUTO_UPDATE’.

  • Çeviri belleğinin JSON yedeğini almak (günlük). Ayrıntılı bilgi almak için: dump_memory.

  • Tam metin ve veri tabanı bakım görevleri (günlük ve haftalık görevler). Ayrıntılı bilgi almak için: cleanuptrans.

Sistem yerel ayarları ve kodlama#

Sistem yerel ayarları UTF-8 destekleyenler ile yapılandırılmalıdır. Çoğu Linux dağıtımında varsayılan ayar böyledir. Sisteminizde durumun böyle olmaması durumunda, lütfen yerel ayarları UTF-8 çeşidi olarak değiştirin.

Örneğin, /etc/default/locale dosyasını düzenleyerek LANG="C.UTF-8” olarak ayarlayabilirsiniz.

Bazı durumlarda, her hizmetin ayrı yerel ayar yapılandırması vardır. Bunlar, dağıtımlara ve site sunucularına göre farklılık gösterebilir. Bu konuda ayrıntılı bilgi almak için site sunucusu paketlerinizin belgelerine bakın.

Ubuntu üzerinde Apache /etc/apache2/envvars kullanır:

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

CentOS üzerinde Apache /etc/sysconfig/httpd (or /opt/rh/httpd24/root/etc/sysconfig/httpd) kullanır:

LANG='en_US.UTF-8'

Özel sertifika kuruluşu kullanmak#

Weblate, HTTP istekleri sırasında SSL sertifikalarını doğrular. Varsayılan paketlerde güvenilmeyen bir özel sertifika kuruluşu kullanıyorsanız, sertifikasını güvenilir olarak eklemeniz gerekir.

Yeğlenen yaklaşım bunu sistem düzeyinde yapmaktır. Ayrıntılı bilgi almak için dağıtım belgelerinize bakın (örneğin debian üzerinde bu işlem, sertifika kuruluşunun sertifikasını /usr/local/share/ca-certificates/ içine yerleştirip update-ca-certificates komutunu çalıştırarak yapılabilir).

Bu işlem yapıldıktan sonra, sistem araçları sertifikaya güvenir ve Git tarafından da bu sertifika kullanılır.

Python kodu için, kendi içinde gelen sertifika yerine istekleri sistem sertifika kuruluşu paketini kullanacak şekilde yapılandırmanız gerekir. Bu işlem, aşağıdaki kod parçasını settings.py dosyasına ekleyerek yapılabilir (yol Debian sistemine özgüdür):

import os

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

İstemci varlıklarının sıkıştırılması#

Weblate, bazı JavaScript ve CSS dosyalarıyla birlikte gelir. Başarımı artırmak için bunların bir istemciye gönderilmeden önce sıkıştırılması iyidir. Varsayılan yapılandırmada bu işlem çok az ek yük oluşturarak anında yapılır. Büyük kurulumlarda, çevrim dışı sıkıştırma kipini kullanıma almanız önerilir. Bunun yapılandırmada ayarlanması ve sıkıştırmanın her Weblate yükseltmesinde tetiklenmesi gerekir.

Yapılandırma, django.conf.settings.COMPRESS_OFFLINE seçeneği ve django.conf.settings.COMPRESS_OFFLINE_CONTEXT seçeneği kullanıma alınarak kolayca ayarlanır (ikincisi zaten örnek yapılandırmalara eklenmiştir):

COMPRESS_OFFLINE = True

Her dağıtımda, dosyaları geçerli sürümle eşleşecek şekilde sıkıştırmanız gerekir:

weblate compress

İpucu

Resmi Docker kalıbında bu özellik kullanıma alınmıştır.

Sunucuyu çalıştırmak#

İpucu

Aşağıda açıklanan hizmetlerle ilgili deneyiminiz yoksa, Docker ile kurmak adresine bakmak isteyebilirsiniz.

Weblate çalıştırmak için birkaç hizmete gerek duyacaksınız. Önerilen kurulum şunlardan oluşur:

Not

Hizmetler arasında bazı bağımlılıklar bulunur. Örneğin Celery veya uwsgi işlemlerini başlatırken ön bellek ve veri tabanı çalışıyor olmalıdır.

Çoğu durumda, tüm hizmetleri tek (sanal) sunucu üzerinde çalıştırırsınız. Ancak kurulumunuzun yükü ağırsa, hizmetleri ayırabilirsiniz. Bu durumda, Celery ve wsgi sunucularının DATA_DIR klasörüne erişmesini sağlamanız yeterlidir.

Not

WSGI işlemini çalıştıran kullanıcı ile Celery işlemini çalıştıran kullanıcı aynı olmalıdır. Yoksa DATA_DIR klasöründeki dosyaların sahiplikleri karışır ve bu da çalışma sırasında sorunlara yol açar.

Ayrıca Dosya sistemi izinleri ve Celery ile arka plan görevlerini kullanmak bölümlerine bakın.

Site sunucusunu çalıştırmak#

Weblate çalıştırmak, diğer Django temelli programları çalıştırmaktan farklı değildir. Django genellikle uWSGI ya da fcgi olarak çalıştırılır (aşağıda farklı site sunucuları için örnekler bulabilirsiniz).

Deneme amacıyla, Django üzerindeki yerleşik site sunucusunu kullanabilirsiniz:

weblate runserver

Uyarı

BU SUNUCUYU ÜRETIM AYARIYLA KULLANMAYIN. Güvenlik denetimlerinden ya da başarım sınamalarından geçirilmemiştir. Ayrıca runserver ile ilgili Django belgelerine bakın.

İpucu

Django içindeki sunucu, yalnızca geliştirme amaçlı olduğundan yalnızca durağan dosyaları DEBUG seçeneği kullanıma alınmış olarak sunar. Üretim kullanımı için lütfen NGINX ve uWSGI için örnek yapılandırma, Örnek Apache yapılandırması, Örnek Apache ve Gunicorn yapılandırması ve Durağan dosyalar sunmak içindeki WSGI kurulumlarına bakın.

Durağan dosyalar sunmak#

Durağan Django dosyalarının tek bir klasörde toplanması gerekiyor. Bunun için weblate collectstatic --noinput komutunu çalıştırın. Bu komut, durağan dosyaları STATIC_ROOT seçeneği ile belirtilen bir klasöre kopyalar (bu klasör, varsayılan olarak CACHE_DIR içindeki static klasörüdür).

Durağan dosyaları doğrudan site sunucunuzdan sunmanız önerilir. Bunu şu yollar ile kullanmalısınız:

/static/

Weblate ve yönetici arayüzünün durağan dosyalarını sunar (STATIC_ROOT ile tanımlanmış).

/media/

Kullanıcıların ortam yüklemeleri için kullanılır (ekran görüntüleri gibi).

/favicon.ico

/static/favicon.ico dosyasını sunmak için bir kural yeniden yazılmalıdır.

İçerik güvenliği ilkesi#

Varsayılan Weblate yapılandırması, Content-Security-Policy veya X-XSS-Protection gibi güvenlikle ilgili HTTP üst bilgilerini ayarlayan weblate.middleware.SecurityMiddleware ara yazılımını kullanıma alır. Bunlar varsayılan olarak Weblate ve yapılandırması ile çalışacak şekilde ayarlanmıştır. Ancak bunun için ortamınıza uygun özelleştirmeler yapmanız gerekebilir.

NGINX ve uWSGI için örnek yapılandırma#

Üretim amacıyla kullanılacak site sunucusu çalıştırmak için, Weblate ile kurulan WSGI sarmalayıcısını kullanın (sanal ortamdaysanız ~/weblate-env/lib/python3.9/site-packages/weblate/wsgi.py olarak kurulur). Kullandığınız virtualenv üzerinde Python arama yolunu ayarlamayı da unutmayın (uWSGI üzerinde virtualenv = /home/user/weblate-env gibi).

Aşağıdaki yapılandırma, NGINX site sunucusu üzerinde uWSGI olarak Weblate çalıştırır.

NGINX için yapılandırma (weblate/examples/weblate.nginx.conf dosyasında da bulunabilir):

#
# 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 python3.9 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$ {
        # DATA_DIR/static/favicon.ico
        alias /home/weblate/data/cache/static/favicon.ico;
        expires 30d;
    }

    location /static/ {
        # DATA_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;
    }
}

uWSGI için yapılandırma (weblate/examples/weblate.uwsgi.ini dosyasında da bulunabilir):

#
# 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.9 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.9/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

Ayrıca bakınız

How to use Django with uWSGI

Örnek Apache yapılandırması#

Weblate ile WSGI kullanırken prefork MPM kullanılması önerilir.

Aşağıdaki yapılandırma WSGI olarak Weblate çalıştırır. mod_wsgi modülünün kullanıma alınmış olması gerekir (weblate/examples/apache.conf dosyasında bulunabilir):

#
# 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 python3.9 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

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

    # DATA_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.9/site-packages/weblate/wsgi.py process-group=weblate
    WSGIPassAuthorization On

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

</VirtualHost>

Not

Weblate için Python 3 gereklidir. Bu nedenle modwsgi modülünün Python 3 çeşidini çalıştırdığınızdan emin olun. Genellikle libapache2-mod-wsgi-py3 gibi ayrı bir paket olarak bulunur.

Weblate kurulumu için uygun Python sürümünü kullanmak.

Örnek Apache ve Gunicorn yapılandırması#

Aşağıdaki yapılandırma Gunicorn ve Apache 2.4 üzerinde Weblate çalıştırır (weblate/examples/apache.gunicorn.conf dosyasında bulunabilir):

#
# 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 weblate user to match your Weblate user
#
<VirtualHost *:443>
    ServerAdmin admin@weblate.example.org
    ServerName weblate.example.org

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

    # DATA_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>

Bir yol altında Weblate çalıştırma yapılandırması#

Weblate ile WSGI kullanırken prefork MPM kullanılması önerilir.

Weblate çalıştırmak için /weblate gibi bir yol kullanan örnek Apache yapılandırması. Yine mod_wsgi kullanarak (weblate/examples/apache-path.conf dosyasında bulunabilir):

# 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 python3.9 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

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

    # DATA_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.9/site-packages/weblate/wsgi.py process-group=weblate
    WSGIPassAuthorization On

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

</VirtualHost>

Ek olarak weblate/settings.py dosyasını ayarlamalısınız:

URL_PREFIX = "/weblate"

Celery ile arka plan görevlerini kullanmak#

Weblate, düzenli olarak yapılan arka plan görevlerini yerine getirmek için Celery kullanır. Bu işlemleri yapacak bir Celery hizmeti çalıştırmanız gerekiyor. Örnek olarak, aşağıdaki işlemlerin yapılır (bu liste tam değildir):

Arka uçta Redis kullanan tipik bir kurulum şöyle görünür:

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

Görevleri işlemek ve zamanlanmış görevleri başlatmak için Celery işlemini de başlatmalısınız. Bu işlem doğrudan komut satırından yapılabilir (genellikle hata ayıklama veya geliştirme sırasında yararlıdır):

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

Not

Celery işlemini çalıştıran kullanıcı, WSGI işlemini çalıştıran kullanıcı ile aynı olmalıdır. Yoksa DATA_DIR klasöründeki dosyaların sahiplikleri karışır ve bu da çalışma sırasında sorunlara yol açar.

Ayrıca Dosya sistemi izinleri ve Sunucuyu çalıştırmak bölümlerine bakabilirsiniz.

WSGI üzerinde Celery görevlerini yürütürken eager kipini kullanmak#

Not

Bu seçeneğin kullanılmasının site arayüzü başarımı üzerinde ciddi etkisi olur ve normal tetikleyiciye bağlı olarak özellikleri bozar (bekleyen değişiklikleri işlemek, özet bildirimleri veya yedeklemeler gibi).

Geliştirme ortamları için, tüm görevleri anında işleyen eager yapılandırmasını kullanmak isteyebilirsiniz:

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

Celery uygulamasını sistem hizmeti olarak çalıştırmak#

Büyük olasılıkla celeri:userguide/daemonizing bölümünde anlatıldığı gibi bir Celery daemon çalıştırmak isteyeceksiniz. systemd kullanan en yaygın Linux kurulumu için, hazır gelen ve aşağıda listesi bulunan examples klasöründeki örnek dosyaları kullanabilirsiniz.

/etc/systemd/system/celery-weblate.service olarak yerleştirilecek systemd birimi:

[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

/etc/default/celery-weblate olarak yerleştirilecek ortam yapılandırması:

# 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"

Celery günlüklerini döndürmek için logrotate komutu kullanılarak /etc/logrotate.d/celery olarak yerleştirilecek ek yapılandırma:

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

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

Celery atımını kullanarak görevleri zamanlamak#

Weblate, hazır bir zamanlanmış görevler kurulumuyla gelir. Bununla birlikte, settings.py dosyasından ek görevler tanımlayabilirsiniz. Örnek olarak Lazy commit işlemeleri bölümüne bakabilirsiniz.

Görevlerin Celery beats daemon tarafından yürütülmesi gerekiyor. Beklendiği gibi çalışmıyorsa, daemon çalışmıyor veya veri tabanı bozulmuş olabilir. Bu durumda temel sorunu bulmak için Celery başlangıç günlüklerine bakın.

Celery durumunu izlemek#

Celery görev kuyruklarının geçerli uzunluğunu Yönetim arayüzü içinden ya da komut satırında celery_queues komutunu kullanarak görebilirsiniz. Kuyruğun çok uzaması durumunda, yönetici arayüzünde de yapılandırma hatası görürsünüz.

Uyarı

Celery hataları varsayılan olarak yalnızca Celery günlüğüne kaydedilir ve kullanıcı tarafından görülemez. Bu tür hataların özetini görmek istiyorsanız, Hata raporlarını toplamak ve başarımı izlemek seçeneğini yapılandırmanız önerilir.

Tek işlemli Celery kurulumu#

Belleğinizin çok sınırlı olması durumunda Weblate işlemlerinin sayısını azaltmak isteyebilirsiniz. Tüm Celery görevleri şu kullanılarak tek bir işlemde yürütülebilir:

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

Uyarı

Bu işlemin Weblate başarımı üzerinde hissedilir bir olumsuz etkisi olacaktır.

Weblate uygulamasını izlemek#

Weblate, örneğin Kubernetes gibi basit durum denetimlerinde kullanılmak üzere /healthz/ adresini sunar. Docker kapsayıcısında, bu adresi kullanan iç sistem durumu denetimi bulunur.

Weblate ölçümlerini izlemek için GET /api/metrics/ API uç noktasını kullanabilirsiniz.

Hata raporlarını toplamak ve başarımı izlemek#

Weblate, diğer yazılımlar gibi sorun çıkarabilir. Yardımcı olabilecek sorun durumlarını derlemek için üçüncü taraf hizmetlerini kullanmanızı öneririz. Bu uygulama, özellikle Celery görevlerinin yapılamaması durumunda kullanışlıdır. Yoksa hata yalnızca günlüklere bildirilir ve bunlar ile ilgili bildirim almazsınız. Weblate tarafından desteklenen hizmetler şunlardır:

Sentry#

Weblate, Sentry desteği sunar. Kullanmak için, settings.py dosyasında SENTRY_DSN seçeneğini ayarlamak yeterlidir:

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

Sentry ayrıca, belirlenen işlem yüzdesi için izleri ve profilleri toplayarak Weblate başarımını izlemek için de kullanılabilir. Bu yapılandırma için, SENTRY_TRACES_SAMPLE_RATE ve SENTRY_PROFILES_SAMPLE_RATE kullanılabilir.

Rollbar#

Weblate, Rollbar desteği sunar. Kullanmak için, Rollbar notifier for Python yönergelerini izlemek yeterlidir.

Özetle, settings.py dosyasını ayarlamanız gerekir:

# 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",
    "client_token": "POST_CLIENT_ITEM_ACCESS_TOKEN",
    "environment": "development" if DEBUG else "production",
    "branch": "main",
    "root": "/absolute/path/to/code/root",
}

Bunun dışındaki her şey kendiliğinden bütünleştirilmiştir. Artık hem sunucu hem de istemci tarafı hatalarını derleyebilirsiniz.

Not

Hata günlüğü, düzgün bir şekilde işlenen özel durumları da içerir. Ancak yüklenen bir dosyanın işlenememesi gibi bir sorunu da gösteriyor olabilir.

Weblate kurulumunu başka bir sunucuya aktarmak#

Weblate kurulumunu başka bir sunucuya aktarmak oldukça kolaydır. Ancak veriler dikkatli bir şekilde aktarmanız gereken birkaç konumda bulunur. En iyi yaklaşım, aktarım sırasında Weblate kopyasını durdurmaktır.

Veri tabanını aktarmak#

Veri tabanı arka ucunuza bağlı olarak, veri tabanını aktarmak için birkaç seçeneğiniz olabilir. En basit yaklaşım, genellikle en etkili araçlar olduklarından, veri tabanının kendi araçlarını kullanmaktır (mysqldump ya da pg_dump gibi). Alternatif olarak, veri tabanınızın desteklemesi durumunda çoğaltma (replication) özelliğini kullanabilirsiniz.

Ayrıca bakınız

Veri tabanları arasında aktarım Diğer veri tabanlarından PostgreSQL üzerine aktarmak bölümünde açılanmıştır.

Sürüm denetimi sistemi depolarını aktarmak#

DATA_DIR altına kaydedilmiş sürüm denetimi sistemi depolarının da taşınması gerekir. Aktarımı daha etkili bir şekilde yapmak için bunları kopyalayabilir ya da rsync komutunu kullanabilirsiniz.

Diğer notlar#

Weblate tarafından kullanılıyor olabilecek, Redis, zamanlanmış Cron görevleri veya özel kimlik doğrulama arka uçları gibi diğer hizmetleri taşımayı unutmayın.