Docker Odoo Dağıtımı: Üretime Hazır Container Kurulumu

Odoo'yu üretim için Docker konteynerlerine dağıtın. Docker Compose yapılandırmasını, PostgreSQL kurulumunu, Nginx ters proxy'yi, SSL'yi, yedeklemeleri ve ölçeklendirmeyi kapsayan eksiksiz kılavuz.

E

ECOSIRE Research and Development Team

ECOSIRE Ekibi

5 Mart 20264 dk okuma835 Kelime

Docker Odoo Dağıtımı: Üretime Hazır Container Kurulumu

Docker, Docker Hub'da 10 milyondan fazla Odoo Docker görüntüsü çekilmesiyle üretim ortamlarında Odoo için standart dağıtım yöntemi haline geldi. Konteynerli dağıtım, tekrarlanabilir ortamlar, kolay ölçeklendirme, basitleştirilmiş yedeklemeler ve Odoo örnekleri arasında temiz ayrım sağlar. Bu kılavuz, üretime hazır eksiksiz bir Docker Odoo kurulumunu kapsar.

Önemli Çıkarımlar

  • Docker Compose, Odoo, PostgreSQL ve Nginx'i bağlantılı hizmetler olarak düzenler
  • Kalıcı birimler, verilerin konteynerin yeniden başlatılmasından ve güncellenmesinden sonra hayatta kalmasını sağlar
  • Nginx ters proxy, SSL sonlandırma, statik dosya önbelleğe alma ve yük dengeleme işlemlerini gerçekleştirir
  • Otomatik yedeklemeler minimum manuel müdahaleyle veri kaybına karşı koruma sağlar

Mimariye Genel Bakış

Üretim Odoo Docker dağıtımı üç temel hizmetten oluşur:

  1. Odoo uygulama sunucusu: Web sunucusunu ve uygulama mantığını çalıştıran Odoo konteyneri
  2. PostgreSQL veritabanı: Tüm Odoo verilerini depolayan özel bir veritabanı taşıyıcısı
  3. Nginx ters proxy: SSL'yi yönetir, statik dosyalar sunar ve Odoo'ya proxy istekleri sunar

İsteğe bağlı hizmetler arasında Redis (önbelleğe alma ve oturum depolama için), bir yedekleme kapsayıcısı (otomatik veritabanı dökümleri) ve izleme (Prometheus + Grafana) bulunur.


Docker Oluşturma Yapılandırması

Dağıtımın temeli, tüm hizmetleri tanımlayan bir docker-compose.yml dosyasıdır:

version: "3.8"

services:
  odoo:
    image: odoo:17.0
    depends_on:
      - db
    ports:
      - "8069:8069"
      - "8072:8072"
    volumes:
      - odoo-data:/var/lib/odoo
      - ./config:/etc/odoo
      - ./addons:/mnt/extra-addons
    environment:
      - HOST=db
      - PORT=5432
      - USER=odoo
      - PASSWORD=odoo_db_password
    restart: unless-stopped

  db:
    image: postgres:16
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=odoo
      - POSTGRES_PASSWORD=odoo_db_password
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - postgres-data:/var/lib/postgresql/data/pgdata
    restart: unless-stopped

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      - ./certbot/conf:/etc/letsencrypt
      - ./certbot/www:/var/www/certbot
    depends_on:
      - odoo
    restart: unless-stopped

volumes:
  odoo-data:
  postgres-data:

Odoo Yapılandırma Dosyası

Üretim için optimize edilmiş ayarlarla config/odoo.conf oluşturun:

[options]
addons_path = /mnt/extra-addons,/usr/lib/python3/dist-packages/odoo/addons
admin_passwd = your_strong_admin_password
db_host = db
db_port = 5432
db_user = odoo
db_password = odoo_db_password
db_name = production_db
dbfilter = ^production_db$
list_db = False
proxy_mode = True
workers = 4
max_cron_threads = 2
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_time_cpu = 600
limit_time_real = 1200
log_level = warn

Açıklanan temel ayarlar:

  • proxy_mode = True: Nginx'in arkasında çalışırken iletilen başlıkları doğru şekilde işlemek için gereklidir
  • workers = 4: Çalışan süreçlerin sayısı (temel kural: CPU çekirdeği başına 2 çalışan)
  • max_cron_threads = 2: Zamanlanmış eylemler için ayrılmış iş parçacıkları
  • list_db = False: Giriş sayfasında veritabanı listelenmesini engeller (güvenlik)
  • dbfilter: Tek bir veritabanına erişimi kısıtlar

