Установка Odoo · 20 min read · Nov 17, 2025
Как установить Odoo 17 ERP на Rocky Linux 9

Odoo (ранее известный как OpenERP) — это самоуправляемый пакет из более чем 10 000 приложений с открытым исходным кодом для различных бизнес-потребностей, включая CRM, электронную коммерцию, бухгалтерский учет, управление запасами, управление проектами и точки продаж. Эти приложения полностью интегрированы и доступны через знакомый веб-интерфейс.
Этот учебник научит нас устанавливать Odoo 16 Stack на сервер Rocky Linux 9.
Предварительные условия
- Сервер Rocky Linux 9 с минимум 2 ГБ ОЗУ для размещения Odoo Stack.
- Второй сервер Rocky Linux 9 с минимум 2 ГБ ОЗУ для размещения базы данных PostgreSQL. Тем не менее, вы можете установить базу данных на том же сервере, что и Odoo, но для производственных сред настоятельно рекомендуется установить ее на отдельном сервере. Вы также можете выбрать любой из доступных управляемых вариантов баз данных от любого провайдера на ваш выбор.
- Требования к ОЗУ будут зависеть от количества одновременно работающих пользователей, использующих стек. Подробное руководство о том, как рассчитать системные требования, можно найти в документации Odoo.
- Держите ваши системы обновленными.
$ sudo dnf update - Непривилегированный пользователь с правами sudo на обоих серверах.
- Fail2Ban должен быть установлен. Этот шаг является необязательным. Вы можете следовать нашему руководству по установке Fail2Ban на Rocky Linux для этого.
- SELinux должен быть отключен.
- Несколько пакетов, которые нужны вашим системам.
$ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -yНекоторые из этих пакетов могут уже быть установлены на вашей системе.
Шаг 1 - Настройка правил брандмауэра
Первый шаг — настроить брандмауэр. Rocky Linux использует брандмауэр Firewalld. Для этого учебника мы предположим, что у вас установлен брандмауэр Firewalld на обоих серверах.
Проверьте статус брандмауэра.
$ sudo firewall-cmd --state
running
Брандмауэр работает с различными зонами, и публичная зона является той, которую мы будем использовать по умолчанию. Перечислите все службы и порты, активные на брандмауэре.
$ sudo firewall-cmd --zone=public --list-all
Он должен показать следующий вывод.
public
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
На сервере Odoo нам нужно открыть порты 22, 80, 443, 6010, 5432 и 8069. 22 используется для SSH, 80 — для HTTP, 443 — для HTTPS, 6010 используется для связи Odoo, 5432 используется PostgreSQL, а 8069 используется для приложения сервера Odoo.
Выполните следующие команды, чтобы открыть необходимые порты на сервере Odoo.
$ sudo firewall-cmd --zone=public --add-port={6010,5432,8069,8072}/tcp
$ sudo firewall-cmd --zone=public --add-service=http
$ sudo firewall-cmd --zone=public --add-service=https
Проверьте статус брандмауэра.
$ sudo firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client http https ssh
ports: 6010/tcp 5432/tcp 8069/tcp 8072/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
На сервере PostgreSQL нам нужно открыть порты 22, 6010 и 5432. Откройте их, используя следующие команды.
$ sudo firewall-cmd --zone=public --add-port={6010,5432}/tcp
Сделайте все изменения постоянными и перезагрузите брандмауэр, чтобы применить изменения.
$ sudo firewall-cmd --runtime-to-permanent
$ sudo firewall-cmd --reload
Шаг 2 - Назначение имен хостов
Вы можете использовать либо IP-адреса серверов, либо их полные доменные имена (FQDN), если они доступны. Для нашего учебника мы будем использовать FQDN и для этого нам нужно установить имена хостов на обоих серверах.
Установите имя хоста на сервере Odoo, используя следующую команду.
$ sudo hostnamectl set-hostname odoo.yourdomain.com
Установите имя хоста на сервере PostgreSQL, используя следующую команду.
$ sudo hostnamectl set-hostname postgresql.yourdomain.com
На сервере Odoo откройте файл /etc/hosts.
$ sudo nano /etc/hosts
Убедитесь, что он выглядит следующим образом.
127.0.0.1 localhost
127.0.0.1 odoo.yourdomain.com odoo
10.1.1.10 postgresql.yourdomain.com postgresql
На сервере PostgreSQL откройте файл и убедитесь, что он выглядит следующим образом.
127.0.0.1 localhost
127.0.0.1 postgresql.yourdomain.com postgresql
10.1.2.10 odoo.yourdomain.com odoo
Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл.
Шаг 3 - Установка и настройка PostgreSQL
Rocky Linux 9 по умолчанию поставляется с PostgreSQL 13 и PostgreSQL 15 как модульный поток postgresql:15. Тем не менее, мы установим последнюю версию, доступную на момент написания этого учебника, PostgreSQL 16 из его официального репозитория.
Установите RPM репозиторий PostgreSQL.
$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Отключите встроенный модуль PostgreSQL.
$ sudo dnf -qy module disable postgresql
Установите PostgreSQL 16.
$ sudo dnf install -y postgresql16-server postgresql16-contrib
Инициализируйте базу данных.
$ sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
Включите и запустите службу PostgreSQL.
$ sudo systemctl enable postgresql-16
$ sudo systemctl start postgresql-16
Проверьте статус службы.
$ sudo systemctl status postgresql-16
Вы должны получить аналогичный вывод.
? postgresql-16.service - PostgreSQL 16 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-16.service; enabled; preset: disabled)
Active: active (running) since Sun 2024-04-07 02:22:42 UTC; 3s ago
Docs: https://www.postgresql.org/docs/16/static/
Process: 8673 ExecStartPre=/usr/pgsql-16/bin/postgresql-16-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 8678 (postgres)
Tasks: 7 (limit: 10819)
Memory: 17.4M
CPU: 60ms
CGroup: /system.slice/postgresql-16.service
??8678 /usr/pgsql-16/bin/postgres -D /var/lib/pgsql/16/data/
??8679 "postgres: logger "
??8680 "postgres: checkpointer "
??8681 "postgres: background writer "
??8683 "postgres: walwriter "
??8684 "postgres: autovacuum launcher "
??8685 "postgres: logical replication launcher "
Apr 07 02:22:42 postgresql systemd[1]: Starting PostgreSQL 16 database server...
Apr 07 02:22:42 postgresql postgres[8678]: 2024-04-07 02:22:42.370 UTC [8678] LOG: redirecting log output to logging collector process
Apr 07 02:22:42 postgresql postgres[8678]: 2024-04-07 02:22:42.370 UTC [8678] HINT: Future log output will appear in directory "log".
Apr 07 02:22:42 postgresql systemd[1]: Started PostgreSQL 16 database server.
Далее нам нужно создать пользователя базы данных odoo. Вам будет предложено ввести пароль для роли. Введите надежный пароль на ваш выбор.
$ sudo -u postgres createuser odoo -U postgres -dP
Опция -u выполняет команду от имени пользователя postgres.
Опция -U указывает имя пользователя для подключения.
Опция -d предоставляет пользователю разрешение на создание баз данных.
Опция -p запрашивает пароль нового пользователя.
Настройка аутентификации на основе хоста
Нам нужно предоставить разрешение службе PostgreSQL на подключение к серверу Odoo.
Сначала остановите службу PostgreSQL.
$ sudo systemctl stop postgresql-16
Чтобы узнать, где PostgreSQL хранит файл клиентской аутентификации, выполните следующую команду, чтобы запустить оболочку PostgreSQL.
$ sudo -u postgres psql
Выполните следующий запрос, чтобы найти местоположение файла.
postgres=# SHOW hba_file;
Вы получите следующий вывод.
hba_file
------------------------------------
/var/lib/pgsql/16/data/pg_hba.conf
(1 row)
Введите exit, чтобы выйти из оболочки.
Откройте файл /var/lib/pgsql/16/data/pg_hba.conf для редактирования.
$ sudo nano /var/lib/pgsql/16/data/pg_hba.conf
Вставьте следующую строку в конец.
host all odoo odoo.yourdomain.com scram-sha-256
Эта строка предоставляет разрешение пользователю odoo подключаться ко всем базам данных на этом сервере. Вы также можете указать имена баз данных вместо использования ключевого слова all.
Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл.
Настройка адреса прослушивания PostgreSQL
Далее нам нужно разрешить серверу базы данных прослушивать удаленные подключения.
Запустите оболочку PostgreSQL и выполните следующую команду, чтобы найти файл конфигурации PostgreSQL.
$ sudo -u postgres psql
postgres=# SHOW config_file;
Вы получите следующий вывод.
config_file
----------------------------------------
/var/lib/pgsql/16/data/postgresql.conf
(1 row)
Введите exit, чтобы выйти из оболочки.
Откройте файл /var/lib/pgsql/16/data/postgresql.conf для редактирования.
$ sudo nano /var/lib/pgsql/16/data/postgresql.conf
Измените строку listen_addresses с
#listen_addresses = 'localhost' # what IP address(es) to listen on;
на.
listen_addresses = '*'
* означает, что он будет прослушивать все IP-адреса. Вы можете изменить его на IP-адрес вашего экземпляра odoo.
listen_addresses = 'localhost, '
Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл.
Включите и запустите службу PostgreSQL
Поскольку наша конфигурация завершена, пора запустить службу PostgreSQL.
$ sudo systemctl start postgresql-16
Шаг 4 - Установка Odoo
Установка Python 3.10
Rocky Linux 9 поставляется с Python 3.9, в то время как Odoo 17 требует Python 3.10 и выше. Поэтому сначала нам нужно установить его.
Вы можете сначала проверить доступную версию.
$ python --version
Python 3.9.18
Установите необходимые зависимости для Python.
$ sudo dnf groupinstall "Development Tools"
$ sudo dnf install readline-devel ncurses-devel openssl-devel sqlite-devel tk-devel gdbm-devel libc6-dev libbz2-dev libffi-dev zlib1g-dev
$ sudo dnf install -y openssl-devel bzip2-devel libffi-devel readline-devel ncurses-devel sqlite-devel tk-devel
Скачайте исходный код с сайта Python. На момент написания этого учебника последняя доступная версия 3.10.x — это 3.10.14, которую мы использовали.
$ wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz
Извлеките архив.
$ tar xzf Python-3.10.14.tgz
Перейдите в извлеченный каталог.
$ cd Python-3.10.14
Настройте исходный код.
$ ./configure --enable-optimizations
Установите Python 3.10.14. Команда altininstall используется, чтобы не перезаписывать версию Python в системе.
$ sudo make altinstall
Подтвердите установку.
$ python3.10 -V
ИЛИ
$ python3.10 --version
Вы должны получить следующий вывод.
Python 3.10.14
Далее нам нужно установить Python 3.10 как версию Python по умолчанию. Создайте символические ссылки для каждой версии Python, установленной на вашем сервере. При создании символической версии вы должны указать точную версию Python в ваших командах. Выполните следующие команды, чтобы создать символические ссылки.
$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.10 1
$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2
Чтобы просмотреть доступные версии Python, используйте следующую команду.
$ sudo update-alternatives --config python3
Вы должны увидеть следующий вывод.
There are 2 programs which provide 'python3'.
Selection Command
-----------------------------------------------
1 /usr/local/bin/python3.10
*+ 2 /usr/bin/python3.9
Enter to keep the current selection[+], or type selection number:
Выберите номер 1, чтобы переключиться на Python 3.10.
Выйдите и войдите обратно в терминал, чтобы переключиться на версию Python. Теперь вы можете использовать Python 3.10.14, используя python напрямую.
Установка зависимостей и подготовка к установке
Создайте нового системного пользователя для управления процессами Odoo на сервере Odoo с домашним каталогом /opt/odoo. Это необходимо, чтобы избежать любых рисков безопасности, запуская его от имени пользователя root.
$ sudo useradd -m -d /opt/odoo -U -r -s /bin/bash odoo
Установите системные зависимости, необходимые для настройки Odoo 17.
$ sudo dnf install -y git libxslt-devel bzip2-devel openldap-devel libjpeg-devel freetype-devel libpq-devel
Установите Nodejs. Rocky Linux 9 поставляется с Node 18.x, который является текущей LTS-версией Nodejs. Тем не менее, мы будем использовать официальный репозиторий Nodesource для этого.
Добавьте репозиторий Node 20.
$ curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
Установите Nodejs.
$ sudo dnf -y install nodejs
Подтвердите версию Node.
$ node --version
v20.12.1
Установите пакет Less CSS с помощью Node. Если вы используете язык с интерфейсом справа налево, установите также пакет rtlcss.
$ sudo npm install -g less rtlcss
Установите wkhtmltopdf. Мы будем использовать RPM-пакет из репозитория упаковки Wkhtmltopdf на GitHub. Последняя версия, доступная на момент написания этого учебника, — это 0.12.6.1 r3.
Скачайте RPM Wkhtmltopdf.
$ cd ~
$ wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox-0.12.6.1-3.almalinux9.x86_64.rpm
Установите шрифты, необходимые для Wkhtmltopdf.
$ sudo dnf install xorg-x11-fonts-75dpi.noarch xorg-x11-fonts-Type1.noarch
Установите Wkhtmltopdf.
$ sudo rpm -i wkhtmltox-0.12.6.1-3.almalinux9.x86_64.rpm
Проверьте версию установленного wkhtmltopdf.
$ wkhtmltopdf --version
wkhtmltopdf 0.12.6.1 (with patched qt)
Скачивание файлов Odoo
Переключитесь на системного пользователя Odoo.
$ sudo su - odoo
Клонируйте репозиторий Odoo с GitHub на вашу систему.
$ git clone https://github.com/odoo/odoo.git --depth 1 --branch 17.0 --single-branch
Для нашей цели мы копируем Odoo в каталог /opt/odoo, откуда он будет установлен. Это создаст каталог /opt/odoo/odoo, который мы будем использовать для установки.
Настройка виртуальной среды Python
Этот шаг является необязательным, но рекомендуется, так как виртуальная среда Python для Odoo поможет избежать конфликтов с модулями Python операционной системы, особенно при выполнении обновлений ОС.
Для этого мы будем использовать virtualenv.
- Создайте новую среду
virtualenvдля Odoo.$ python3 -m venv odoo-env - Активируйте виртуальную среду. Мы создаем среду в домашнем каталоге системного пользователя. Вы можете выбрать любое место, которое вам нравится.
$ source odoo-env/bin/activate - Обновите PIP на всякий случай.
(odoo-env) $ pip3 install --upgrade pip - Установите колесо Python в виртуальной среде.
$ pip3 install wheel
Установка зависимостей Python
Установите зависимости Python, необходимые для Odoo 17.
$ pip3 install -r /opt/odoo/odoo/requirements.txt
Требования потребуют некоторое время для установки, так что будьте терпеливы.
Проверьте, установлены ли требования правильно, проверив список установленных модулей Python.
$ pip3 list
Package Version
----------------- --------
attrs 23.2.0
Babel 2.9.1
beautifulsoup4 4.12.3
cached-property 1.5.2
certifi 2024.2.2
cffi 1.16.0
chardet 4.0.0
cryptography 3.4.8
decorator 4.4.2
docopt 0.6.2
docutils 0.17
ebaysdk 2.1.5
freezegun 1.1.0
geoip2 2.9.0
gevent 21.8.0
greenlet 1.1.2
idna 2.10
isodate 0.6.1
Jinja2 3.0.3
libsass 0.20.1
lxml 4.8.0
MarkupSafe 2.0.1
maxminddb 2.6.0
num2words 0.5.10
ofxparse 0.21
passlib 1.7.4
Pillow 9.0.1
pip 24.0
platformdirs 4.2.0
polib 1.1.1
psutil 5.9.0
psycopg2 2.9.2
pyasn1 0.6.0
pyasn1_modules 0.4.0
pycparser 2.22
pydot 1.4.2
pyOpenSSL 21.0.0
pyparsing 3.1.2
PyPDF2 1.26.0
pyserial 3.5
python-dateutil 2.8.1
python-ldap 3.4.0
python-stdnum 1.17
pytz 2024.1
pyusb 1.2.1
qrcode 7.3.1
reportlab 3.6.8
requests 2.25.1
requests-file 2.0.0
requests-toolbelt 1.0.0
rjsmin 1.1.0
setuptools 65.5.0
six 1.16.0
soupsieve 2.5
urllib3 1.26.5
vobject 0.9.6.1
Werkzeug 2.0.2
wheel 0.43.0
xlrd 1.2.0
XlsxWriter 3.0.2
xlwt 1.3.0
zeep 4.1.0
zope.event 5.0
zope.interface 6.2
Выйдите из виртуальной среды Python.
$ deactivate
Создание каталога для сторонних дополнений
$ mkdir /opt/odoo/odoo/custom-addons
Этот каталог должен быть добавлен в параметр addons_path, который определяет каталоги, в которых Odoo ищет модули. Выйдите из системного пользователя Odoo.
$ exit
Шаг 5 - Настройка Odoo
Скопируйте файл конфигурации Odoo по умолчанию, чтобы создать новый.
$ sudo cp /opt/odoo/odoo/debian/odoo.conf /etc/odoo.conf
Откройте файл для редактирования.
$ sudo nano /etc/odoo.conf
Отредактируйте файл так, чтобы он выглядел следующим образом.
[options]
; Это пароль, который позволяет выполнять операции с базой данных:
admin_passwd = admin
db_host = postgresql.yourdomain.com
db_port = False
db_user = odoo
db_password = odoo_password
addons_path = /opt/odoo/odoo/addons, /opt/odoo/odoo/custom-addons
xmlrpc_port = 8069
default_productivity_apps = True
Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл.
Опция admin_passwd — это пароль, который позволяет выполнять административные операции в интерфейсе Odoo. Убедитесь, что вы выбрали надежный пароль.
Опция db_host — это FQDN или IP-адрес сервера PostgreSQL.
Опция db_port установлена в false, так как используется порт PostgreSQL по умолчанию 5432. Если вы хотите использовать другой порт, вам нужно будет обновить это значение.
Опция db_user — это имя пользователя PostgreSQL.
Опция db_password — это пароль пользователя PostgreSQL ‘odoo’, который мы создали ранее на сервере PostgreSQL.
Опция addons_path — это путь по умолчанию для дополнений. Вы также можете добавить пользовательский путь для дополнений, разделяя их запятыми.
Опция xmlrpc_port — это порт, на котором Odoo слушает.
Опция default_productivity_apps гарантирует, что приложения для повышения производительности по умолчанию (а именно Сотрудники, Email-маркетинг, Проект и Опросы) остаются включенными. Эти четыре приложения являются стандартными в версии Odoo Community Edition. В версии Enterprise есть дополнительные приложения для повышения производительности, которые могут быть включены по умолчанию, такие как Записи, Знания, Планирование и Подпись.
Создание службы Odoo
Чтобы убедиться, что Odoo продолжает работать даже после перезагрузки системы, нам нужно создать для него службу.
Создайте файл /lib/systemd/system/odoo-server.service и откройте его для редактирования.
$ sudo nano /lib/systemd/system/odoo-server.service
Вставьте следующий код в него.
[Unit]
Description=Odoo Open Source ERP and CRM
Requires=postgresql-16.service
After=network.target postgresql-16.service
[Service]
Type=simple
SyslogIdentifier=odoo-server
User=odoo
Group=odoo
ExecStart=/opt/odoo/odoo-env/bin/python3 /opt/odoo/odoo/odoo-bin --config=/etc/odoo.conf --addons-path=/opt/odoo/odoo/addons/ --logfile /var/log/odoo/odoo-server.log
WorkingDirectory=/opt/odoo/odoo/
StandardOutput=journal+console
KillMode=mixed
[Install]
WantedBy=multi-user.target
Замените /home/ на место, которое вы выбрали для установки виртуальной среды Python.
Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл.
Создание каталога для логов Odoo
$ sudo mkdir /var/log/odoo
Установка прав на файлы
Установите права на файл odoo-server.service, чтобы только пользователи Odoo могли его читать или выполнять.
$ sudo chmod 755 /lib/systemd/system/odoo-server.service
$ sudo chown odoo: /lib/systemd/system/odoo-server.service
Установите права собственности на среду Python, установку Odoo и каталог логов.
$ sudo chown -R odoo: /opt/odoo/
$ sudo chown -R odoo: /opt/odoo/odoo-env
$ sudo chown -R odoo: /var/log/odoo
Ограничьте доступ к файлу конфигурации Odoo.
$ sudo chown odoo: /etc/odoo.conf
$ sudo chmod 640 /etc/odoo.conf
Запуск сервера Odoo
Запустите и включите сервер Odoo.
$ sudo systemctl start odoo-server
$ sudo systemctl enable odoo-server
Проверьте статус сервера.
$ sudo systemctl status odoo-server
? odoo-server.service - Odoo Open Source ERP and CRM
Loaded: loaded (/usr/lib/systemd/system/odoo-server.service; enabled; preset: disabled)
Active: active (running) since Tue 2024-04-09 23:59:38 UTC; 1s ago
Main PID: 102598 (python3)
Tasks: 4 (limit: 10736)
Memory: 69.6M
CPU: 895ms
CGroup: /system.slice/odoo-server.service
??102598 /opt/odoo/odoo-env/bin/python3 /opt/odoo/odoo/odoo-bin --config=/etc/odoo.conf --addons-path=/opt/odoo/odoo/addons/ --logfile /var/log/odoo/odoo-server.log
Apr 09 23:59:38 odoo.yourdomain.com systemd[1]: Started Odoo Open Source ERP and CRM.
Шаг 6 - Установка и настройка Nginx
Rocky Linux 9 поставляется со старой версией Nginx. Вам нужно использовать официальный репозиторий Nginx, чтобы установить последнюю версию.
Создайте и откройте файл /etc/yum.repos.d/nginx.repo для редактирования.
$ sudo nano /etc/yum.repos.d/nginx.repo
Вставьте следующий код в него.
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
После завершения сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено. Мы будем использовать основную версию Nginx, и поэтому включили основное репозиторий в приведенном выше файле, установив enabled=1 в разделе mainline вместо стабильного. Вы можете выбрать любой из них.
Установите Nginx.
$ sudo dnf install -y nginx
Проверьте установку.
$ nginx -v
nginx version: nginx/1.25.4
Включите и запустите службу сервера Nginx.
$ sudo systemctl enable nginx --now
Проверьте статус службы.
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
Active: active (running) since Wed 2024-04-10 06:52:14 UTC; 3s ago
Docs: http://nginx.org/en/docs/
Process: 103452 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 103453 (nginx)
Tasks: 3 (limit: 10736)
Memory: 3.1M
CPU: 17ms
CGroup: /system.slice/nginx.service
??103453 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
??103454 "nginx: worker process"
??103455 "nginx: worker process"
Шаг 7 - Установка SSL
Нам нужно установить Certbot, чтобы сгенерировать бесплатные SSL-сертификаты, предлагаемые Let’s Encrypt. Мы будем использовать установщик пакетов Snapd для этого. Он требует репозиторий EPEL (Дополнительные пакеты для Enterprise Linux) для работы.
Установите репозиторий EPEL.
$ sudo dnf install -y epel-release
Rocky Linux 9 не поставляется с установленным Snapd. Установите пакет Snapd.
$ sudo dnf install -y snapd
Включите и запустите службу Snap.
$ sudo systemctl enable snapd --now
Установите основной пакет Snap и убедитесь, что ваша версия Snapd обновлена.
$ sudo snap install core
$ sudo snap refresh core
Создайте необходимые ссылки для работы Snapd.
$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
Установите Certbot.
$ sudo snap install --classic certbot
Используйте следующую команду, чтобы убедиться, что команда Certbot может быть выполнена, создав символическую ссылку на директорию /usr/bin.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Проверьте, работает ли Certbot правильно.
$ certbot --version
certbot 2.10.0
Сгенерируйте сертификат. Нам также нужно создать сертификат DHParams.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d odoo.yourdomain.com
Сгенерируйте сертификат для обмена ключами Диффи-Хеллмана.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Проверьте службу планировщика обновления Certbot.
$ sudo systemctl list-timers
Вы найдете snap.certbot.renew.service как одну из запланированных служб.
NEXT LEFT LAST PASSED UNIT ACTIVATES
.... .... .... ...... .... ..........
Wed 2024-04-10 13:32:11 UTC 1h 42min left Wed 2024-04-10 11:43:41 UTC 5min ago dnf-makecache.timer dnf-makecache.service
Wed 2024-04-10 19:08:00 UTC 7h left - - snap.certbot.renew.timer snap.certbot.renew.service
Thu 2024-04-11 00:00:00 UTC 12h left Wed 2024-04-10 00:00:36 UTC 11h ago logrotate.timer logrotate.service
Выполните пробный запуск процесса, чтобы проверить, работает ли обновление SSL правильно.
$ sudo certbot renew --dry-run
Если вы не видите ошибок, вы готовы. Ваш сертификат будет автоматически обновляться.
Шаг 8 - Настройка Nginx
Чтобы запустить его через Nginx, нам нужно запустить Odoo на localhost. Чтобы изменить это, остановите службу Odoo.
$ sudo systemctl stop odoo-server
Откройте файл конфигурации сервера Odoo.
$ sudo nano /etc/odoo.conf
Добавьте следующие строки в него.
xmlrpc_interface = 127.0.0.1
proxy_mode = True
Создайте файл конфигурации Nginx для Odoo.
$ sudo nano /etc/nginx/conf.d/odoo.conf
Вставьте приведенный ниже код.
#odoo server
upstream odoo {
server 127.0.0.1:8069;
}
upstream odoochat {
server 127.0.0.1:8072;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
map $sent_http_content_type $content_type_csp {
default "";
~image/ "default-src 'none'";
}
# http -> https
server {
listen 80;
listen [::]:80;
server_name odoo.yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
http3 on;
quic_retry on;
server_name odoo.yourdomain.com;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
# Add Headers for odoo proxy mode
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/odoo.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/odoo.yourdomain.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/odoo.yourdomain.com/chain.pem;
ssl_session_timeout 30m;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
ssl_prefer_server_ciphers off;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
# log
access_log /var/log/nginx/odoo.access.log;
error_log /var/log/nginx/odoo.error.log;
# Redirect longpoll requests to odoo longpolling port
location /longpolling {
proxy_pass http://odoochat;
}
location /websocket {
proxy_pass http://odoochat;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-Host $http_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;
proxy_cookie_flags session_id samesite=lax secure; # requires nginx 1.19.8
}
# Redirect requests to odoo backend server
location / {
# Add Headers for odoo proxy mode
proxy_set_header X-Forwarded-Host $http_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;
proxy_redirect off;
proxy_pass http://odoo;
proxy_cookie_flags session_id samesite=lax secure; # requires nginx 1.19.8
}
# common gzip
gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
gzip on;
# Serve static files right away
location ~ ^/[^/]+/static/.+$ {
# root and try_files both depend on your addons paths
root /opt/odoo/odoo;
try_files /opt/odoo/odoo/addons$uri @odoo;
expires 24h;
add_header Content-Security-Policy $content_type_csp;
}
}
Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл.
Откройте файл /etc/nginx/nginx.conf для редактирования.
$ sudo nano /etc/nginx/nginx.conf
Добавьте следующую строку перед строкой include /etc/nginx/conf.d/*.conf;.
server_names_hash_bucket_size 64;
Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.
Проверьте конфигурацию Nginx.
$ sudo nginx -t
Если вы не видите ошибок, значит, вы готовы. Перезапустите сервер Nginx.
$ sudo systemctl restart nginx
Шаг 9 - Запуск Odoo
Мы можем снова запустить сервер Odoo после того, как все настроено.
$ sudo systemctl start odoo-server
Запустите Odoo в вашем браузере по адресу https://odoo.yourdomain.com. В вашем браузере откройте URL http:// или http://odoo.yourdomain.com:8069. Вы должны увидеть экран создания базы данных Odoo, если все работает правильно.

Выберите свой адрес электронной почты и пароль, чтобы создать свои учетные данные для входа. Мастер-пароль — это admin_passwd, который вы добавили в файл /etc/odoo.conf. Заполните все оставшиеся поля.
Проверьте поле Demo Data, чтобы заполнить базу данных образцами данных. Не устанавливайте демонстрационные данные на серверах, доступных из интернета. Базы данных с демонстрационными данными содержат стандартные логины и пароли, которые могут быть использованы для доступа к вашим системам и причинения значительных проблем, даже на системах тестирования/разработки. Мы используем это только в учебных целях.
Нажмите кнопку Создать базу данных, чтобы продолжить завершение установки. В первый раз, когда вы создаете базу данных, страница дополнений будет загружаться некоторое время, поэтому не обновляйте страницу. Вы будете автоматически перенаправлены на следующую страницу входа, как только база данных будет создана.

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

Теперь вы можете начать использовать Odoo для управления своим бизнесом.
Шаг 10 - Обновление Odoo
Остановите сервер Odoo.
$ sudo systemctl stop odoo-server
Переключитесь на системного пользователя Odoo.
$ sudo su - odoo
Получите последний исходный код из GitHub.
$ git fetch
$ git rebase --autostash
Вторая команда может столкнуться с конфликтами исходного кода, если вы вручную измените исходный код. Вам будет представлен список конфликтующих файлов. Вам нужно будет вручную изменить все файлы и повторно запустить команду, чтобы исправить проблемы.
Если вы хотите отменить конфликтующие изменения, вы можете выполнить следующую команду, чтобы сбросить исходный код.
$ git reset --hard
Активируйте виртуальную среду Python.
$ source odoo-env/bin/activate
Установите зависимости Python.
$ pip3 install -r /opt/odoo/odoo/requirements.txt
Выйдите из виртуальной среды Python.
$ deactivate
Запустите сервер Odoo.
$ sudo systemctl start odoo-server
Шаг 11 - Защита Odoo с помощью Fail2Ban
Этот шаг является необязательным, но если у вас установлен Fail2Ban, вы можете добавить конфигурацию для Odoo, чтобы защитить его.
Создайте и откройте файл odoo-login.conf для редактирования.
$ sudo nano /etc/fail2ban/jail.d/odoo-login.conf
Вставьте следующий код в него.
[odoo-login]
enabled = true
port = http,https
bantime = 900 ; 15 min ban
maxretry = 10 ; if 10 attempts
findtime = 60 ; within 1 min /!\ Should be adjusted with the TZ offset
logpath = /var/log/odoo.log ; set the actual odoo log path here
Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл.
Создайте и откройте файл фильтра odoo-login.conf для редактирования.
$ sudo nano /etc/fail2ban/filter.d/odoo-login.conf
Вставьте следующий код в него.
[Definition]
failregex = ^ \d+ INFO \S+ \S+ Login failed for db:\S+ login:\S+ from
ignoreregex =
Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл.
Перезапустите Fail2Ban.
$ sudo systemctl restart fail2ban
Заключение
Это завершает наш учебник по установке и настройке Odoo на сервере Rocky Linux 9. Если у вас есть какие-либо вопросы, оставляйте их в комментариях ниже.
Get new posts in your inbox
No spam. Unsubscribe anytime.