Odoo، یک مجموعه منبع باز محبوب از برنامه‌های تجاری است که به شرکت‌ها کمک می‌کند تا کسب و کار خود را مدیریت و اداره کنند. این مجموعه شامل طیف گسترده‌ای از برنامه‌های کاربردی مانند CRM، تجارت الکترونیک، سازنده وب سایت، صورت‌حساب، حسابداری، تولید، انبار، مدیریت پروژه، موجودی، و موارد بسیار دیگر است که همه به طور یکپارچه گردآوری شده‌اند.

 

بسته به کاربرد و فناوری‌های موجود، Odoo را می‌توان به روش‌های مختلفی نصب کرد. ساده‌ترین و سریع‌ترین راه برای نصب Odoo استفاده از مخازن رسمی Odoo APT است.

نصب Odoo در یک محیط مجازی یا استقرار آن به عنوان یک کانتینر Docker کنترل بیشتری را برروی برنامه ارائه می‌دهد و امکان اجرای چندین نمونه از Odoo را در یک سیستم فراهم می‌نماید.

این مقاله به شرح نصب و استقرار Odoo 15 در یک محیط مجازی پایتون در اوبونتو 20.04 می‌پردازد. در اینجا، Odoo را از مخزن رسمی GitHub دانلود کرده و از Nginx به عنوان یک پروکسی معکوس استفاده می‌نماییم.

 

نصب ابزارهای وابسته

اولین قدم نصب Git ،Pip ،Node.js و ابزارهای مورد نیاز برای ساخت است. این کار با اجرای دستور زیر انجام می‌شود.

sudo apt update
sudo apt install git python3-pip build-essential wget python3-dev python3-venv \
    python3-wheel libfreetype6-dev libxml2-dev libzip-dev libldap2-dev libsasl2-dev \
    python3-setuptools node-less libjpeg-dev zlib1g-dev libpq-dev \
    libxslt1-dev libldap2-dev libtiff5-dev libjpeg8-dev libopenjp2-7-dev \
    liblcms2-dev libwebp-dev libharfbuzz-dev libfribidi-dev libxcb1-dev

 

 

این مطلب نیز ممکن است برای شما مفید باشد: ایجاد کاربر، پایگاه داده و افزودن دسترسی در PostgreSQL

 

ایجاد یک کاربر سیستم

اجرای Odoo توسط کاربر root یک خطر امنیتی بزرگ به همراه دارد. به همین دلیل بهتر است یک کاربر و گروه جدید با دایرکتوری اصلی /opt/odoo15 ایجاد کنید که سرویس Odoo را اجرا می‌نماید. برای این کار دستور زیر را اجرا کنید:

sudo useradd -m -d /opt/odoo15 -U -r -s /bin/bash odoo15

شما می‌توانید نام کاربر را هر چیزی که می‌خواهید نام گذاری نمایید؛ به شرطی که یک کاربر PostgreSQL با همان نام ایجاد کنید.

 

نصب و پیکربندی PostgreSQL

Odoo از PostgreSQL به عنوان پشتیبان پایگاه داده استفاده می‌کند. PostgreSQL در مخازن استاندارد اوبونتو گنجانده شده است. بنابراین نصب آن به سادگی اجرای دستور زیر است:

sudo apt install postgresql

پس از نصب سرویس، یک کاربر PostgreSQL با همان نام کاربری که قبلا ایجاد شده بود ایجاد نمایید. در این مثال، odoo15 است:

sudo su - postgres -c "createuser -s odoo15"

 

 

این مطلب نیز ممکن است برای شما مفید باشد: انتقال پایگاه داده MySQL به PostgreSQL با استفاده از pgLoader

 

نصب wkhtmltopdf

Wkhtmltopdf، مجموعه‌ای از ابزارهای خط فرمان منبع باز برای تبدیل صفحات HTML به PDF و فرمت‌های تصویری مختلف است. به همین دلیل برای چاپ گزارش‌های PDF در Odoo، باید بسته wkhtmltox را نصب کنید.

نسخه wkhtmltopdf موجود در مخازن اوبونتو از هدر و پاورقی پشتیبانی نمی‌کند. نسخه پیشنهادی برای Odoo نسخه 0.12.5 است. در اینجا، بسته را از Github دانلود و نصب می‌نماییم:

sudo wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.bionic_amd64.deb

