
Odoo — самое популярное в мире комплексное программное обеспечение для бизнеса. Оно предлагает широкий спектр бизнес-приложений, включая CRM, веб-сайт, электронную коммерцию, выставление счетов, бухгалтерский учет, производство, склад, управление проектами, инвентаризацию и многое другое, — все они легко интегрируются.
Существует несколько способов установки 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 в каталоге /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://
Если установка прошла успешно, появится экран, подобный следующему:

Настройте 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 МБ.
- Необходимая оперативная память = количество_рабочих * ( (коэффициент_объёма_рабочих * оценка_оперативной_памяти_объёма_рабочих) + (коэффициент_объёма_рабочих * оценка_оперативной_памяти_объёма_рабочих) )
Если вы не знаете, сколько процессоров в вашей системе, вы можете использовать следующую команду:
grep -c ^processor /proc/cpuinfo
Предположим, у нас есть система с 4 ядрами ЦП, 8 ГБ оперативной памяти и 30 одновременными пользователями Odoo.
-
30 users / 6 = **5**(5 — теоретическое количество необходимых работников) -
(4 * 2) + 1 = **9**(9 — теоретически максимальное количество рабочих)
На основании вышеприведенного расчета мы можем использовать 5 воркеров + 1 воркер для cron-воркера, что в сумме дает 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 .
Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.
ubuntu odoo postgresql python pip nginx proxy ssl Не используете Ubuntu 18.04?
Выберите другую ОС: центос 7 убунту 16.04
Связанные руководства