Установим две копии Odoo с разными системными пользователями, разными PostgreSQL-пользователями, разными базами данных, на разных xml-портах.
В качестве frontend-сервера установим Nginx, который будет проксировать запросы на Odoo-приложения.
1.Установка всех необходимых зависимостей/пакетов
1 |
# apt-get install subversion git bzr bzrtools python-pip postgresql postgresql-server-dev-9.3 python-all-dev python-dev python-setuptools libxml2-dev libxslt1-dev libevent-dev libsasl2-dev libldap2-dev pkg-config libtiff5-dev libjpeg8-dev libjpeg-dev zlib1g-dev libfreetype6-dev liblcms2-dev liblcms2-utils libwebp-dev tcl8.6-dev tk8.6-dev python-tk libyaml-dev fontconfig |
2.Добавление системного пользовател(odoo) и создание необходимых каталогов
1 |
# adduser --system --home=/opt/odoo --group odoo |
Создание каталога для хранения лог-файлов Odoo
1 |
# mkdir /var/log/odoo |
Создание каталога для установки в него Odoo-приложения
1 |
# mkdir /opt/odoo/odoo8 && cd /opt/odoo/odoo8 |
3.Загрузка Odoo с git-репозитария
1 |
# git clone https://www.github.com/odoo/odoo --depth 1 --branch 8.0 --single-branch . |
Можно склонировать любую доступную версию (например, 9 вместо 8)
В 10-й версии есть отличия от 8-й версии, которые будут указаны в конце статьи
4.Создание PostgreSQL-пользователя(odoo)
1 |
# su -l postgres |
1 |
postgres# createuser odoo -U postgres –dRSP |
1 |
postgres# \q |
База данных будет создана вручную через WEB-интерфейс при первом заходе на WEB-интерфейс
5.Установка Python-зависимстей средствами pip-менеджера
1 |
# pip install -r /opt/odoo/ odoo8.doc/requirements.txt |
1 |
# pip install -r /opt/odoo/odoo8/requirements.txt |
6.Установка less CSS с помощью nodejs и npm
Загрузка nodejs установочного скрипта
1 |
# wget -qO- https://deb.nodesource.com/setup | bash - |
Сейчас наш репозитарий обновлен и устанавливаем nodejs через пакетный менеджер apt-get
1 |
# apt-get install nodejs |
Устанавливаем less CSS с помощью npm
1 |
# npm install -g less less-plugin-clean-css |
Установка Wkhtmltopdf версии рекомендованный для Odoo (0.12.1)
1 |
# cd /tmp/ |
1 |
# wget http://download.gna.org/wkhtmltopdf/0.12/0.12.1/wkhtmltox-0.12.1_linux-trusty-amd64.deb |
1 |
# dpkg -i wkhtmltox-0.12.1_linux-trusty-amd64.deb |
Копирование бинарников в корректное местоположение
1 |
# cp /usr/local/bin/wkhtmltopdf /usr/bin/ |
1 |
# cp /usr/local/bin/wkhtmltoimage /usr/bin/ |
7.Настройка Odoo-сервера
Для Odoo-8( версия 8)
1 |
# cp /opt/odoo/odoo8/debian/openerp-server.conf /opt/odoo/odoo8/ |
1 |
# nano /opt/odoo/odoo8/openerp-server.conf |
1 2 3 4 5 6 7 8 9 10 |
[options] ; This is the password that allows database operations: admin_passwd = adminpassword db_host = False db_port = False db_user = odoo db_password = odoodbpassword addons_path = /opt/odoo/odoo8/addons logfile = /var/log/odoo/odoo-server.log xmlrpc_port = 2016 |
8.Создание загрузочного скрипта odoo
Для Odoo-8( версия 8)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# nano /etc/init.d/odoo2016-server #!/bin/sh ### BEGIN INIT INFO # Provides: odoo-server # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Should-Start: $network # Should-Stop: $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Odoo ERP # Description: Odoo is a complete ERP business solution. ### END INIT INFO PATH=/bin:/sbin:/usr/bin # Change the Odoo source files location according your needs. DAEMON=/opt/odoo/odoo8/openerp-server # Use the name convention of your choice NAME=odoo2016-server DESC=odoo2016-server # Specify the user name (Default: odoo). USER=odoo # Specify an alternate config file (Default: /etc/odoo-server.conf). CONFIGFILE="/opt/odoo/odoo8/openerp-server.conf" # pidfile PIDFILE=/var/run/$NAME.pid # Additional options that are passed to the Daemon. DAEMON_OPTS="-c $CONFIGFILE" [ -x $DAEMON ] || exit 0 [ -f $CONFIGFILE ] || exit 0 checkpid() { [ -f $PIDFILE ] || return 1 pid=`cat $PIDFILE` [ -d /proc/$pid ] && return 0 return 1 } case "${1}" in start) echo -n "Starting ${DESC}: " start-stop-daemon --start --quiet --pidfile ${PIDFILE} \ --chuid ${USER} --background --make-pidfile \ --exec ${DAEMON} -- ${DAEMON_OPTS} echo "${NAME}." ;; stop) echo -n "Stopping ${DESC}: " start-stop-daemon --stop --quiet --pidfile ${PIDFILE} \ --oknodo echo "${NAME}." ;; restart|force-reload) echo -n "Restarting ${DESC}: " start-stop-daemon --stop --quiet --pidfile ${PIDFILE} \ --oknodo sleep 1 start-stop-daemon --start --quiet --pidfile ${PIDFILE} \ --chuid ${USER} --background --make-pidfile \ --exec ${DAEMON} -- ${DAEMON_OPTS} echo "${NAME}." ;; *) N=/etc/init.d/${NAME} echo "Usage: ${NAME} {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0 |
9.Установка корректных прав и владельца/группы
Устанавливаем корректный права и владельца на загрузочный скрипт
1 |
# chmod 755 /etc/init.d/odoo2016-server |
1 |
# chown root /etc/init.d/odoo2016-server |
Устанавливаем владельца/группу на каталог с Odoo
1 |
# chown -R odoo:odoo /opt/odoo/odoo8 |
1 |
# chown odoo:odoo /var/log/odoo |
Устанавливаем корректные права на конфигурационный файл Odoo
1 |
# chmod 640 /opt/odoo/odoo8/openerp-server.conf |
Запускаем Odoo и добавляем его в автозагрузку
1 |
# /etc/init.d/odoo2016-server start |
1 |
# update-rc.d odoo2016-server defaults |
1 |
Starting odoo2016-server: odoo2016-server. |
1 |
# tail -f /var/log/odoo/odoo-server.log |
1 2 3 4 5 6 |
2016-08-19 21:25:52,366 6169 INFO ? openerp: OpenERP version 8.0 2016-08-19 21:25:52,367 6169 INFO ? openerp: addons paths: ['/opt/odoo/.local/share/Odoo/addons/8.0', u'/opt/odoo/odoo8/addons', '/opt/odoo/odoo8/openerp/addons'] 2016-08-19 21:25:52,367 6169 INFO ? openerp: database hostname: localhost 2016-08-19 21:25:52,367 6169 INFO ? openerp: database port: 5432 2016-08-19 21:25:52,367 6169 INFO ? openerp: database user: odoo 2016-08-19 21:25:52,549 6169 INFO ? openerp.service.server: HTTP service (werkzeug) running on 0.0.0.0:2016 |
Заходим на WEB-интерфейс
1 |
http://<IP_adress_serever>:2016 |
и создаем базу данных, например, с именем odoo2016
10.Запуск второй копии Odoo
Для создания другой копии Odoo-сервера используем нового системного пользователя(odoo2), нового PostgreSQL-пользователя(odoo2) и базу данных(odoo2018), новый xml порт(2018), новый каталог для хранения лог-файлов(/var/log/odoo2)
1 |
# adduser --system --home=/opt/odoo2 --group odoo2 |
1 |
# mkdir /var/log/odoo2 |
1 |
# mkdir /opt/odoo2/odoo8 && cd /opt/odoo2/odoo8 |
1 |
# git clone https://www.github.com/odoo/odoo --depth 1 --branch 8.0 --single-branch . |
Создание PostgreSQL-пользователя(odoo2)
1 |
# su -l postgres |
1 |
postgres# createuser odoo2 -U postgres -dRSP |
1 |
postgres# \q |
Настройка конфигурационного файла второй копии Odoo
1 |
# cp /opt/odoo2/odoo8/debian/openerp-server.conf /opt/odoo2/odoo8/openerp-server.conf |
1 |
# nano /opt/odoo2/odoo8/openerp-server.conf |
1 2 3 4 5 6 7 8 9 10 |
[options] ; This is the password that allows database operations: admin_passwd = adminpassword2 db_host = False db_port = False db_user = odoo2 db_password = odoo2dbpassword addons_path = /opt/odoo2/odoo8/addons logfile = /var/log/odoo2/odoo-server.log xmlrpc_port = 2018 |
Загрузочный скрипт скопируем из уже созданного скрипта
1 |
# cp /etc/init.d/odoo2016-server /etc/init.d/odoo2018-server |
Изменим необходимые строки
1 |
# nano /etc/init.d/odoo2018-server |
1 2 3 4 5 |
DAEMON=/opt/odoo2/odoo8/openerp-server NAME=odoo2018-server DESC=odoo2018-server USER=odoo2 CONFIGFILE="/opt/odoo2/odoo8/openerp-server.conf" |
Устанавливаем корректный права и владельца/группу
1 |
# chmod 755 /etc/init.d/odoo2018-server |
1 |
# chown root /etc/init.d/odoo2018-server |
1 |
# chown -R odoo2:odoo2 /opt/odoo2/odoo8 |
1 |
# chown odoo2:odoo2 /var/log/odoo2 |
1 |
# chmod 640 /opt/odoo2/odoo8/openerp-server.conf |
Запуск второй копии Odoo и добавление в автозагрузку
1 |
# /etc/init.d/odoo2018-server |
1 |
# update-rc.d odoo2018-server defaults |
Заходим на WEB-интерфейс
1 |
http://<IP_adress_serever>:2018 |
и создаем базу данных,например, с именем odoo2018
Отличия Odoo-10 От Odoo-8
a) Конфигурационный файл Odoo версии 10 имееет имя odoo.conf вместо openerp-server.conf в версии 8
b) Python-скрипт запускающий Odoo версии 10 имееет имя odoo-bin вместо openerp-server в версии 8
Итого, последовательность команд для установки Odoo-10 (odoo2019-server) в качестве третьего Odoo-интсанса/копии под новым системным пользователем (odoo3), c отдельной базой данных (odoo2019),отдельным пользователем базы данных (odoo3),новый xml портом(2019), новым каталогом для хранения лог-файлов(/var/log/odoo3)
1 |
# adduser --system --home=/opt/odoo3 --group odoo3 |
1 |
# mkdir /var/log/odoo3 |
1 |
# mkdir /opt/odoo3/odoo10 && cd /opt/odoo3/odoo10 |
1 |
# git clone https://www.github.com/odoo/odoo --depth 1 --branch 10.0 --single-branch . |
1 |
# su -l postgres |
1 |
postgres# createuser odoo3 -U postgres -dRSP |
1 |
postgres# \q |
1 |
# pip install -r /opt/odoo3/odoo10/requirements.txt |
1 |
# cp /opt/odoo3/odoo10/debian/odoo.conf /opt/odoo3/odoo10/odoo.conf |
1 |
# nano /opt/odoo3/odoo10/odoo.conf |
1 2 3 4 5 6 7 8 9 |
admin_passwd = adminpassword db_host = False db_port = False db_user = odoo3 db_password = odoo3dbpassword ;addons_path = /usr/lib/python2.7/dist-packages/odoo/addons addons_path = /opt/odoo3/odoo10/addons logfile = /var/log/odoo3/odoo-server.log xmlrpc_port = 2019 |
1 |
# nano /etc/init.d/odoo2019-server |
1 2 3 4 5 6 7 |
PATH=/bin:/sbin:/usr/bin DAEMON=/opt/odoo3/odoo10/odoo-bin NAME=odoo2019-server DESC=odoo2019-server USER=odoo3 CONFIGFILE=" /opt/odoo3/odoo10/odoo.conf" ................... |
1 |
# chmod 755 /etc/init.d/odoo2019-server |
1 |
# chown root /etc/init.d/odoo2019-server |
1 |
# chown -R odoo3:odoo3 /opt/odoo3/odoo10 |
1 |
# chown odoo3:odoo3 /var/log/odoo3 |
1 |
# chmod 640 /opt/odoo3/odoo10/odoo.conf |
1 |
# /etc/init.d/odoo2019-server start |
1 |
# update-rc.d odoo2019-server defaults |
1 |
# tail -f /var/log/odoo/odoo-server.log |
11.Установка и настройка Nginx на Ubuntu
1 |
# apt-key add nginx_signing.key |
1 |
# nano /etc/apt/sources.list |
1 2 |
deb http://nginx.org/packages/ubuntu/ trusty nginx deb-src http://nginx.org/packages/ubuntu/ trusty nginx |
1 |
# apt-get install nginx |
1 |
# update-rc.d nginx defaults |
1 |
# cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf~ |
1 |
# cat /proc/cpuinfo | grep -i processor | wc -l |
1 |
2 |
1 |
# nano /etc/nginx/nginx.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
user nginx; worker_processes 2; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; use epoll; multi_accept on; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; # access_log off; sendfile on; tcp_nopush on; tcp_nodelay on; server_tokens off; keepalive_timeout 65; types_hash_max_size 2048; gzip on; gzip_static on; gzip_comp_level 5; gzip_min_length 1024; gzip_proxied any; gzip_vary on; gzip_types text/plain text/xml application/xml application/x-javascript text/javascript text/css text/json; gzip_disable "msie6"; client_max_body_size 100m; client_body_buffer_size 8K; index index.php index.html; include /etc/nginx/conf.d/*.conf; } |
Настройка сайта по умолчанию
1 |
# nano /etc/nginx/conf.d/default.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
server { listen 80; server_name localhost; root /usr/share/nginx/html; index index.html index.htm; location / { try_files $uri $uri/ =404; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ /\.ht { deny all; } } |
1 |
# hostname -f > /usr/share/nginx/html/index.html |
Настройка Nginx виртуального хоста первой Odoo-копии (odoo2016.mydomain.com)
1 |
# nano /etc/nginx/conf.d/odoo2016.mydomain.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
upstream odoo2016 { server 127.0.0.1:2016 weight=1 fail_timeout=5000s; } server { listen 80; server_name odoo2016.mydomain.com www.odoo2016.mydomain.com; access_log /var/log/nginx/odoo2016.mydomain.com-access.log; error_log /var/log/nginx/odoo2016.mydomain.com-error.log; root /opt/odoo/odoov8; # Specifies the maximum accepted body size of a client request, as indicated by the request header Content-Length. client_max_body_size 200m; # add ssl specific settings keepalive_timeout 60; # increase proxy buffer to handle some OpenERP web requests proxy_buffers 16 64k; proxy_buffer_size 128k; location / { proxy_pass http://odoo2016; # Force timeouts if the backend dies proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; # Set headers proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; # Let the Odoo web service know that we're using HTTPS, otherwise it will generate URL using http:// and not https:// # proxy_set_header X-Forwarded-Proto https; # Set timeouts proxy_connect_timeout 3600; proxy_send_timeout 3600; proxy_read_timeout 3600; send_timeout 3600; # By default, do not forward anything proxy_redirect off; } # Cache some static data in memory for 60mins # under heavy load this should relieve stress on the Odoo web interface a bit. location ~* /[0-9a-zA-Z_]*/static/ { proxy_cache_valid 200 60m; proxy_buffering on; expires 864000; proxy_pass http://odoo2016; } # Запретить доступ к управлению базой данных через WEB-интерфейс location ~* /web/database/ { deny all; } location ~ /\.ht { deny all; } } |
1 |
# nginx -t && service nginx reload |
Настройка Odoo первой копии(приведены только добавленные/измененные строки)
1 |
# nano /opt/odoo/odoo8/openerp-server.conf |
1 2 3 4 5 6 7 8 9 10 11 12 |
longpolling_port = 20168 xmlrpc_interface = 127.0.0.1 # Workers and timeouts workers = 2 limit_time_real = 3600 limit_time_cpu = 3600 # Is it behind a HTTP reverse proxy? proxy_mode = 1 dbfilter=odoo2016 |
Перезапускаем Odoo-сервер
1 |
# service odoo2016-server restart |
Проверяем доступность Odoo
1 |
http://odoo2016.mydomain.com |
1 |
# netstat -nlpt | grep [p]ython | grep 2016 |
1 2 |
tcp 0 0 127.0.0.1:2016 0.0.0.0:* LISTEN 3523/python tcp 0 0 127.0.0.1:20168 0.0.0.0:* LISTEN 3528/python |
Настройка Nginx виртуального хоста второй Odoo-копии (odoo2018.mydomain.com)
Копируем вирт.хост odoo2016 для второй копии Odoo и вносим необходимые изменения
1 |
# cp /etc/nginx/conf.d/odoo2016.mydomain.conf /etc/nginx/conf.d/odoo2018.mydomain.com.conf |
1 |
# nano /etc/nginx/conf.d/odoo2018.mydomain.com.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
upstream odoo2018 { server 127.0.0.1:2018 weight=1 fail_timeout=5000s; } server { listen 80; server_name odoo2018.mydomain.com www.odoo2018.mydomain.com; access_log /var/log/nginx/odoo2018.mydomain.com-access.log; error_log /var/log/nginx/odoo2018.mydomain.com-error.log; root /opt/odoo2/odoov8; …………… location / { proxy_pass http://odoo2018; ………… location ~* /[0-9a-zA-Z_]*/static/ { …………… proxy_pass http://odoo2018; } ….. } |
1 |
# nginx -t && service nginx reload |
Настройка Odoo второй копии(приведены только добавленные/измененные строки)
1 |
# nano /opt/odoo2/odoo8/openerp-server.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
longpolling_port = 20188 xmlrpc_interface = 127.0.0.1 # Workers and timeouts workers = 2 limit_time_real = 3600 limit_time_cpu = 3600 # Is it behind a HTTP reverse proxy? proxy_mode = 1 # DB filtering for multi-site instances dbfilter=odoo2018 |
Перезапускаем Odoo-сервер
1 |
# service odoo2018-server restart |
Проверяем доступность Odoo
1 |
http://odoo2018.mydomain.com |
1 |
# netstat -nlpt | grep [p]ython | grep 2018 |
1 2 |
tcp 0 0 127.0.0.1:20188 0.0.0.0:* LISTEN 2583/python tcp 0 0 127.0.0.1:2018 0.0.0.0:* LISTEN 2320/python |
Настройка Nginx виртуального хоста Odoo-10 в качестве третьей копии (odoo2019.mydomain.com)
1 |
# nano /etc/nginx/conf.d/odoo2019.mydomain.com.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
upstream odoo2019 { server 127.0.0.1:2019 weight=1 fail_timeout=5000s; } access_log /var/log/nginx/odoo2019.mydomain.com-access.log; error_log /var/log/nginx/odoo2019.mydomain.com-error.log; root /opt/odoo3/odoo10; .... location / { proxy_pass http://odoo2019; ... location ~* /[0-9a-zA-Z_]*/static/ { proxy_cache_valid 200 60m; proxy_buffering on; expires 864000; proxy_pass http://odoo2019; } .... } |
1 |
# nginx -t && service nginx reload |
Настройка Odoo-10 конфинурационного файла (приведены только добавленные/измененные строки)
1 |
# nano /opt/odoo3/odoo10/odoo.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
longpolling_port = 20199 xmlrpc_interface = 127.0.0.1 # Workers and timeouts workers = 2 limit_time_real = 3600 limit_time_cpu = 3600 # Is it behind a HTTP reverse proxy? proxy_mode = 1 # DB filtering for multi-site instances dbfilter=odoo2019 |
1 |
# service odoo2019-server restart |
1 |
# netstat -nlptu | grep python | grep 2019 |
1 2 |
tcp 0 0 127.0.0.1:2019 0.0.0.0:* LISTEN 11947/python tcp 0 0 127.0.0.1:20199 0.0.0.0:* LISTEN 11952/python |
Примечание:
Если при создании базы данных через WEB-интерфейс вываливается ошибка типа:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Traceback (most recent call last): File "/opt/odoo/odoo8/openerp/http.py", line 544, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/opt/odoo/odoo8/openerp/http.py", line 581, in dispatch result = self._call_function(**self.params) File "/opt/odoo/odoo8/openerp/http.py", line 318, in _call_function return self.endpoint(*args, **kwargs) File "/opt/odoo/odoo8/openerp/http.py", line 810, in __call__ return self.method(*args, **kw) File "/opt/odoo/odoo8/openerp/http.py", line 410, in response_wrap response = f(*args, **kw) File "/opt/odoo/odoo8/addons/web/controllers/main.py", line 703, in create params['create_admin_pwd']) File "/opt/odoo/odoo8/openerp/http.py", line 886, in proxy_method result = dispatch_rpc(self.service_name, method, args) File "/opt/odoo/odoo8/openerp/http.py", line 115, in dispatch_rpc result = dispatch(method, params) File "/opt/odoo/odoo8/openerp/service/db.py", line 73, in dispatch return fn(*params) File "/opt/odoo/odoo8/openerp/service/db.py", line 90, in exp_create_database _create_empty_database(db_name) File "/opt/odoo/odoo8/openerp/service/db.py", line 85, in _create_empty_database cr.execute("""CREATE DATABASE "%s" ENCODING 'unicode' TEMPLATE "%s" """ % (name, chosen_template)) File "/opt/odoo/odoo8/openerp/sql_db.py", line 158, in wrapper return f(self, *args, **kwargs) File "/opt/odoo/odoo8/openerp/sql_db.py", line 234, in execute res = self._obj.execute(query, params) DataError: new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII) HINT: Use the same encoding as in the template database, or use template0 as template. |
Решение:
1 |
# su -l postgres |
1 |
# psql –U postgres |
1 |
postgres=# update pg_database set datallowconn = TRUE where datname = 'template0'; |
1 |
UPDATE 1 |
1 |
postgres=# \c template0 |
1 |
You are now connected to database "template0" as user "postgres". |
1 |
template0=# update pg_database set datistemplate = FALSE where datname = 'template1'; |
1 |
UPDATE 1 |
1 |
template0=# drop database template1; |
1 |
DROP DATABASE |
1 |
template0=# create database template1 with template = template0 encoding = 'UTF8'; |
1 |
CREATE DATABASE |
1 |
template0=# update pg_database set datistemplate = TRUE where datname = 'template1'; |
1 |
UPDATE 1 |
1 |
template0=# \c template1 |
1 |
You are now connected to database "template1" as user "postgres". |
1 |
template1=# update pg_database set datallowconn = FALSE where datname = 'template0'; |
1 |
UPDATE 1 |
1 |
template1=# \q |
Оптимизация/ускорение Odoo
https://www.rosehosting.com/blog/how-to-speed-up-odoo/
1.Рекомендуется использовать SSD-диск
2.Выделить достаточное кол-во оперативной памяти
3.Оптимизация PostgreSQL
Параметр
1 2 |
shared_buffers выставляем в 20% от доступной памяти effective_cache_size – в 50% от доступной памяти |
После чего перезапускаем PostgreSQL
1 |
# service postgresql restart |
4.Оптимизация openerp-сервера
Проверяем, где находится конфигурационный файл openerp-сервера
1 |
# ps ax | grep openerp-server.conf |
1 2 |
2393 ? S 5:27 python /opt/odoo/odoo8/openerp-server -c /opt/odoo/odoo8/openerp-server.conf 2397 ? S 5:12 python /opt/odoo2/odoo8/openerp-server -c /opt/odoo2/odoo8/openerp-server.conf |
Либо
1 |
# apt-get install locate |
1 |
# updatedb |
1 |
# locate openerp-server.conf |
1 2 3 4 |
/opt/odoo/odoo8/openerp-server.conf /opt/odoo/odoo8/debian/openerp-server.conf /opt/odoo2/odoo8/openerp-server.conf /opt/odoo2/odoo8/debian/openerp-server.conf |
Выполним настройку конфигурационного файла openerp-сервера инстанса(копии),запущенной под пользователем odoo2 (/opt/odoo2/odoo8/openerp-server.conf)
Просмотр опций, поддерживаемых openerp-сервером(для этого переключимся на пользователя, от которого запущен odoo-instance, например,пользователь odoo2)
1 |
root@odoo2 ~ # su -l odoo2 -s "/bin/bash" |
1 |
odoo2@odoo2:~$ /opt/odoo2/odoo8/openerp-server --help |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Usage: openerp-server [options] Options: ....... Multiprocessing options: --workers=WORKERS Specify the number of workers, 0 disable prefork mode. --limit-memory-soft=LIMIT_MEMORY_SOFT Maximum allowed virtual memory per worker, when reached the worker be reset after the current request (default 671088640 aka 640MB). --limit-memory-hard=LIMIT_MEMORY_HARD Maximum allowed virtual memory per worker, when reached, any memory allocation will fail (default 805306368 aka 768MB). --limit-time-cpu=LIMIT_TIME_CPU Maximum allowed CPU time per request (default 60). --limit-time-real=LIMIT_TIME_REAL Maximum allowed Real time per request (default 120). --limit-request=LIMIT_REQUEST Maximum number of request to be processed per worker (default 8192). |
Возвращаемся/переключаемя на пользователя root
1 |
# exit |
Кол-во рабочих процессов (worker) выставляем равным ко-ву процессоров в системе
1 |
# grep processor /proc/cpuinfo | wc -l |
1 |
2 |
1 |
# nano /opt/odoo2/odoo8/openerp-server.conf |
1 |
workers = 2 |
Поcле чего перезапускаем необходимую копию Openerp-сервера
1 |
# /etc/init.d/odoo2018-server restart |
Источник:
https://www.linode.com/docs/websites/cms/install-odoo-9-erp-on-ubuntu-14-04
http://antiun.github.io/odoo-reverse-proxy-howto/#slide-0