Как развернуть Odoo 11 в Ubuntu 18.04

Odoo — это самое популярное универсальное программное обеспечение для бизнеса в мире. Он предлагает широкий спектр бизнес-приложений, включая CRM, веб-сайт, электронную коммерцию, биллинг, бухгалтерский учет, производство, склад, управление проектами, инвентаризацию и многое другое, и все они полностью интегрированы.

Есть несколько способов установить Odoo в зависимости от необходимого варианта использования. Самый простой и быстрый способ установить Odoo — использовать официальные репозитории APT.

Если вы хотите иметь больше гибкости, например, запускать несколько версий Odoo в одной системе, вы можете либо использовать docker и docker compose, либо установить Odoo в виртуальной среде.

В этом руководстве описаны шаги, необходимые для установки и настройки Odoo для производства с использованием исходного кода Git и виртуальной среды Python в системе Ubuntu 18.04.

Подготовка

Войдите на свой компьютер Ubuntu как пользователь sudo и обновите систему до последних пакетов:

sudo apt update && sudo apt upgrade

Установите Git , Pip , Node.js и инструменты, необходимые для создания зависимостей Odoo:

sudo apt install git python3-pip build-essential wget python3-dev python3-venv python3-wheel libxslt-dev libzip-dev libldap2-dev libsasl2-dev python3-setuptools node-less

Создать пользователя Odoo

Создайте нового системного пользователя и группу с домашним каталогом /opt/odoo который будет запускать службу Odoo.

sudo useradd -m -d /opt/odoo -U -r -s /bin/bash odoo
Вы можете называть пользователя как хотите, просто убедитесь, что вы создали пользователя postgres с тем же именем.

Установить и настроить PostgreSQL

Установите пакет PostgreSQL из репозиториев Ubuntu по умолчанию:

sudo apt install postgresql

После завершения установки создайте пользователя PostgreSQL с тем же именем, что и ранее созданный системный пользователь, в нашем случае odoo :

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

Установить Wkhtmltopdf

Пакет wkhtmltox предоставляет набор инструментов командной строки с открытым исходным кодом, которые могут преобразовывать HTML в PDF и различные форматы изображений. Чтобы распечатать отчеты в формате PDF, вам понадобится инструмент wkhtmltopdf . Рекомендуемая версия для Odoo — 0.12.1 которой нет в официальных репозиториях Ubuntu 18.04.

Загрузите пакет, используя следующую команду wget :

wget https://builds.wkhtmltopdf.org/0.12.1.3/wkhtmltox_0.12.1.3-1~bionic_amd64.deb

После завершения загрузки установите пакет, набрав:

sudo apt install ./wkhtmltox_0.12.1.3-1~bionic_amd64.deb

Установить и настроить Odoo

Мы установим Odoo из репозитория GitHub в изолированной виртуальной среде Python, чтобы иметь больший контроль над версиями и обновлениями.

Перед тем, как начать процесс установки, убедитесь, что вы переключились на пользователя odoo .

sudo su - odoo

Чтобы подтвердить, что вы вошли в систему как пользователь odoo вы можете использовать следующую команду:

whoami

Теперь мы можем приступить к процессу установки. Сначала клонируйте odoo из репозитория GitHub:

git clone https://www.github.com/odoo/odoo --depth 1 --branch 11.0 /opt/odoo/odoo11
  • Если вы хотите установить другую версию Odoo, просто измените номер версии после переключателя --branch .
  • Вы можете назвать каталог как хотите, например, вместо odoo11 вы можете использовать имя вашего домена.

Чтобы создать новую виртуальную среду для экземпляра Odoo 11, запустите:

cd /opt/odoopython3 -m venv odoo11-venv

активируйте среду с помощью следующей команды:

source odoo11-venv/bin/activate

и установите все необходимые модули Python с помощью pip3:

pip3 install wheelpip3 install -r odoo11/requirements.txt

pip3 — это инструмент для установки пакетов Python и управления ими.

Если вы обнаружите какие-либо ошибки компиляции во время установки, убедитесь, что вы установили все необходимые зависимости, перечисленные в разделе « Before you begin ».