Nginx Ters Proxy Yapılandırması

upstream odoo {
    server odoo:8069;
}
upstream odoochat {
    server odoo:8072;
}

server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    client_max_body_size 200m;
    proxy_read_timeout 720s;
    proxy_connect_timeout 720s;
    proxy_send_timeout 720s;

    location /websocket {
        proxy_pass http://odoochat;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    location / {
        proxy_pass http://odoo;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location ~* /web/static/ {
        proxy_cache_valid 200 90m;
        proxy_buffering on;
        expires 864000;
        proxy_pass http://odoo;
    }
}

Yedekleme Stratejisi

Otomatik Veritabanı Yedeklemeleri

Cron aracılığıyla günlük olarak çalışan bir yedekleme komut dosyası oluşturun:

#!/bin/bash
BACKUP_DIR=/backups/odoo
DATE=$(date +%Y%m%d_%H%M%S)
docker exec odoo-db pg_dump -U odoo production_db | gzip > $BACKUP_DIR/odoo_$DATE.sql.gz
find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete

Dosya Deposu Yedekleme

Odoo dosya deposu (yüklenen belgeler, ekler) odoo-data biriminde bulunur. Veritabanının yanında yedekleyin:

docker run --rm -v odoo-data:/data -v /backups:/backup alpine \
  tar czf /backup/odoo-filestore_$DATE.tar.gz /data

Güvenliği Güçlendirme

  • Odoo.conf dosyasındaki varsayılan admin_passwd değerini güçlü bir rastgele parolayla değiştirin
  • Veritabanı numaralandırmasını önlemek için list_db = False değerini ayarlayın
  • Veritabanı erişimini tek bir veritabanına kısıtlamak için dbfilter kullanın
  • Konteynerleri mümkün olduğunca root olmayan kullanıcılar olarak çalıştırın
  • Docker görüntülerini güvenlik yamalarıyla güncel tutun
  • Docker sırlarını veya ortam değişkeni dosyalarını kullanın (satır içi şifreleri değil)
  • Docker ağlarını kullanarak konteyner ağ erişimini kısıtlayın

Sıkça Sorulan Sorular

S: Tek bir Odoo kapsayıcısı kaç eşzamanlı kullanıcıyı yönetebilir?

4 çalışana sahip bir Odoo konteyneri, yaklaşık 20-30 eşzamanlı kullanıcıyı rahatlıkla yönetir. Daha yüksek eşzamanlılık için çalışanları artırın (CPU/RAM ile sınırlıdır) veya bir yük dengeleyicinin arkasına birden fazla Odoo konteyneri dağıtın.

S: Odoo'yu Docker'da nasıl güncellerim?

Yeni görüntüyü çekin, mevcut kabı durdurun, yeni görüntüyü mevcut birimlerle çalıştırın. Kalıcı birimler, görüntü güncellemelerinde verilerinizi ve dosya deponuzu korur.

S: Resmi Odoo Docker görüntüsünü mü kullanmalıyım yoksa kendiminkini mi oluşturmalıyım?

Resmi görüntü standart dağıtımlar için çalışır. Belirli Python paketlerine, özel modüller için sistem bağımlılıklarına veya önceden yüklenmiş topluluk modüllerine ihtiyaç duyduğunuzda özel bir görüntü oluşturun.

S: Odoo Enterprise'ı Docker'da nasıl yönetirim?

Odoo Enterprise, herkese açık bir Docker görüntüsü olarak mevcut değildir. Kurumsal eklenti dizinini bir birim olarak bağlayın ve addons_path yapılandırmasında buna referans verin. Geçerli bir Odoo Enterprise aboneliğine ihtiyacınız var.


Sırada Ne Var

Docker deployment gives you a reproducible, scalable, and maintainable Odoo production environment. Bu yapılandırmayla başlayın ve kullanım düzenlerinize göre çalışan sayılarını, bellek sınırlarını ve önbelleğe almayı ayarlayın.

Odoo dağıtım yardımı için ECOSIRE ile iletişime geçin veya yönetilen barındırma için Odoo destek hizmetlerimizi inceleyin.


ECOSIRE tarafından yayınlandı - işletmelerin kurumsal yazılım çözümleriyle ölçeklenmesine yardımcı oluyor.

E

Yazan

ECOSIRE Research and Development Team

ECOSIRE'da kurumsal düzeyde dijital ürünler geliştiriyor. Odoo entegrasyonları, e-ticaret otomasyonu ve yapay zeka destekli iş çözümleri hakkında içgörüler paylaşıyor.

WhatsApp'ta Sohbet Et