پس از دانلود فایل، با اجرای دستور زیر، آن را نصب کنید:

sudo apt install ./wkhtmltox_0.12.5-1.bionic_amd64.deb

 

نصب و پیکربندی Odoo 15

در اینجا، Odoo را از منبع داخل یک محیط مجازی پایتون ایزوله نصب خواهیم کرد.

ابتدا کاربر خود را به “odoo15” تغییر دهید:

sudo su - odoo15

از GitHub، کد منبع Odoo 15 را clone بگیرید:

git clone https://www.github.com/odoo/odoo --depth 1 --branch 15.0 /opt/odoo15/odoo

یک محیط مجازی پایتون جدید برای Odoo ایجاد کنید:

cd /opt/odoo15
python3 -m venv odoo-venv

محیط مجازی را فعال نمایید:

source odoo-venv/bin/activate

ابزارهای وابسته Odoo در فایل requires.txt مشخص شده است. همه ماژول‌های پایتون مورد نیاز را با pip3 نصب کنید:

pip3 install wheel
pip3 install -r odoo/requirements.txt

 

اگر در حین نصب با خطای کامپایل مواجه شدید، بررسی کنید که تمام ابزارهای مورد نیاز فهرست شده در قسمت Installing Prerequisites نصب شده باشند.

پس از اتمام، محیط را با اجرای دستور زیر غیرفعال نمایید:

deactivate

با دستور زیر، یک دایرکتوری جدید جداگانه برای افزونه‌های شخص ثالث ایجاد نمایید:

mkdir /opt/odoo15/odoo-custom-addons

بعداً باید این دایرکتوری را به پارامتر addons_path اضافه کنید. این پارامتر فهرستی از دایرکتوری‌ها را که در آن، Odoo ماژول‌ها را جستجو می‌نماید، تعریف می‌کند.

به کاربر sudo خود برگردید:

exit

یک فایل پیکربندی با محتوای زیر ایجاد نمایید:

sudo nano /etc/odoo15.conf
                                  /etc/odoo15.conf

[options]
; This is the password that allows database operations:
admin_passwd = my_admin_passwd
db_host = False
db_port = False
db_user = odoo15
db_password = False
addons_path = /opt/odoo15/odoo/addons,/opt/odoo15/odoo-custom-addons

فراموش نکنید که my_admin_passwd را به پسوردی امن‌تر تغییر دهید.

 

این مطلب نیز ممکن است برای شما مفید باشد: ادغام فایل های PDF در لینوکس

 

ایجاد فایل Systemd Unit

فایل unit، یک فایل پیکربندی به سبک ini است که اطلاعات مربوط به یک سرویس را در خود دارد.

ویرایشگر متن خود را باز کرده و فایلی به نام odoo15.service با محتوای زیر ایجاد نمایید:

sudo nano /etc/systemd/system/odoo15.service
                  /etc/systemd/system/odoo15.service

[Unit]
Description=Odoo15
Requires=postgresql.service
After=network.target postgresql.service

[Service]
Type=simple
SyslogIdentifier=odoo15
PermissionsStartOnly=true
User=odoo15
Group=odoo15
ExecStart=/opt/odoo15/odoo-venv/bin/python3 /opt/odoo15/odoo/odoo-bin -c /etc/odoo15.conf
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target

با دستور زیر، به systemd اطلاع دهید که یک فایل unit جدید وجود دارد:

sudo systemctl daemon-reload

 

سرویس Odoo را راه‌اندازی کرده و با دستور زیر آن را به گونه‌ای تنظیم نمایید که در هنگام بوت اجرا شود:

sudo systemctl enable --now odoo15

بررسی کنید که سرویس راه‌اندازی شده و در حال اجرا است:

sudo systemctl status odoo15

خروجی باید چیزی شبیه به زیر باشد و نشان دهد که سرویس Odoo فعال و در حال اجرا است:

