Yapılandırma yönergesi¶
Weblate kurulumu¶
Kurulumunuza ve deneyiminize bağlı olarak, size en uygun kurulum yöntemi seçin:
Üretim kurulumları için önerilen Docker ile kurmak.
Üretim kurulumları için önerilen virtualenv kurulumu:
Kaynaklardan kurulum, geliştirme çalışmaları için önerilir.
Mimari özeti¶
- İnternet sunucusu
Gelen HTTP isteklerinin işlenmesi, Durağan dosyalar sunmak.
- Celery işlemleri
Celery ile arka plan görevlerini kullanmak burada yürütülür.
İş yükünüze bağlı olarak, işlem sayısını değiştirmek isteyebilirsiniz.
Weblate platformunu yatay olarak ölçeklendirirken özel ayrılmış bir düğüm kullanın.
- WSGI sunucusu
Site sayfalarını kullanıcılara sunan bir WSGI sunucusu.
Weblate platformunu yatay olarak ölçeklendirirken özel ayrılmış bir düğüm kullanın.
- Veri tabanı
Tüm içeriği tutmak için PostgreSQL veri tabanı sunucusu. Ayrıntılı bilgi almak için: Weblate için veri tabanı kurulumu.
Yüz milyonlarca barındırılan sözcük bulunan siteler için ayrılmış bir veri tabanı düğümü kullanın.
- Veri depolama alanı
Ön bellek ve görev kuyruğu için Valkey veya Redis sunucusu gibi anahtar/değer veri depolama alanı. Ayrıntılı bilgi almak için: Celery ile arka plan görevlerini kullanmak.
Weblate platformunu yatay olarak ölçeklendirirken özel ayrılmış bir düğüm kullanın.
- Dosya sistemi
Sürüm denetimi sistemi depolarını ve yüklenen kullanıcı verilerini tutacak dosya sistemi depolama alanı. Bu, tüm süreçler tarafından paylaşılır.
Yatay Weblate ölçeklendirmesinde ağ üzerinde depolama alanı kullanın.
- E-posta sunucusu
Giden e-postalar için kullanılacak SMTP sunucusu. Ayrıntılı bilgi almak için: Giden e-postayı yapılandırmak. Dışarıdan belirtilebilir.
İpucu
Docker ile kurmak içinde PostgreSQL ve Valkey bulunur ve kurulumu kolaylaştırır.
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.
Ayrıca bakınız
Mimari özeti belgesinde genel Weblate mimarisi ve gerekli hizmetler tanımlanır.
Python bağımlılıkları¶
Weblate, Python ile yazılmıştır ve Python 3.12 ya da üzerindeki sürümleri destekler. Bağımlılıkları pip kullanarak ya da dağıtım paketlerinizden kurabilirsiniz. Tam listeyi requirements.txt dosyasında bulabilirsiniz.
En önemli bağımlılıklar:
- Django
- Celery
- Translate Toolkit
- translation-finder
- Python Social Auth
- Django REST çatısı
İsteğe bağlı bağımlılık belirtici |
Python paketleri |
Weblate özelliği |
|---|---|---|
|
||
|
||
|
||
|
Sözlük desteği ile Google Cloud Translation Advanced |
|
|
||
|
||
|
PostgreSQL. Ayrıntılı bilgi almak için: Weblate için veri tabanı kurulumu |
|
|
||
|
||
|
SAML 2 kimlik hizmetini Weblate ile bütünleştirmek |
|
|
POT dosyasını güncelle (Sphinx) için gereklidir |
|
|
Hosted Weblate bütünleştirmesi |
|
|
Weblate için wsgi sunucusu |
|
|
Pip kullanarak kurulum yapılırken istediğiniz özellikleri doğrudan belirtebilirsiniz:
uv pip install "weblate[Postgres,Amazon,SAML]"
Ya da tüm isteğe bağlı özelliklerle Weblate kurulumu yapabilirsiniz:
uv pip install "weblate[all]"
Ya da hiç bir isteğe bağlı özellik olmadan Weblate kurulumu yapabilirsiniz:
uv pip install weblate
Pip kurulumundaki sorunları gidermek¶
ERROR: Dependency 'gobject-introspection-2.0' is required but not found.Kurulmuş
PyGobjectpaketi eşleşen bir GObject Introspection kitaplığı bulamadı -gobject-introspection-2.0.Eski sürümler artık Weblate tarafından desteklenmiyor.
ffi_prep_closure(): bad user_data (it seems that the version of the libffi library seen at runtime is different from the 'ffi.h' file seen at compile-time)Bu durum, PyPI ile dağıtılan binary paketlerinin dağıtımla uyumsuz olmasından kaynaklanır. Bu sorunu gidermek için, paketi sisteminizde yeniden oluşturmanız gerekir:
uv pip install --force-reinstall --no-binary :all: cffi
error: ‘xmlSecKeyDataFormatEngine’ undeclared (first use in this function); did you mean ‘xmlSecKeyDataFormat’?Bu, xmlsec paketinde bilinen bir sorundur. Lütfen https://github.com/xmlsec/python-xmlsec/issues/314 adresine bakın.
lxml & xmlsec libxml2 library version mismatchlxmlvexmlsecpaketleri birlibxml2paketine karşı oluşturulmalıdır. Bu sorunu önlemek için bunları yerel olarak oluşturmalısınız:uv pip install --force-reinstall --no-binary xmlsec --no-binary lxml lxml xmlsec
Diğer sistem gereksinimleri¶
Sisteme şu bağımlılıkların kurulması gerekir:
Git- Pango, Cairo ve ilişkili üst bilgi dosyaları ile GObject iç gözlem verileri
https://cairographics.org/, https://www.gtk.org/docs/architecture/pango. Ayrıntılı bilgi almak için: Pango ve Cairo
git-review(Gerrit desteği için isteğe bağlı)git-svn(Subversion desteği için isteğe bağlı)tesseract(yalnızca tesserocr çalışan dosyaları sisteminizde bulunmuyorsa gereklidir)
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: Çevirmen topluluğu oluşturmak) 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ı doğru şekilde 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.
Donanım gereksinimleri¶
Weblate, herhangi bir çağdaş donanımda sorunsuz çalışmalıdır, Tek bir sunucuda Weblate bileşenlerini (Weblate, veri tabanı ve site sunucusu) çalıştırmak için gerekli en az yapılandırma şu şekildedir:
3 GB RAM bellek
2 işlemci çekirdeği
1 GB depolama alanı
Not
Weblate kurulumunuz için gerçek gereksinimler, üzerinde bulunacak çevirilerin boyutuna bağlı olarak büyük ölçüde değişiklik gösterebilir.
Bellek kullanımı¶
Bellek ne kadar çok olursa o kadar iyidir. Tüm düzeylerde (dosya sistemi, veri tabanı ve Weblate) ön bellek için kullanılır. Yüzlerce çeviri bileşeni için en az 4 GB RAM bellek önerilir.
İpucu
Önerilenden daha az bellek bulunan sistemler için Tek işlemli Celery kurulumu önerilir.
İşlemci kullanımı¶
Eşzamanlı bulunacak kullanıcı sayısı, gerekli işlemci çekirdeği sayısını artırır.
Depolama alanı kullanımı¶
Tipik veri tabanı depolama alanı gereksinimi, barındırılacak 1 milyon sözcük için yaklaşık 300 MB olarak düşünebilir.
Kopyalanmış depolar için gereken depolama alanı değişiklik gösterir. Ancak Weblate sığ kopyalama ile depo boyutlarını en az düzeyde tutmaya çalışır.
Düğümler¶
Küçük ve orta ölçekli siteler (milyonlarca barındırılan sözcük) için, tüm Weblate bileşenleri (ayrıntılı bilgi almak için: Mimari özeti) tek bir düğümde çalıştırılabilir.
Yüz milyonlarca barındırılan sözcüğe ulaştığınızda, veri tabanı için özel bir düğüm kullanmanız önerilir (ayrıntılı bilgi almak için: Weblate için veri tabanı kurulumu).
Sürüm imzalarını doğrulamak¶
Weblate sürümleri Sigstore imzaları kullanılarak şifrelenmiş olarak imzalanır. İmzalar GitHub sürümüne eklenmiştir.
Doğrulama işlemi sigstore paketi kullanılarak yapılabilir. Aşağıdaki örnek 5.4 sürümünün imzasını doğrular:
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: Sunucuyu çalıştırmak 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.
The configured CACHE_DIR also has to be writable by the Weblate
process and has to allow executing generated helper files. Do not mount
CACHE_DIR with the noexec option.
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
Weblate için veri tabanı kurulumu¶
Weblate için PostgreSQL veri tabanı sunucusunun kullanılması önerilir.
PostgreSQL 13 ve üzeri sürümler desteklenir. PostgreSQL 15 ve üzeri sürümler önerilir.
Ayrıca bakınız
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 CONN_MAX_AGE ve Persistent connections bölümlerine 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 ü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",
# 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,
}
}
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" does 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 ile ayarlayın.
Ayrıca bakınız
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 açmayı deneyin.
Ters vekil sunucu arkasında çalıştırmak¶
Weblate üzerindeki bazı özellikler, doğru HTTP üst bilgilerinin Weblate üzerine aktarılmasına bağlıdır. Ters vekil sunucu kullanırken, lütfen gerekli bilgilerin doğru şekilde aktarıldığından emin olun.
Bu yapılandırmada hata ayıklamak için Başarım raporu içindeki HTTP ortamı bölümüne bakabilirsiniz.
- İstemci IP adresi
Bu, Hızı sınırlaması veya Denetim günlüğü için gereklidir.
Weblate, WSGI işleyicisi tarafından ayarlanan
REMOTE_ADDRIP adresini işler. Bu boş olabilir (WSGI için soket kullanıldığında) veya bir ters vekil sunucu adresi içerebilir. Bu nedenle Weblate istemci IP adresini içeren ek bir HTTP üst bilgisine gerek duyar.IP_BEHIND_REVERSE_PROXYseçeneğini açmak çoğu olağan kurulum için yeterli olabilir. AncakIP_PROXY_HEADERveIP_PROXY_OFFSETseçeneklerini de ayarlamanız gerekebilir (Docker kapsayıcısındaWEBLATE_IP_PROXY_HEADERveWEBLATE_IP_PROXY_OFFSETseçeneklerini kullanın).İpucu
Bu yapılandırma, doğru yapılandırılmış bir ters vekil sunucusu olmayan kurulumlarda IP adresi sahteciliğine izin vereceğinden varsayılan olarak açılamaz.
- Sunucu adı
Dikkat edilmesi gereken başka bir şey de Host üst bilgisidir ve
SITE_DOMAINolarak yapılandırılmış değerle eşleşmelidir. Ters vekil sunucunuzda ek yapılandırma gerekebilir (örneğin, Apache içinProxyPreserveHost Onya da nginx ileproxy_set_header Host $host;kullanın).İpucu
CSRF doğrulaması başarısız oldu hataları genellikle Host üst bilgisi ile yapılandırılmış
SITE_DOMAINarasındaki uyumsuzluktan kaynaklanır.- İstemci iletişim kuralı
Doğru iletişim kuralının aktarılmazsa, Weblate istemciyi HTTPS iletişim kuralına yükseltmeye çalışırken yeniden yönlendirme döngüsüne girebilir. Ters vekil sunucu tarafından X-Forwarded-Proto olarak doğru şekilde sunulduğundan emin olun.
Bu üst bilginin daha sonra
SECURE_PROXY_SSL_HEADER(settings.py) veyaWEBLATE_SECURE_PROXY_SSL_HEADER(Docker ortamı) içinde yapılandırılması gerekir.Önemli
Üst bilgi değeri yapılandırmada büyük/küçük harfe duyarlıdır, bu nedenle
WEBLATE_SECURE_PROXY_SSL_HEADER=HTTP_X_FORWARDED_PROTO,httpsveWEBLATE_SECURE_PROXY_SSL_HEADER=HTTP_X_FORWARDED_PROTO,HTTPSbirbirinin yerine kullanılamaz.İpucu
Tarayıcıda “Çok fazla yönlendirme var” hatası görüyorsanız, bunun nedeni büyük olasılıkla gerçek iletişim kuralı (HTTPS) ile Weblate tarafından gözlemlenen iletişim kuralı arasındaki uyumsuzluktur.
5.13 sürümünde değişti: İletişim vekil sunucu üst bilgileri varsayılan yapılandırmada gunicorn tarafından kendiliğinden işlenir. Ancak diğer WSGI sunucularının yapılandırması daha güvenlidir ve bunun kasıtlı olarak ayarlanması gerekir.
Weblate 5.13 sürümünden bu yana Docker kapsayıcısı granian kullanıyor ve artık
WEBLATE_SECURE_PROXY_SSL_HEADERseçeneğinin kasıtlı olarak yapılandırması gerekiyor.
Ayrıca bakınız
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"
Ayrıca bakınız
Yapılandırmayı ayarlama¶
Ayrıca bakınız
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.
İletişim formu,
ADMINS_CONTACTyapılandırılmadığı sürece bu adreslere de e-posta gönderir.Ayrıca bakınız
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 = ["*"]Ayrıca bakınız
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 Valkey ya da Redis kullanıyorsanız (ayrıntılı bilgi almak için: Ön belleği yapılandırın) onu oturumlar için de kullanmanız önerilir:
SESSION_ENGINE = "django.contrib.sessions.backends.cache"Ayrıca bakınız
DATABASES
Veri tabanı sunucusu ile bağlantı. Ayrıntı bilgi almak içinDjango belgelerine bakabilirsiniz.
Ayrıca bakınız
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
ADMINSseç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.
Ayrıca bakınız
DEFAULT_FROM_EMAIL
Hesap açma e-postaları gibi giden e-postalar için e-posta gönderici adresi.
Ayrıca bakınız
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
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
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 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.
Ayrıca bakınız
Ü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:
Django tarafından tetiklenen denetimleri de incelemeniz önerilir (ancak hepsini düzeltmeniz gerekmeyebilir):
weblate check --deploy
Aynı denetim listesini Yönetim arayüzü içindeki Başarım raporu bölümünden de gözden geçirebilirsiniz.
Ayrıca bakınız
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
Yöneticileri doğru 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
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.
Ayrıca bakınız
SECURE_HSTS_SECONDS seçeneğini doğru 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 bölümüne bakın.
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 yapılandırın¶
Olabiliyorsa, CACHES yapılandırma değişkenini ayarlayarak Django ile Valkey ya da 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 ayarlarını değiştirirseniz, bunları Celery için de ayarlamanız gerekebilir. Ayrıntılı bilgi almak için: Celery ile arka plan görevlerini kullanmak.
Ayrıca bakınız
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.
Ayrıca bakınız
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
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:
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 bakabilirsiniz.
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'
İ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.
Ayrıca bakınız
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:
Veri tabanı sunucusu (ayrıntılı bilgi almak için: Weblate için veri tabanı kurulumu)
Ön bellek sunucusu (ayrıntılı bilgi almak için: Ön belleği yapılandırın)
Durağan dosyalar ve SSL ucu için ön yüz site sunucusu (ayrıntılı bilgi almak için: Durağan dosyalar sunmak)
Devingen içerik için WSGI sunucusu (ayrıntılı bilgi almak için: NGINX ve uWSGI için örnek yapılandırma)
Arka plan görevlerini yürütmek için Celery (ayrıntılı bilgi almak için: Celery ile arka plan görevlerini kullanmak)
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 WSGI ya da fcgi olarak çalıştırılır (aşağıda farklı site sunucuları için örnekler bulabilirsiniz).
Not
The sample configuration files shown below are maintained in the Weblate
source tree under weblate/examples/. They are included in source
distributions and in this documentation, but Python wheels only install
runtime files. When installing Weblate from PyPI, get the matching source
distribution or source checkout before copying these examples.
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 durağan dosyaları yalnızca DEBUG seçeneği açıkken sunar. Üretim kullanımı için lütfen WSGI kurulumlarına bakın:
Durağan dosyalar sunmak¶
5.15.2 sürümünde değişti: /media/ artık ekran görüntüleri sunmak için kullanılmıyor.
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_ROOTile tanımlanmış)./favicon.ico/static/favicon.icodosyası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.
Ayrıca bakınız
Örnek NGINX ve Granian yapılandırması¶
Şu yapılandırma, NGINX site sunucusu üzerinde Granian ile Weblate çalıştırır:
#
# nginx configuration for Weblate
#
# You will want to change:
#
# - server_name
# - change /home/weblate/weblate-env to location where Weblate Python environment 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 / {
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://127.0.0.1:8888;
proxy_read_timeout 3600;
}
}
Örnek NGINX ve Gunicorn yapılandırması¶
The following configuration runs Weblate using Gunicorn under the NGINX webserver
(weblate/examples/weblate.nginx.gunicorn.conf in the source tree):
#
# nginx configuration for Weblate
#
# You will want to change:
#
# - server_name
# - change /home/weblate/weblate-env to location where Weblate Python environment 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 / {
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;
}
}
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.14/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.
Configuration for NGINX (weblate/examples/weblate.nginx.conf in the source tree):
#
# nginx configuration for Weblate
#
# You will want to change:
#
# - server_name
# - change /home/weblate/weblate-env to location where Weblate Python environment 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 / {
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;
}
}
Configuration for uWSGI (weblate/examples/weblate.uwsgi.ini in the source tree):
#
# uWSGI configuration for Weblate
#
# You will want to change:
#
# - change /home/weblate/weblate-env to location where Weblate Python environment 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
# Path to the Python environment
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
Örnek Apache yapılandırması¶
Weblate ile WSGI kullanırken prefork MPM kullanılması önerilir.
The following configuration runs Weblate as WSGI, you need to have enabled
mod_wsgi (weblate/examples/apache.conf in the source tree):
#
# VirtualHost for Weblate
#
# You will want to change:
#
# - ServerAdmin and ServerName
# - change /home/weblate/weblate-env to location where Weblate Python environment 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>
# Path to your Weblate Python environment
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>
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ı¶
The following configuration runs Weblate in Gunicorn and Apache 2.4
(weblate/examples/apache.gunicorn.conf in the source tree):
#
# 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 Python environment 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>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/https_cert.cert
SSLCertificateKeyFile /etc/apache2/ssl/https_key.pem
SSLProxyEngine On
ProxyPass /favicon.ico !
ProxyPass /static/ !
ProxyPass / http://localhost:8000/
ProxyPassReverse / http://localhost:8000/
ProxyPreserveHost On
</VirtualHost>
Granian başlatmak için örnek yapılandırma¶
Weblate için isteğe bağlı wsgi bağımlılığı vardır. Bu Granian çalıştırmak için gerek duyacağınız her şeyi kurar (Ayrıntılı bilgi alın: Python bağımlılıkları). Weblate kurulumunda bunu şu şekilde belirtebilirsiniz:
uv pip install Weblate[all,wsgi]
Granian kurulumundan sonra çalıştırabilirsiniz. Bu işlem genellikle sistem düzeyinde yapılır. Şu örnekler systemd ile başlatmayı göstermektedir:
[Unit]
Description=granian daemon
After=network.target
[Service]
User=weblate
Group=weblate
WorkingDirectory=/home/weblate/weblate-env/
Environment="DJANGO_SETTINGS_MODULE=weblate.settings"
RuntimeDirectory=granian
ExecStart=/home/weblate/weblate-env/bin/granian \
--no-ws \
--workers-max-rss 350 \
--interface wsgi \
--workers 2 \
--backpressure 16 \
--runtime-threads 8 \
--runtime-mode mt \
--port 8888 \
weblate.wsgi:application
[Install]
WantedBy=multi-user.target
~
Gunicorn başlatmak için örnek yapılandırma¶
Gunicorn ayrı olarak kurulmalıdır:
uv pip install gunicorn
Gunicorn kurulumundan sonra çalıştırabilirsiniz. Bu işlem genellikle sistem düzeyinde yapılır. Şu örnekler systemd ile başlatmayı göstermektedir:
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
[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
Ayrıca bakınız
Bir yol altında Weblate çalıştırma yapılandırması¶
Weblate ile WSGI kullanırken prefork MPM kullanılması önerilir.
A sample Apache configuration to serve Weblate under /weblate. Again using
mod_wsgi (weblate/examples/apache-path.conf in the source tree):
#
# VirtualHost for Weblate, running under /weblate path
#
# You will want to change:
#
# - ServerAdmin and ServerName
# - change /home/weblate/weblate-env to location where Weblate Python environment 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>
# Path to your Weblate Python environment
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>
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):
Dış hizmetlerden internet kancalarını almak (ayrıntılı bilgi almak için: Bildirim kancaları).
Yedeklemeler, temizlemeler, günlük eklentiler veya güncellemeler gibi düzenli bakım görevlerini çalıştırmak (ayrıntılı bilgi almak için: Weblate yedeğini alma ve taşıma,
BACKGROUND_TASKS, Eklentiler).Kendiliğinden çeviri çalıştırmak.
Toplu bildirimleri göndermek.
Yük oluşturan işlemleri WSGI işlemi üzerinden almak.
Bekleyen değişiklikleri işlemek (ayrıntılı bilgi almak için: Lazy commit işlemeleri).
Arka uçta Valkey ya da 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
Ayrıca bakınız
You should also start the Celery worker to process the tasks and start scheduled tasks. For debugging or development, this can be done directly on the command-line:
celery --app=weblate.utils worker --beat --queues=celery,notify,memory,translate,backup
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¶
Most likely you will want to run Celery as a daemon and that is covered by
Daemonization. For the most common Linux setup using
systemd, adapt the example files listed below. These examples are maintained in
the Weblate source tree under weblate/examples/; Python wheels do not
install these deployment samples.
/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. You might need to customize
# concurrency depending on the available resources and Weblate usage. Increase
# the concurrency if you get weblate.E019 error, decrease it if you are on a
# low-resource system.
CELERYD_OPTS="--beat:celery --queues:celery=celery --concurrency:celery=2 --prefetch-multiplier:celery=4 \
--queues:notify=notify --concurrency:notify=2 --prefetch-multiplier:notify=10 \
--queues:memory=memory --concurrency:memory=2 --prefetch-multiplier:memory=10 \
--queues:translate=translate --concurrency:translate=4 --prefetch-multiplier:translate=4 \
--queues:backup=backup --concurrency:backup=1 --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:
/var/log/celery/*.log {
weekly
missingok
rotate 12
compress
notifempty
}
Celery atımını kullanarak görevleri zamanlamak¶
Weblate, zamanlanmış görevler için yerleşik kurulumla birlikte gelir. Görev zamanlaması veri tabanında saklanır ve görevler Celery beat daemon tarafından yürütülür.
İpucu
settings.py dosyasından ek görevler tanımlayabilirsiniz. Örnek olarak Lazy commit işlemeleri bölümüne bakabilirsiniz.
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
Docker kullanan bir kurulum, CELERY_SINGLE_PROCESS ayarıyla tek işlemli bir Celery kurulumu kullanacak şekilde yapılandırılabilir.
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:
E-posta¶
Varsayılan Weblate yapılandırması, Django sunucu hataları üzerine django.utils.log.AdminEmailHandler ile e-posta gönderilmesini sağlar. Bu en az çaba gerektiren kurulumdur, ancak hata e-postaları hassas veriler içerebileceğinden gizlilik nedeniyle diğer seçenekleri değerlendirmelisiniz. Bununla ilgili ayrıntılı bilgi almak için Security implications bölümüne bakabilirsiniz.
Bu davranışı kapatmak için, Weblate ayarlarındaki LOGGING seçeneğinden mail_admins ifadesini kaldırın veya Docker ortamında WEBLATE_ADMIN_NOTIFY_ERROR seçeneğini kapatın.
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.
Ayrıca bakınız
Rollbar¶
Weblate, Rollbar desteği sunar. Kullanmak için, Rollbar notifier for Python yönergesini 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",
"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.
Graylog günlük yönetimi¶
Added in version 5.9.
Weblate, GELF TCP iletişim kuralı ile günlüğe kaydedilecek şekilde yapılandırılabilir. Bu özellik Graylog bütünleştirmesi için geliştirilmiştir. Ancak herhangi bir uyumlu günlük kaydı platformu ile kullanılabilir.
Yapılandırma kalıbı Örnek yapılandırma dosyasında bulunur. Docker için WEBLATE_LOG_GELF_HOST ile yapılandırılabilir.
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¶
En basit yaklaşım, genellikle en etkili oldukları için veri tabanınızın yerel araçlarını kullanmaktır (pg_dump gibi). Alternatif olarak, veri tabanınız destekliyorsa çoğaltmayı 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, Valkey, Redis, zamanlanmış görevler veya özel kimlik doğrulama arka uçları gibi diğer hizmetleri taşımayı unutmayın.