Odoo 20 Community Docker Compose ve HTTPS ile nasıl kurulur
Odoo 20 Community'yi resmi Docker imajı ve PostgreSQL ile Ubuntu veya Debian'a kurun; ardından Caddy HTTPS, websocket yönlendirmesi, worker ve yedek ekleyin.
- Orta
- 45 dk okuma
- Güncellendi
Denendiği sistemler: Ubuntu 24.04 LTS, Ubuntu 26.04 LTS, Debian 12, Debian 13
Bu sayfada
- Ön koşullar
- Adım 1 — Proje klasörünü ve gizli değerleri oluşturun
- Adım 2 — odoo.conf dosyasını yazın
- Adım 3 — Compose dosyasını yazın
- Adım 4 — Veritabanı rolünü oluşturun ve Odoo'yu başlatın
- Adım 5 — Veritabanını oluşturun, sonra veritabanı yöneticisini kapatın
- Adım 6 — Odoo'yu websocket yönlendirmesiyle HTTPS üzerinden yayınlayın
- Adım 7 — Uygulamaları ve özel modülleri kurun
- Yedekleme ve geri yükleme
- Odoo'yu güncelleme
- Sorun giderme
- Odoo, postgres kullanıcısının bir güvenlik riski olduğunu söyleyerek kapanıyor
- Discuss, bildirimler veya canlı sohbet anlık güncellenmiyor
- Giriş sayfası veritabanı göstermiyor veya veritabanı bulunamadı hatası veriyor
- İstekler zaman aşımına uğruyor veya worker'lar bellek sınırı mesajlarıyla yeniden başlatılıyor
- E-postalardaki bağlantılar http:// veya iç bir adres kullanıyor
- Sonraki adımlar
Odoo açık kaynaklı iş uygulamalarından oluşan bir pakettir: CRM, satış, faturalama, stok, projeler, web sitesi, e-ticaret ve çok daha fazlası tek bir PostgreSQL veritabanını paylaşır. Bu rehber güncel kararlı sürüm olan Odoo 20.0 Community Edition'ı (Odoo'nun nightly sunucusu Eylül 2026'da yayımlandığını belirtir) resmi odoo Docker imajı ve bir PostgreSQL 17 konteyneriyle kurar. odoo.conf dosyasını worker'lar, proxy modu, ana parola ve veritabanı filtresiyle üretime göre yapılandırır, Odoo'yu Caddy ile HTTPS ve doğru websocket yönlendirmesiyle yayınlar, veritabanı yöneticisini kapatır, yedeklemeyi ve güncellemeyi kurarsınız.
Ön koşullar
- Docker Engine ve Compose eklentisi kurulu, Ubuntu 24.04 LTS, Ubuntu 26.04 LTS, Debian 12 veya Debian 13 çalıştıran bir sunucu: Ubuntu'da Docker veya Debian'da Docker. Komutlar kullanıcınızın
dockergrubunda olduğunu varsayar; değilse başlarınasudoekleyin. sudoyetkisi ve SSH anahtarıyla girişi olan, root olmayan bir kullanıcı: Yeni bir Linux sunucusunu güvenli hale getirin ve SSH anahtarlarını ayarlayın.- Sunucuyu gösteren bir A kaydına (isteğe bağlı olarak AAAA kaydına) sahip
odoo.example.comgibi bir alan adı ve Caddy reverse proxy rehberindeki Caddy.
Odoo en düşük donanım gereksinimi yayınlamaz. Dağıtım rehberi bunun yerine bir boyutlandırma yöntemi sunar: en fazla (CPU sayısı × 2) + 1 worker, worker başına yaklaşık altı eş zamanlı kullanıcı ve isteklerin %80'i hafif, %20'si ağır kabul edilerek yaklaşık worker × (0,8 × 150 MB + 0,2 × 1 GB) RAM. Aşağıdaki değerler küçük bir ekip için temkinli bir başlangıç noktasıdır, resmi değerler değildir:
| Kaynak | En düşük (resmi) | Önerilen başlangıç |
|---|---|---|
| CPU | Yayınlanmamış | 2 vCPU |
| RAM | Yayınlanmamış | 4 GB |
| Disk | Yayınlanmamış | 40 GB ve ekleriniz |
Yazılım tarafında Odoo 20, PostgreSQL 16 veya üzerini gerektirir. İmajın Docker Hub sayfasındaki örnekler hâlâ postgres:15 kullanır; bu nedenle bu rehber bunun yerine postgres:17 sabitler.
Adım 1 — Proje klasörünü ve gizli değerleri oluşturun
Yığını odoo.conf için bir config klasörü ve özel modüller için bir addons klasörüyle birlikte /opt/odoo içinde tutun. odoo.conf ana parolayı tutacağı için proje klasörünü diğer kullanıcılara kapatın:
sudo mkdir -p /opt/odoo/config /opt/odoo/addons
sudo chown -R $USER:$USER /opt/odoo
chmod 700 /opt/odoo
cd /opt/odooÜç farklı gizli değer üretin: biri PostgreSQL süper kullanıcısı, biri odoo veritabanı rolü, biri de Odoo'nun ana parolası için:
openssl rand -hex 24
openssl rand -hex 24
openssl rand -hex 24/opt/odoo/.env dosyasını nano .env ile oluşturun ve ilk iki değeri yapıştırın:
POSTGRES_PASSWORD=paste-the-first-value
ODOO_DB_PASSWORD=paste-the-second-valuechmod 600 .envAdım 2 — odoo.conf dosyasını yazın
/opt/odoo/config/odoo.conf dosyasını nano config/odoo.conf ile oluşturun. Üçüncü gizli değeri admin_passwd olarak yapıştırın:
[options]
addons_path = /mnt/extra-addons
data_dir = /var/lib/odoo
admin_passwd = paste-the-third-value
proxy_mode = True
dbfilter = ^odoo$
list_db = True
workers = 4
max_cron_threads = 1
limit_memory_soft = 629145600
limit_memory_hard = 1677721600
limit_time_cpu = 600
limit_time_real = 1200
limit_request = 8192Bu ayarların işlevi:
admin_passwd, veritabanı yönetim ekranlarını koruyan ana paroladır. Odoo belgeleri varsayılan değerin rastgele üretilmiş bir değerle değiştirilmesini söyler.proxy_mode = True, Odoo'nun Caddy'den gelenX-Forwarded-*başlıklarını okumasını sağlar; böylece isteklerin HTTPS üzerinden geldiğini bilir. Odoo bunun önünde bir reverse proxy olmadan asla açılmaması gerektiği konusunda uyarır.dbfilter = ^odoo$, hangi alan adı kullanılırsa kullanılsın yalnızcaodooadlı veritabanını sunar.list_db = Truegeçicidir. Veritabanı yöneticisine Adım 5'te bir kez ihtiyacınız var, sonra onu kapatırsınız.workers = 4, Odoo'yu thread tabanlı geliştirme sunucusundan üretim için tasarlanmış çok süreçli sunucuya geçirir. Worker'lar açıkken Odoo canlı sohbet ve anlık bildirimler için 8072 portunda (--gevent-portvarsayılanı) ayrı bir websocket süreci de başlatır.limit_değerleri Odoo dağıtım rehberindeki örnek yapılandırmadan gelir.limit_memory_softdeğerini aşan worker'lar mevcut istekten sonra yeniden başlatılır;limit_memory_harddeğerini aşanlar ise hemen sonlandırılır.
workers değerini Ön koşullar bölümündeki formülle sunucunuza göre ayarlayın ve PostgreSQL'e yer bırakın.
Adım 3 — Compose dosyasını yazın
/opt/odoo/compose.yaml dosyasını oluşturun:
services:
db:
image: postgres:17
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- odoo-db-data:/var/lib/postgresql/data
restart: unless-stopped
odoo:
image: odoo:20.0
depends_on:
- db
environment:
HOST: db
USER: odoo
PASSWORD: ${ODOO_DB_PASSWORD}
ports:
- "127.0.0.1:8069:8069"
- "127.0.0.1:8072:8072"
volumes:
- odoo-web-data:/var/lib/odoo
- ./config:/etc/odoo
- ./addons:/mnt/extra-addons
restart: unless-stopped
volumes:
odoo-db-data:
odoo-web-data:İmaj /etc/odoo/odoo.conf dosyasını okur, filestore ve oturumları /var/lib/odoo içinde saklar ve özel modülleri /mnt/extra-addons klasöründen yükler. Giriş betiği HOST, USER ve PASSWORD değerlerini veritabanı bağlantısı olarak Odoo'ya iletir. PostgreSQL kendi süper kullanıcısı postgres ile çalışır; Odoo ise ayrı bir odoo rolüyle bağlanır, çünkü Odoo postgres olarak bağlanmayı reddeder ve dağıtım rehberi veritabanı kullanıcısının süper kullanıcı olmaması gerektiğini söyler. Docker'ın yayınladığı portlar ufw'yi atladığı için iki port da 127.0.0.1 adresine bağlanır.
20.0 etiketi 20.0 serisinin yeniden derlemelerini izler. Tek bir derlemeye sabitlemek isterseniz Docker Hub 20.0-20260926 gibi tarihli etiketleri de listeler.
Adım 4 — Veritabanı rolünü oluşturun ve Odoo'yu başlatın
Önce yalnızca PostgreSQL'i başlatın, ardından odoo rolünü Odoo belgelerinin kullandığı parametrelerle oluşturun: veritabanı oluşturabilir, ama süper kullanıcı değildir ve rol oluşturamaz. İstendiğinde .env dosyasındaki ODOO_DB_PASSWORD değerini iki kez yapıştırın:
docker compose up -d db
docker compose exec db createuser -U postgres --createdb --no-createrole --no-superuser --pwprompt odoocreateuser bağlanamadığını bildirirse PostgreSQL hâlâ hazırlanıyordur; birkaç saniye bekleyip yeniden çalıştırın. Ardından Odoo'yu başlatın ve logunu izleyin:
docker compose up -d
docker compose ps
docker compose logs -f odooLog, HTTP servisinin 8069 portunda çalıştığını gösterdiğinde takibi Ctrl+C ile bırakın. Veritabanı yöneticisinin yerelde yanıt verdiğini kontrol edin:
curl -I http://127.0.0.1:8069/web/database/managerHTTP/1.1 200 OK almalısınız.
Adım 5 — Veritabanını oluşturun, sonra veritabanı yöneticisini kapatın
Veritabanı yöneticisi hiçbir zaman internete açılmasın diye veritabanını bir SSH tüneli üzerinden oluşturun. Kendi bilgisayarınızda sunucuya bir tünel açın:
ssh -L 8069:127.0.0.1:8069 admin@203.0.113.10Bu oturumu açık tutun ve tarayıcıda http://localhost:8069/web/database/manager adresine gidin. Create Database seçeneğini seçin ve şunları girin:
- Master Password:
odoo.confdosyasındakiadmin_passwddeğeri. - Database Name:
dbfilterile eşleşmesi içinodoo. - Email ve Password: ilk yöneticinizin giriş bilgileri. Uzun ve benzersiz bir parola kullanın.
- Diliniz ve ülkeniz. Üretim veritabanında Demo data kutusunu işaretlemeyin.
Odoo sizi oturum açmış olarak karşıladığında veritabanı hazırdır. Sunucuya dönün, veritabanı yöneticisini kapatın ve Odoo'yu yeniden başlatın:
cd /opt/odoo
sed -i 's/^list_db = True/list_db = False/' config/odoo.conf
grep list_db config/odoo.conf
docker compose restart odoogrep komutu list_db = False yazmalıdır. Veritabanı seçme ve yönetim ekranları artık engellidir; Odoo belgelerinin internete açık sistemler için önerdiği de budur. SSH tünelini kapatın.
Adım 6 — Odoo'yu websocket yönlendirmesiyle HTTPS üzerinden yayınlayın
Worker'lar açıkken normal HTTP trafiği 8069 portuna, /websocket üzerindeki websocket bağlantıları ise 8072 portuna gider. Odoo'nun dağıtım rehberi bu ayrımı Nginx için gösterir; Caddy karşılığı iki handle bloğu kullanır. Bu siteyi /etc/caddy/Caddyfile dosyasına ekleyin:
odoo.example.com {
encode zstd gzip
handle /websocket* {
reverse_proxy 127.0.0.1:8072
}
handle {
reverse_proxy 127.0.0.1:8069
}
}Caddy websocket bağlantılarını kendiliğinden yükseltir ve proxy_mode ayarının beklediği X-Forwarded-For, X-Forwarded-Proto ve X-Forwarded-Host başlıklarını kendisi ekler. Caddy'yi yeniden yükleyin ve yalnızca SSH ile web trafiğine izin verin:
sudo systemctl reload caddy
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enablehttps://odoo.example.com adresini açın ve Adım 5'teki yönetici hesabıyla giriş yapın. Websocket yolunu kontrol etmek için tarayıcınızın geliştirici araçlarında Network sekmesini açın: /websocket isteği 101 durum kodunu göstermelidir. Nginx tercih ediyorsanız Odoo'nun dağıtım rehberindeki örnek yapılandırmayı Nginx ve Certbot rehberiyle birlikte izleyin.
Odoo kullanıcı davetlerini, parola sıfırlamalarını, bildirimleri ve teklif ile fatura gibi belgeleri, geliştirici modu açıkken Settings → Technical → Email: Outgoing Mail Servers altında eklediğiniz giden posta sunucusu üzerinden e-postayla gönderir (sunucu smtp.example.com, port 587, TLS (STARTTLS) şifreleme, SMTP kullanıcı adınız ve parolanız; kaydetmeden önce Test Connection düğmesini kullanın).
Adım 7 — Uygulamaları ve özel modülleri kurun
Odoo'nun kendi uygulamalarını Apps menüsünden kurun. Üçüncü taraf veya şirket içi modüller, her modül için bir klasör olmak üzere ve konteynerin okuyabileceği şekilde /opt/odoo/addons içine konur. Bir modülü kopyaladıktan sonra Odoo'yu yeniden başlatın:
docker compose restart odooArdından Settings içinde geliştirici modunu açın, Apps → Update Apps List seçeneğini seçin ve modülü kurun. Yalnızca güvendiğiniz kaynaklardan modül kurun; bir modül verilerinize tam erişimle çalışır.
Yedekleme ve geri yükleme
Odoo'nun durumu iki parçaya ayrılır: PostgreSQL veritabanı ve /var/lib/odoo/filestore/odoo altındaki filestore (ekler ve diğer dosyalar). Bir yedek, aynı anda alınmış ikisini ve yapılandırmanızı birlikte gerektirir. Veritabanı yöneticisinin yedekleme düğmesi böyle bir paket üretir, ancak onu Adım 5'te kapattınız; aşağıdaki komutlar aynı içeriği kabuktan verir:
sudo mkdir -p /opt/backups
sudo chown $USER:$USER /opt/backups
chmod 700 /opt/backups
cd /opt/odoo
docker compose exec -T db pg_dump -U postgres -Fc odoo > /opt/backups/odoo-db-$(date +%F).dump
docker compose exec -T odoo tar czf - -C /var/lib/odoo filestore/odoo > /opt/backups/odoo-filestore-$(date +%F).tar.gz
tar czf /opt/backups/odoo-config-$(date +%F).tar.gz -C /opt/odoo compose.yaml .env config addonspg_dump, Odoo çalışmaya devam ederken tutarlı bir anlık görüntü alır. Geri yüklemek için Odoo'yu durdurun, veritabanını yeniden oluşturun, dökümü yükleyin ve filestore'u volume'a açın. Tarihleri kendi yedeğinizinkilerle değiştirin:
cd /opt/odoo
docker compose stop odoo
docker compose exec -T db dropdb -U postgres --if-exists --force odoo
docker compose exec -T db createdb -U postgres --owner=odoo odoo
docker compose exec -T db pg_restore -U postgres -d odoo < /opt/backups/odoo-db-2026-10-09.dump
docker compose run --rm --no-deps -T odoo tar xzf - -C /var/lib/odoo < /opt/backups/odoo-filestore-2026-10-09.tar.gz
docker compose up -dYeni bir sunucuda önce yapılandırma arşivini /opt/odoo içine açın, ardından PostgreSQL'i başlatıp odoo rolünü oluşturmak için Adım 4'ü çalıştırın ve ancak bundan sonra geri yükleme komutlarını verin. Her yedeği sunucunun dışına kopyalayın ve düzenli olarak bir geri yükleme deneyin.
Odoo'yu güncelleme
20.0 içindeki güncellemeler hata ve güvenlik düzeltmeleri getirir. Önce yedek alın, ardından yeniden derlenmiş imajı çekip konteyneri yeniden oluşturun:
cd /opt/odoo
docker compose pull
docker compose up -d
docker compose logs -f odooBir düzeltme modül verilerini değiştirirse ve sonrasında eksik alan veya görünüm hataları görürseniz veritabanındaki tüm modülleri bir kez güncelleyin. Bu sırada Odoo durdurulmuş olur:
docker compose stop odoo
docker compose run --rm odoo odoo -d odoo -u all --stop-after-init
docker compose up -d19.0'dan 20.0'a veya 20.0'dan sonraki bir sürüme geçmek gibi ana sürüm yükseltmeleri ayrı bir iştir. Odoo'nun Docker Hub sayfası ana sürümler arasında geçişin ayrıntılı taşıma betikleri gerektirdiği konusunda uyarır. Veritabanı taşımasını Odoo'nun yükseltme belgelerine göre planlayın, özel modüllerinizi uyarlayın ve imaj etiketini değiştirmeden önce tüm süreci veritabanının bir kopyası üzerinde test edin. odoo:20.0 etiketini asla yeni bir ana sürüme çevirip yalnızca yeniden başlatmayın. postgres:17 içindeki PostgreSQL ana sürümünü de değiştirmeyin; yeni bir PostgreSQL ana sürümü döküm ve geri yükleme gerektirir.
Sorun giderme
Odoo, postgres kullanıcısının bir güvenlik riski olduğunu söyleyerek kapanıyor
Odoo postgres olarak bağlanacak şekilde yapılandırılmış ve bunu reddediyor. compose.yaml içinde USER: odoo ayarlı olduğunu, rolün var olduğunu (docker compose exec db psql -U postgres -c "\du") ve odoo.conf içinde db_user = postgres satırı bulunmadığını kontrol edin.
Discuss, bildirimler veya canlı sohbet anlık güncellenmiyor
Websocket istekleri websocket sürecine ulaşmıyor. Caddy'nin /websocket* isteklerini 127.0.0.1:8072 adresine gönderdiğini, 8072 portunun compose.yaml içinde yayınlandığını, workers değerinin 0'dan büyük olduğunu ve proxy_mode = True ayarlı olduğunu kontrol edin. Her değişiklikten sonra Caddy'yi yeniden yükleyin ve Odoo'yu yeniden başlatın.
Giriş sayfası veritabanı göstermiyor veya veritabanı bulunamadı hatası veriyor
dbfilter veritabanı adıyla eşleşmiyor. dbfilter = ^odoo$ ile veritabanının adı tam olarak odoo olmalıdır. odoo.conf içindeki filtreyi düzeltin veya veritabanını eşleşen adla yeniden oluşturun, ardından Odoo'yu yeniden başlatın.
İstekler zaman aşımına uğruyor veya worker'lar bellek sınırı mesajlarıyla yeniden başlatılıyor
Bir worker limit_time_cpu, limit_time_real veya bellek sınırlarını aştı. Ayrıntıları docker compose logs odoo ile okuyun; uzun raporlar veya içe aktarmalar gerçekten gerektiriyorsa ilgili sınırı yükseltin, sunucunun kendisi bellek tüketiyorsa workers sayısını azaltın veya RAM ekleyin.
E-postalardaki bağlantılar http:// veya iç bir adres kullanıyor
Odoo bağlantıları web.base.url sistem parametresinden oluşturur. proxy_mode = True ayarlı olduğundan emin olun, ardından https://odoo.example.com üzerinden yönetici olarak giriş yapın ve geliştirici modunda Settings → Technical → System Parameters altındaki parametreyi kontrol edin.
Sonraki adımlar
- CRM'inizin yanına pazarlama otomasyonu ekleyin: Mautic nasıl kurulur.
- Compose dosya biçimini Docker Compose temelleri rehberinde tazeleyin.
- Odoo için sunucu seçeneklerini Odoo hosting, diğer CRM araçları için CRM hosting sayfasında inceleyin.
- fail2ban kuralları, statik dosya sunumu ve ileri worker ayarları için Odoo'nun sistem yapılandırma rehberini okuyun.
Sık sorulan sorular
Odoo ekleri ve yüklenen dosyaları nerede tutar?
PostgreSQL'de değil, odoo-web-data volume'u içindeki /var/lib/odoo/filestore/odoo konumundaki filestore'da. Bir yedek veya başka bir sunucuya taşıma, yedekleme bölümünde gösterildiği gibi aynı anda alınmış veritabanı dökümünü ve filestore arşivini gerektirir.
Bu rehber neden deb paketleri yerine Docker kullanıyor?
Odoo'nun paket sayfasına göre Odoo 20 deb paketi şu anda yalnızca Ubuntu 24.04'ü destekler ve PDF üst ve alt bilgileri için wkhtmltopdf 0.12.6'nın elle kurulması gerekir. Odoo'nun bakımını yaptığı resmi imaj Docker'ın desteklediği her sürümde çalışır ve wkhtmltopdf 0.12.6.1'i zaten içerir.
Kaç worker yapılandırmalıyım?
Odoo'nun dağıtım rehberi üst sınır için (CPU sayısı x 2) + 1 kuralını verir, worker başına yaklaşık altı eş zamanlı kullanıcı öngörür ve hafif istekler için yaklaşık 150 MB, ağır istekler için 1 GB RAM ayırmayı önerir. Küçük sunucularda daha düşük başlayın ve PostgreSQL'e bellek bırakın.
Odoo 19'dan 20'ye imaj etiketini değiştirerek geçebilir miyim?
Hayır. Ana sürüm değişikliği bir veritabanı taşıması gerektirir ve özel modüllerin de yeni sürüme uyarlanması gerekir. Taşımayı Odoo'nun yükseltme belgelerine göre planlayın ve yükseltmeyi her zaman önce veritabanının bir kopyasında test edin.
Veritabanı yöneticisini açık tutmalı mıyım?
Hayır. Odoo belgeleri internete açık sistemlerde onu kapatmayı kuvvetle önerir. Veritabanınız oluştuktan sonra list_db = False ayarlayın ve yedekler için web yedekleme düğmesi yerine pg_dump ile filestore arşivini kullanın.
Odoo hangi HyperDC sunucularında çalışır?
Root erişiminiz olan ve Docker Engine'in desteklendiği her HyperDC Linux VPS, VDS veya dedicated sunucuda. Odoo en düşük donanım değeri yayınlamaz; sunucuyu bu rehberdeki worker formülüyle boyutlandırın ve kullanıcılarınız ile modülleriniz arttıkça büyütün.
Kaynaklar
- nightly.odoo.com
- odoo.com/documentation/20.0/administration/on_premise/packages.html
- odoo.com/documentation/20.0/administration/on_premise/deploy.html
- odoo.com/documentation/20.0/administration/on_premise/source.html
- odoo.com/documentation/20.0/developer/reference/cli.html
- odoo.com/documentation/20.0/administration/upgrade.html
- hub.docker.com/_/odoo
- github.com/odoo/docker/blob/master/20.0/Dockerfile
- raw.githubusercontent.com/odoo/docker/master/20.0/entrypoint.sh
- raw.githubusercontent.com/odoo/docker/master/20.0/odoo.conf
- caddyserver.com/docs/caddyfile/directives/reverse_proxy
- postgresql.org/docs/current/app-pgdump.html