Output:
● odoo15.service - Odoo15
     Loaded: loaded (/etc/systemd/system/odoo15.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-10-26 09:56:28 UTC; 28s ago
...

شما می‌توانید پیام‌های ثبت شده توسط سرویس Odoo را با استفاده از دستور زیر بررسی کنید:

sudo journalctl -u odoo15

 

تست نصب

مرورگر خود را باز کرده و http://<your_domain_or_IP_address>:8069 را تایپ نمایید.

با فرض موفقیت آمیز بودن نصب، صفحه‌ای مشابه تصویر زیر ظاهر می‌شود:

 

پیکربندی Nginx به عنوان SSL Termination Proxy

وب سرور پیش‌فرض Odoo، ترافیک را از طریق HTTP ارائه می‌کند. به همین دلیل به منظور ایمن‌تر کردن استقرار Odoo، بهتر است وب سرور Nginx را به عنوان یک پروکسی SSL termination تنظیم نمایید که ترافیک را از طریق HTTPS ارسال می‌کند.

پروکسی SSL termination، یک سرور پروکسی است که رمزگذاری/رمزگشایی SSL را مدیریت می‌نماید. این بدان معناست که پروکسی اتصالات TLS ورودی (HTTPS) را پردازش و رمزگشایی می‌کند و درخواست‌های رمزگذاری نشده را به سرویس داخلی (Odoo) ارسال می‌نماید. بنابراین ترافیک بین Nginx و Odoo رمزگذاری شده نخواهد بود.

استفاده از یک پروکسی معکوس مزایای زیادی مانند Load Balancing ،SSL Termination ،Caching ،Compression ،Serving Static Content و غیره به شما ارائه می‌دهد.

قبل از ادامه این بخش، مطمئن شوید که پیش نیازهای زیر را در سیستم خود دارید:

  • نام دامنه‌ای که به IP سرور عمومی شما نگاشت شده است. در اینجا از example.com استفاده خواهیم کرد.
  • Nginx نصب شده.
  • گواهی SSL برای دامنه شما (می‌توانید از گواهینامه Let’s Encrypt SSL استفاده کنید).

 

ویرایشگر متن خود را باز کرده و بلوک سرور دامنه را ایجاد/ویرایش نمایید:

sudo nano /etc/nginx/sites-enabled/example.com.conf

پیکربندی زیر، SSL Termination، تغییر مسیر HTTP به HTTPS، تغییر مسیر WWW به غیر WWW، ذخیره سازی فایل‌های استاتیک و فعال کردن فشرده‌سازی GZip را تنظیم می‌کند.

                      /etc/nginx/sites-enabled/example.com.conf

# Odoo servers
upstream odoo {
 server 127.0.0.1:8069;
}

upstream odoochat {
 server 127.0.0.1:8072;
}

# HTTP -> HTTPS
server {
    listen 80;
    server_name www.example.com example.com;

    include snippets/letsencrypt.conf;
    return 301 https://example.com$request_uri;
}

# WWW -> NON WWW
server {
    listen 443 ssl http2;
    server_name www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com;

    proxy_read_timeout 720s;
    proxy_connect_timeout 720s;
    proxy_send_timeout 720s;

    # Proxy headers
    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;

    # SSL parameters
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    # log files
    access_log /var/log/nginx/odoo.access.log;
    error_log /var/log/nginx/odoo.error.log;

    # Handle longpoll requests
    location /longpolling {
        proxy_pass http://odoochat;
    }

    # Handle / requests
    location / {
       proxy_redirect off;
       proxy_pass http://odoo;
    }

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

    # Gzip
    gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
    gzip on;
}

فراموش نکنید که example.com را با دامنه Odoo خود جایگزین کرده و مسیر صحیح را برای فایل‌های گواهی SSL تنظیم نمایید.

 

این مطلب نیز ممکن است برای شما مفید باشد: پیکربندی گزارش های دسترسی و خطای Nginx

 

پس از اتمام کار، سرویس Nginx را مجددا راه‌اندازی کنید:

sudo systemctl restart nginx

سپس باید به Odoo بگویید که از پروکسی استفاده کند. برای انجام این کار، فایل پیکربندی را باز کرده و خط زیر را اضافه نمایید:

                           /etc/odoo15.conf

proxy_mode = True

به منظور اعمال تغییرات، سرویس Odoo را مجددا راه‌اندازی کنید:

sudo systemctl restart odoo15

در این مرحله، پراکسی معکوس پیکربندی می‌شود و می‌توانید به نمونه Odoo خود در https://example.com دسترسی داشته باشید.

 

تغییر رابط اتصال

این مرحله اختیاری است، اما یک عملیات امنیتی خوب است.

به طور پیش فرض، سرور Odoo در تمام رابط‌ها برروی پورت 8069 شنود می‌کند. به منظور غیرفعال کردن دسترسی مستقیم به نمونه Odoo، می‌توانید پورت 8069 را برای همه رابط‌های عمومی مسدود کرده یا Odoo را مجبور نمایید که تنها برروی رابط محلی گوش دهد.

در اینجا، Odoo را تنها برای شنود برروی 127.0.0.1 پیکربندی می‌کنیم. بدین منظور فایل پیکربندی را باز کرده و دو خط زیر را در انتهای فایل اضافه نمایید:

              /etc/odoo15.conf

xmlrpc_interface = 127.0.0.1
netrpc_interface = 127.0.0.1

فایل پیکربندی را ذخیره کرده و سرور Odoo را مجددا راه‌اندازی نمایید تا تغییرات اعمال شوند:

sudo systemctl restart odoo15

 

فعال کردن Multiprocessing

به طور پیش فرض، Odoo در حالت multithreading کار می‌کند. برای استقرار تولید، توصیه می‌شود به یک سرور Multiprocessing بروید؛ زیرا باعث افزایش پایداری و استفاده بهتر از منابع سیستم می‌شود.

به منظور فعال کردن Multiprocessing، باید پیکربندی Odoo را ویرایش کرده و یک عدد غیر صفر برای worker processها تنظیم نمایید. تعداد workerها بر اساس تعداد هسته‌های CPU در سیستم و حافظه RAM موجود محاسبه می‌شود.

طبق مستندات رسمی Odoo، برای محاسبه تعداد workerها و اندازه حافظه RAM مورد نیاز، می‌توانید از فرمول‌ها و فرضیات زیر استفاده کنید:

 

محاسبه تعداد Worker

حداکثر نظری تعداد workerها برابر با (system_cpus * 2) + 1 است.

1 عدد worker می‌تواند حدوداً به 6 کاربر همزمان سرویس دهد.

Workerهای مربوط به Cron نیز به CPU نیاز دارند.

 

محاسبه اندازه حافظه RAM

ما در نظر خواهیم گرفت که 20٪ از تمام درخواست‌ها، درخواست‌های سنگین و 80٪ درخواست‌های سبک‌تر هستند. درخواست‌های سنگین از حدود 1 گیگابایت RAM استفاده می‌کنند؛ در حالی که درخواست‌های سبک‌تر از 150 مگابایت RAM استفاده می‌نمایند. در این صورت خواهیم داشت:

Needed RAM = number_of_workers * ( (light_worker_ratio * light_worker_ram_estimation) + (heavy_worker_ratio * heavy_worker_ram_estimation) )

اگر نمی‌دانید چند CPU روی سیستم خود دارید، از دستور grep زیر استفاده کنید:

grep -c ^processor /proc/cpuinfo

فرض کنید سیستمی با 4 هسته CPU و 8 گیگابایت حافظه RAM و 30 کاربر همزمان Odoo دارید. حداقل و حداکثر تعداد workerها به صورت زیر خواهد بود:

min: 30 users / 6 = 5
max: (4 * 2) + 1 = 9

بر اساس محاسبات بالا می توانید از 5 عدد worker به همراه 1 عدد worker برای cron worker استفاده نمایید که در مجموع 6  عدد worker می‌شود.

 

میزان مصرف حافظه RAM بر اساس این تعداد worker به صورت زیر خواهد بود:

RAM = 6 * ((0.8*150) + (0.2*1024)) ~= 2 GB of RAM

محاسبه نشان می‌دهد که نصب Odoo به حدود 2 گیگابایت RAM نیاز دارد.

به منظور تغییر حالت Multiprocessing، فایل پیکربندی را باز کرده و مقادیر محاسبه شده را اضافه نمایید:

           /etc/odoo15.conf

limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_request = 8192
limit_time_cpu = 600
limit_time_real = 1200
max_cron_threads = 1
workers = 5

برای اعمال تغییرات، سرویس Odoo را مجددا راه اندازی کنید:

sudo systemctl restart odoo15

بقیه منابع سیستم توسط سایر سرویس‌هایی که روی این سیستم اجرا می‌شوند، استفاده خواهد شد. در این راهنما، Odoo را به همراه PostgreSQL و Nginx روی یک سرور نصب کردیم. بسته به تنظیماتی که دارید، ممکن است سرویس‌های دیگری نیز روی سرورتان اجرا شوند.

 

 

 

منبع:

linuxize