İçeriğe geç

Eğitimlerİş uygulamaları

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
  1. Ön koşullar
  2. Adım 1 — Proje klasörünü ve gizli değerleri oluşturun
  3. Adım 2 — odoo.conf dosyasını yazın
  4. Adım 3 — Compose dosyasını yazın
  5. Adım 4 — Veritabanı rolünü oluşturun ve Odoo'yu başlatın
  6. Adım 5 — Veritabanını oluşturun, sonra veritabanı yöneticisini kapatın
  7. Adım 6 — Odoo'yu websocket yönlendirmesiyle HTTPS üzerinden yayınlayın
  8. Adım 7 — Uygulamaları ve özel modülleri kurun
  9. Yedekleme ve geri yükleme
  10. Odoo'yu güncelleme
  11. Sorun giderme
  12. Odoo, postgres kullanıcısının bir güvenlik riski olduğunu söyleyerek kapanıyor
  13. Discuss, bildirimler veya canlı sohbet anlık güncellenmiyor
  14. Giriş sayfası veritabanı göstermiyor veya veritabanı bulunamadı hatası veriyor
  15. İstekler zaman aşımına uğruyor veya worker'lar bellek sınırı mesajlarıyla yeniden başlatılıyor
  16. E-postalardaki bağlantılar http:// veya iç bir adres kullanıyor
  17. 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

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:

KaynakEn düşük (resmi)Önerilen başlangıç
CPUYayınlanmamış2 vCPU
RAMYayınlanmamış4 GB
DiskYayı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:

Bash
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:

Bash
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:

.env
POSTGRES_PASSWORD=paste-the-first-value
ODOO_DB_PASSWORD=paste-the-second-value
Bash
chmod 600 .env

Adı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:

INI
[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 = 8192

Bu 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 gelen X-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ızca odoo adlı veritabanını sunar.
  • list_db = True geç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-port varsayı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_soft değerini aşan worker'lar mevcut istekten sonra yeniden başlatılır; limit_memory_hard değ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:

YAML
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:

Bash
docker compose up -d db
docker compose exec db createuser -U postgres --createdb --no-createrole --no-superuser --pwprompt odoo

createuser 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:

Bash
docker compose up -d
docker compose ps
docker compose logs -f odoo

Log, 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:

Bash
curl -I http://127.0.0.1:8069/web/database/manager

HTTP/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:

Bash
ssh -L 8069:127.0.0.1:8069 admin@203.0.113.10

Bu 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.conf dosyasındaki admin_passwd değeri.
  • Database Name: dbfilter ile eşleşmesi için odoo.
  • 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:

Bash
cd /opt/odoo
sed -i 's/^list_db = True/list_db = False/' config/odoo.conf
grep list_db config/odoo.conf
docker compose restart odoo

grep 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:

Caddyfile
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:

Bash
sudo systemctl reload caddy
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

https://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:

Bash
docker compose restart odoo

Ardı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:

Bash
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 addons

pg_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:

Bash
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 -d

Yeni 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:

Bash
cd /opt/odoo
docker compose pull
docker compose up -d
docker compose logs -f odoo

Bir 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:

Bash
docker compose stop odoo
docker compose run --rm odoo odoo -d odoo -u all --stop-after-init
docker compose up -d

19.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

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

Şifre Oluştur

Lütfen onaylayın