После завершения установки деактивируйте среду и вернитесь к своему пользователю sudo, используя следующие команды:

deactivate
exit

Если вы планируете устанавливать собственные модули, лучше всего установить эти модули в отдельный каталог. Чтобы создать новый каталог для наших пользовательских модулей, выполните:

sudo mkdir /opt/odoo/odoo11-custom-addonssudo chown odoo: /opt/odoo/odoo11-custom-addons

Далее нам нужно создать файл конфигурации, мы можем либо создать новый с нуля, либо скопировать включенный файл конфигурации:

sudo cp /opt/odoo/odoo11/debian/odoo.conf /etc/odoo11.conf

Откройте файл и отредактируйте его следующим образом:

/etc/odoo11.conf
[options]
; This is the password that allows database operations:
admin_passwd = my_admin_passwd
db_host = False
db_port = False
db_user = odoo
db_password = False
addons_path = /opt/odoo/odoo11/addons
; If you are using custom modules
; addons_path = /opt/odoo/odoo11/addons,/opt/odoo/odoo11-custom-addons
Не забудьте изменить my_admin_passwd на что-нибудь более безопасное и настроить addons_path если вы используете собственные модули.

Создайте файл модуля systemd

Чтобы запустить odoo в качестве службы, мы создадим odoo11.service модуля odoo11.service каталоге /etc/systemd/system/ со следующим содержимым:

/etc/systemd/system/odoo11.service
[Unit]
Description=Odoo11
Requires=postgresql.service
After=network.target postgresql.service

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

[Install]
WantedBy=multi-user.target

Сообщите systemd, что мы создали новый файл модуля, и запустите службу Odoo, выполнив:

sudo systemctl daemon-reloadsudo systemctl start odoo11

Вы можете проверить статус службы с помощью следующей команды:

sudo systemctl status odoo11
● odoo11.service - Odoo11
   Loaded: loaded (/etc/systemd/system/odoo11.service; disabled; vendor preset: enabled)
   Active: active (running) since Thu 2018-05-03 21:23:08 UTC; 3s ago
 Main PID: 18351 (python3)
    Tasks: 4 (limit: 507)
   CGroup: /system.slice/odoo11.service
           └─18351 /opt/odoo/odoo11-venv/bin/python3 /opt/odoo/odoo11/odoo-bin -c /etc/odoo11.conf

и если ошибок нет, вы можете включить автоматический запуск службы Odoo во время загрузки:

sudo systemctl enable odoo11

Если вы хотите увидеть сообщения, зарегистрированные службой Odoo, вы можете использовать следующую команду:

sudo journalctl -u odoo11

Проверить установку

Откройте браузер и введите: http://<your_domain_or_IP_address>:8069

Если установка прошла успешно, появится экран, подобный следующему:

Настройте Nginx в качестве прокси для завершения SSL

Если вы хотите использовать Nginx в качестве прокси завершения SSL, убедитесь, что вы выполнили следующие предварительные требования:

  • У вас есть доменное имя, указывающее на IP-адрес вашего публичного сервера. В этом руководстве мы будем использовать example.com .
  • У вас установлен Nginx, следуя этим инструкциям .
  • У вас установлен сертификат SSL для вашего домена. Вы можете установить бесплатный SSL-сертификат Let's Encrypt, следуя этим инструкциям .

Веб-сервер Odoo по умолчанию обслуживает трафик через HTTP. Чтобы сделать наше развертывание Odoo более безопасным, мы настроим Nginx в качестве прокси завершения SSL, который будет обслуживать трафик по HTTPS.

Прокси-сервер завершения SSL — это прокси-сервер, который обрабатывает шифрование / дешифрование SSL. Это означает, что наш прокси-сервер завершения (Nginx) будет обрабатывать и расшифровывать входящие TLS-соединения (HTTPS), а также передавать незашифрованные запросы нашей внутренней службе (Odoo), поэтому трафик между Nginx и Odoo не будет зашифрован (HTTP).

Нам нужно сообщить Odoo, что мы будем использовать прокси, открыть файл конфигурации и добавить следующую строку:

/etc/odoo11.conf
proxy_mode = True

Перезапустите сервис Odoo, чтобы изменения вступили в силу:

sudo systemctl restart odoo11

Использование Nginx в качестве прокси дает нам несколько преимуществ. В этом примере мы настроим завершение SSL, перенаправление HTTP на HTTPS, перенаправление WWW на не WWW, кэшируем статические файлы и включаем сжатие GZip .

/etc/nginx/sites-enabled/example.com
# 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 с помощью:

sudo systemctl restart nginx

Изменить интерфейс привязки

Это необязательный шаг, но это хорошая практика безопасности. По умолчанию сервер Odoo прослушивает порт 8069 на всех интерфейсах, поэтому, если вы хотите отключить прямой доступ к своему экземпляру Odoo, вы можете либо заблокировать порт 8069 для всех общедоступных интерфейсов, либо заставить Odoo прослушивать только локальный интерфейс.

В этом руководстве мы заставим Odoo прослушивать только 127.0.0.1 , откройте конфигурацию Odoo и добавьте следующие две строки в конец файла:

/etc/odoo11.conf
xmlrpc_interface = 127.0.0.1
netrpc_interface = 127.0.0.1

Сохраните файл конфигурации и перезапустите сервер Odoo, чтобы изменения вступили в силу:

sudo systemctl restart odoo

Включить многопроцессорность

По умолчанию Odoo работает в многопоточном режиме. Для производственных развертываний рекомендуется переключиться на многопроцессорный сервер, поскольку это повышает стабильность и позволяет лучше использовать системные ресурсы. Чтобы включить многопроцессорность, нам нужно отредактировать конфигурацию Odoo и установить ненулевое количество рабочих процессов.

Количество рабочих вычисляется на основе количества ядер ЦП в системе и доступной оперативной памяти.

Согласно официальной документации Odoo, для расчета количества рабочих и требуемого объема оперативной памяти мы будем использовать следующие формулы и предположения:

Расчет количества рабочих

  • теоретическое максимальное количество рабочих = (system_cpus * 2) + 1
  • 1 работник может обслуживать ~ = 6 одновременных пользователей
  • Рабочим Cron также требуется процессор

Расчет объема оперативной памяти

  • Будем считать, что 20% всех запросов — это тяжелые запросы, а 80% — более легкие. Тяжелые запросы используют около 1 ГБ ОЗУ, а более легкие — около 150 МБ ОЗУ.
  • Необходимая RAM = количество_работников * ((light_worker_ratio * light_worker_ram_estimation) + (heavy_worker_ratio * heavy_worker_ram_estimation))

Если вы не знаете, сколько процессоров у вас в системе, вы можете использовать следующую команду:

grep -c ^processor /proc/cpuinfo

Допустим, у нас есть система с 4 ядрами ЦП, 8 ГБ оперативной памяти и 30 одновременными пользователями Odoo.

  • 30 users / 6 = **5** (5 — теоретическое количество необходимых рабочих)
  • (4 * 2) + 1 = **9** (9 — теоретическое максимальное количество рабочих)

Основываясь на приведенном выше расчете, мы можем использовать 5 рабочих + 1 рабочий для cron worker, что в сумме составляет 6 рабочих.

Рассчитайте потребление оперативной памяти исходя из количества рабочих:

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

Приведенный выше расчет показывает, что для нашей установки Odoo потребуется около 2 ГБ ОЗУ.

Чтобы переключиться в многопроцессорный режим, откройте файл конфигурации и добавьте следующие строки:

/etc/odoo11.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 odoo11

Остальные системные ресурсы будут использоваться другими службами, работающими на нашем компьютере. В этом руководстве мы установили Odoo вместе с PostgreSQL и Nginx на одном сервере, и в зависимости от ваших настроек на вашем сервере могут быть запущены и другие службы.

Выводы

Это оно! В этом руководстве вы познакомились с установкой Odoo 11 на Ubuntu 18.04 в виртуальной среде Python с использованием Nginx в качестве обратного прокси . Вы также узнали, как включить многопроцессорность и оптимизировать Odoo для производственной среды. Вы также можете ознакомиться с нашим руководством о том, как создавать автоматические ежедневные резервные копии ваших баз данных Odoo .

Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.

Оставьте комментарий