在Ubuntu 16.04上安装Odoo 11堆栈

什么是Odoo?

Odoo(以前称为OpenERP)是一个由10,000多个开源应用程序组成的自托管套件,可满足各种业务需求,包括CRM,电子商务,会计,库存,销售点和项目管理。这些应用程序都是完全集成的,可以通过Web界面进行安装和访问,从而可以轻松实现公司流程的自动化和管理。

对于简单安装,可以在单个Linode上安装Odoo及其依赖项(有关详细信息,请参阅我们在Ubuntu上安装Odoo 10的指南)。但是,此单服务器设置不适合生产部署。本指南介绍了如何配置Odoo 11生产集群,其中Odoo服务器和PostgreSQL数据库托管在单独的Linode上,并通过数据库主从复制来提高性能和可靠性。

系统要求

本指南中的安装需要的最低 Linode配置:

  • PostgreSQL数据库(主和从) - Linode 2GB
  • Odoo 11 Web应用程序 - Linode 1GB

请记住,您的实施可能需要更多节点或更高内存计划,具体取决于您要服务的最终用户数量以及您计划集成的模块数量。

本指南中的所有示例均适用于Ubuntu 16.04。如果您计划使用其他操作系统,请根据需要调整命令。

在你开始之前

  1. 熟悉我们的入门指南并完成设置Linode主机名和时区的步骤。
  2. 本指南将尽可能使用sudo。完成“ 保护您的服务器 ”部分以创建标准用户帐户,加强SSH访问并删除不必要的网络服务。
  3. 更新您的系统: sudo apt-get update && sudo apt-get upgrade
  4. 安装software-properties-common: sudo apt install software-properties-common

为Odoo配置防火墙规则

如果要为Linode配置防火墙,请打开以下端口:

节点

打开TCP端口

Odoo 11应用

22, 6010, 5432, 8070

PostgreSQL数据库(Master&Slave)

22, 6010, 5432

Ports 22805432分别是SSH,HTTP和PostgreSQL的默认通讯端口。端口6010用于Odoo通信,端口8070由Odoo的网络服务器使用。要打开特定端口,您可以使用:

sudo ufw allow 22/tcp

有关防火墙设置的更多详细信息,请阅读我们的指南如何使用UFW配置防火墙

主机名分配

为了简化Linode之间的通信,请为每个服务器设置主机名。如果所有Linode位于同一数据中心,则可以使用专用IP,如果可以的话,也可以使用完全限定域名(FQDN)。本指南将使用以下FQDN和主机名约定:

节点

主机名

FQDN

Odoo 11

odoo

odoo.yourdomain.com

PostgreSQL 主数据库

masterdb

masterdb.yourdomain.com

PostgreSQL 从数据库

slavedb

slavedb.yourdomain.com

  1. PostgreSQL大师: / etc / hosts文件1 2 3 4 5 127.0.0.1 localhost 127.0.1.1 masterdb.yourdomain.com masterdb 10.1.1.20 slavedb.yourdomain.com slavedb 10.1.3.10 odoo.yourdomain.com odoo
  2. PostgreSQL Slave: / etc / hosts文件1 2 3 4 5 127.0.0.1 localhost 127.0.1.1 slavedb.yourdomain.com slavedb 10.1.1.10 masterdb.yourdomain.com masterdb 10.1.3.10 odoo.yourdomain.com odoo
  3. Odoo 11服务器: / etc / hosts文件1 2 3 4 5 127.0.0.1 localhost 127.0.1.1 odoo.yourdomain.com odoo 10.1.1.10 masterdb.yourdomain.com masterdb 10.1.1.20 slavedb.yourdomain.com slavedb

本指南中尽可能使用FQDN以避免混淆。

设置PostgreSQL

配置数据库后端。主数据库节点将处理所有交易,并将数据流传输到从数据库。

安装PostgreSQL

PostgreSQL的9.6版本为数据库复制提供了重大改进,但不幸的是,它不包含在默认的Ubuntu 16.04存储库中。在所有数据库节点上安装最新版本。

  1. 将官方PostgreSQL-Xenial存储库添加到您的系统: sudo add-apt-repository "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main"
  2. 导入存储库密钥: wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  3. 更新apt缓存: sudo apt update
  4. 在数据库节点中安装PostgreSQL 9.6: sudo apt install postgresql-9.6 postgresql-server-dev-9.6

创建PostgreSQL用户

从Odoo通信所需的PostgreSQL用户开始。在节点和节点上创建此用户。

  1. 切换到postgres用户并创建负责所有操作的数据库用户odoo。使用强密码并将其保存在安全的位置,稍后您将需要它: sudo -u postgres createuser odoo -U postgres -dRSP 在所有节点上为Odoo 用户postgres使用相同的密码。Odoo不会处理数据库复制,因此如果两个服务器共享相同的信息,则更容易触发最终的故障转移过程。
  2. 现在,您需要在节点上创建用户 replicauser: sudo -u postgres createuser replicauser -U postgres -P --replication 设置一个你会记住的强密码。 replicauser用户具有比odoo用户更少的权限,因为replicauser唯一的目的就是让从服务器从主节点读取信息。--replication选项授予replicauser执行其作业所需的权限。

配置基于主机的验证

  1. 在所有节点上停止PostgreSQL服务: sudo systemctl stop postgresql
  2. 编辑pg_hba.conf以允许PostgreSQL节点相互通信。将以下行添加到数据库服务器: /etc/postgresql/9.6/main/pg_hba.conf host replication replicauser slavedb.yourdomain.com md5 host all odoo odoo.yourdomain.com md5 每行提供客户端身份验证权限以连接到特定数据库。例如,第一行允许从节点使用 replicauser 用户连接到节点,第二行授予odoo用户连接到所有服务器中的数据库的权限。
  3. 节点添加类似的配置,这将使其更容易在必要时将其提升为主节点: /etc/postgresql/9.6/main/pg_hba.conf1 host all odoo odoo.yourdomain.com md5

pg_hba.conf文件中的设置说明:

  • host:使用Unix域套接字启用连接。
  • replication:指定给定用户的复制连接。此类连接不需要数据库名称。
  • replicauser:上一节中创建的用户。
  • md5:使用客户端提供的MD5加密密码进行身份验证。
  • all:匹配服务器中的所有数据库。如果您事先了解它们,则可以提供特定的Odoo数据库名称(如果有多个,则用逗号分隔)。
  • odoo:负责应用程序/数据库通信的Odoo用户。

配置存档和复制

在主节点上

  1. 为WAL文件创建目录archive: sudo mkdir -p /var/lib/postgresql/9.6/main/archive/
  2. 更改archive目录权限以允许postgres用户读写: sudo chown postgres: -R /var/lib/postgresql/9.6/main/archive/
postgresql.conf根据需要编辑和取消注释行:
/etc/postgresql/9.6/main/postgresql.conf 
#From CONNECTIONS AND AUTHENTICATION Section
listen_addresses = '*'
#From WRITE AHEAD LOG Section
wal_level = replica
min_wal_size = 80MB
max_wal_size = 1GB
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/9.6/main/archive/%f'
archive_timeout = 1h
#From REPLICATION Section
max_wal_senders = 3
wal_keep_segments = 10

在从节点上

编辑从节点的 postgresql.conf

/etc/postgresql/9.6/main/postgresql.conf

listen_addresses = '*'
#From WRITE AHEAD LOG Section
wal_level = replica
#From REPLICATION Section
max_wal_senders = 3
wal_keep_segments = 10
hot_standby = on

设置项说明:

  • listen_addresses:监听的IP地址。'*'意味着服务器将侦听所有IP地址。您可以将此限制为仅包含您认为安全的IP地址。
  • wal_level:设置为replica执行所需的操作。
  • min_wal_size:事务日志的最小大小。
  • max_wal_size:触发​​新检查点的WAL的实际目标大小。
  • archive_mode:设置为on激活存档存储(请参见下文)。
  • archive_timeout:强制服务器定期发送WAL段(即使min_wal_size未到达)。如果您期望很少的WAL流量,这将非常有用。
  • archive_command:执行本地shell命令以存档已完成的WAL文件段。
  • max_wal_senders节点的最大并发连接数。
  • wal_keep_segmentspg_xlog目录中保留的过去日志文件段的最小数量,以防备用服务器(节点)需要获取它们以进行流复制。
  • hot_standby = on:指定服务器可以在恢复期间连接并运行查询。

同步主节点和从节点数据

  1. 确认从节点 PostgreSQL服务未运行: sudo systemctl status postgresql
  2. 启动主节点 PostgreSQL服务: sudo systemctl start postgresql
  3. 在继续之前重命名从节点的数据目录: sudo mv /var/lib/postgresql/9.6/main /var/lib/postgresql/9.6/main_old
  4. 从节点输入以下内容以同步主节点的所有数据: sudo -u postgres pg_basebackup -h masterdb.yourdomain.com --xlog-method=stream \ -D /var/lib/postgresql/9.6/main/ -U replicauser -v -P 系统将提示您输入replicauser密码。传输完成后,主节点将从节点将完成数据库同步。这将在从节点上放置主节点数据库的完整副本。

警告

在完成所有配置之后,不要启动从节点的PostgreSQL服务,直到下一节的第3步。

在从节点上创建恢复文件

  1. 将样本恢复文件复制为模板以满足您的要求: sudo cp -avr /usr/share/postgresql/9.6/recovery.conf.sample \ /var/lib/postgresql/9.6/main/recovery.conf
  2. 编辑恢复文件的新副本: /var/lib/postgresql/9.6/main/recovery.conf standby_mode = 'on' primary_conninfo = 'host=masterdb.yourdomain.com port=5432 user=replicauser password=REPLICAUSER_PWD' restore_command = 'cp /var/lib/postgresql/9.6/main/archive/%f %p' trigger_file = '/tmp/postgresql.trigger.5432'
  3. 节点上启动PostgreSQL服务: sudo systemctl start postgresql

这些参数将您的从节点配置为还原数据。PostgreSQL文档中描述了故障转移和更多选项以进行恢复

测试复制

测试您的设置以检查一切是否按预期工作。

  1. 服务器中,更改为postgres用户并验证复制状态: sudo -u postgres psql -x -c "select * from pg_stat_replication;" -[ RECORD 1 ]----+------------------------------ pid | 6005 usesysid | 16385 usename | replicauser application_name | walreceiver client_addr | 66.228.54.56 client_hostname | client_port | 36676 backend_start | 2018-01-23 19:14:26.573184+00 backend_xmin | state | streaming sent_location | 0/6000F60 write_location | 0/6000F60 flush_location | 0/6000F60 replay_location | 0/6000F60 sync_priority | 0 sync_state | async
  2. 要查看正在进行的复制,请在服务器上使用以下odoo用户创建测试数据库: sudo createdb -h localhost -p 5432 -U odoo helloworld
  3. 从服务器上,使用postgres用户检查刚刚创建的新数据库是否存在,使用psql 参数: sudo -u postgres psql
  4. 列出所有数据库: \l
  5. 退出psql: \q

此测试不仅确认复制正在运行,而且还确认odoo用户已准备好执行数据库操作。

启用PostgreSQL自动启动

masterdbslavedb上启用服务postgresql:

sudo systemctl enable postgresql

Odoo 11安装

配置您的Odoo 11 Web应用程序以使用PostgreSQL数据库后端。

创建Odoo用户

为了将Odoo与其他服务分开,请创建一个新的Odoo系统用户来运行其进程:

sudo adduser --system --home=/opt/odoo --group odoo

配置日志

本指南中的示例使用单独的文件来记录Odoo活动:

sudo mkdir /var/log/odoo

安装Odoo 11

  1. 安装git: sudo apt install git
  2. 使用Git将Odoo文件克隆到您的服务器上: sudo git clone https://www.github.com/odoo/odoo --depth 1 \ --branch 11.0 --single-branch /opt/odoo 注意 Odoo 11应用程序现在使用Python 3.x而不是Python 2.7。如果您使用的是Ubuntu 14.04,这可能意味着您需要安装其他步骤。现在将依赖关系分组以突出显示新更改。
  3. 强制使用POSIX语言环境,这样可以防止在安装过程中出现错误(这与Odoo语言无关): export LC_ALL=C
  4. 安装新的Python3依赖项: sudo apt-get install python3 python3-pip python3-suds python3-all-dev \ python3-dev python3-setuptools python3-tk
  5. 安装全局依赖项(Odoo版本10通用): sudo apt install git 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 libyaml-dev fontconfig
  6. 安装Odoo 11特定的Python依赖项: sudo -H pip3 install --upgrade pip sudo -H pip3 install -r /opt/odoo/doc/requirements.txt sudo -H pip3 install -r /opt/odoo/requirements.txt
  7. 通过Node.js和npm安装Less CSS: sudo curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - \ && sudo apt-get install -y nodejs \ && sudo npm install -g less less-plugin-clean-css
  8. 下载wkhtmltopdf稳定包。将此命令中的版本号0.12.4替换为Github上的最新版本: cd /tmp wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
  9. 提取包: tar -xvf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
  10. 要确保wkhtmltopdf正常运行,请将二进制文件移动到可执行文件路径中的某个位置,并为其提供执行所需的权限: sudo mv wkhtmltox/bin/wk* /usr/bin/ \ && sudo chmod a+x /usr/bin/wk*

配置Odoo服务器

  1. 将包含的配置文件复制到/etc/并将其名称更改为odoo-server.conf sudo cp /opt/odoo/debian/odoo.conf /etc/odoo-server.conf
  2. 修改配置文件。完整文件应类似于以下内容,具体取决于您的部署需求: /etc/odoo-server.conf [options] admin_passwd = admin db_host = masterdb.yourdomain.com db_port = False db_user = odoo db_password = odoo_password addons_path = /opt/odoo/addons logfile = /var/log/odoo/odoo-server.log xmlrpc_port = 8070
  • admin_passwd:允许在Odoo GUI中进行管理操作的密码。确保更改为比admin更安全的密码。
  • db_hostmasterdb FQDN。
  • db_port:Odoo使用PostgreSQL的默认端口5432,只有在使用自定义PostgreSQL设置时才更改此设置。
  • db_user:PostgreSQL数据库用户的名称。
  • db_password:使用odoo您之前创建的PostgreSQL 用户密码。
  • addons_path:默认插件路径,您可以添加用逗号分隔它们的自定义路径: </path/to/custom/modules>
  • logfile:Odoo日志文件的路径。
  • xmlrpc_port:Odoo监听的端口。

创建一个Odoo服务

创建一个名为odoo-server的systemd单元,以允许您的应用程序作为服务运行。在以下位置/lib/systemd/system/odoo-server.service创建新文件并添加以下内容:

/lib/systemd/system/odoo-server.service

1 2 3 4 5 6 7 8 9 10 11 12 13 14

[Unit] Description=Odoo Open Source ERP and CRM [Service] Type=simple PermissionsStartOnly=true SyslogIdentifier=odoo-server User=odoo Group=odoo ExecStart=/opt/odoo/odoo-bin --config=/etc/odoo-server.conf --addons-path=/opt/odoo/addons/ WorkingDirectory=/opt/odoo/ [Install] WantedBy=multi-user.target

更改文件所有权和权限

  1. 更改odoo-server服务权限和所有权,以便只有root才能写入,而odoo用户只能读取和执行它: sudo chmod 755 /lib/systemd/system/odoo-server.service \ && sudo chown root: /lib/systemd/system/odoo-server.service
  2. 由于odoo用户将运行该应用程序,因此相应地更改其所有权: sudo chown -R odoo: /opt/odoo/
  3. odoo用户设置为日志目录的所有者: sudo chown odoo:root /var/log/odoo
  4. 保护服务器配置文件。更改其所有权和权限,以便其他非root用户无法访问它: sudo chown odoo: /etc/odoo-server.conf \ && sudo chmod 640 /etc/odoo-server.conf

测试你的Odoo堆栈

确认一切都按预期工作。

  1. 启动Odoo服务器: sudo systemctl start odoo-server
  2. 确认odoo-server正在运行: sudo systemctl status odoo-server
  3. 在浏览器中,导航到 odoo.yourdomain.com或者odoo Linode 的IP地址。如果您的代理和DNS配置工作正常,则会出现登录屏幕。
  4. 单击Manage Databases链接:

现在您可以看到之前创建的测试数据库。

5.单击“ Create Database”并使用测试数据库填写表单。选中“Load demonstation data”框以使用示例数据填充数据库。

6. 在浏览器中,您应该看到可用应用程序列表,表明数据库创建成功:

第一次创建数据库时,Odoo可能需要几分钟才能加载其所有附加组件。在此过程中不要重新加载页面。

启用Odoo服务

  1. 使odoo-server服务在重新启动时自动启动: sudo systemctl enable odoo-server
  2. 从Linode Manager重新启动您的Linode。
  3. 检查Odoo日志以验证Odoo服务器是否正在运行: sudo cat /var/log/odoo/odoo-server.log

备份Odoo数据库

如果Odoo堆栈的所有组件都在单个服务器上运行,则使用Odoo Web界面备份数据库非常简单。但是,这不适用于本指南中的配置,因为odoo Linode 上没有安装PostgreSQL 。

您有两种备份或传输生产数据库的选项:

  1. 您可以使用masterdbslavedb使用的过程在odoo服务器上安装PostgreSQL 9.6 。这将安装pg_dump和其他实用程序,让您可以像以前一样使用Odoo GUI。由于Odoo配置是明确的数据库连接,您不必担心其他任何事情。此方法将数据库还原到masterdb服务器而不是odoo
  2. 您还可以使用类似于同步主节点和从节点数据中的过程。您可以与测试或备份数据库服务器同步,而不是与从属节点同步:

1.masterdb上编辑/etc/postgresql/9.6/main/pg_hba.conf以允许测试服务器连接到它。

2. 在测试服务器上,停止PostgreSQL服务,移动/重命名/删除其当前数据,然后和以前一样运行命令pg_basebackup: sudo systemctl stop postgresql sudo mv /var/lib/postgresql/9.6/main /var/lib/postgresql/9.6/main_old sudo -u postgres pg_basebackup -h <masterdb public ip> --xlog-method=stream -D /var/lib/postgresql/9.6/main/ -U replicauser -v -P

更新Odoo模块

将生产数据库恢复,传输或同步到测试服务器后,可以更新Odoo模块。

从您的测试服务器使用以下标志重新启动Odoo服务,以指示系统搜索更新并应用:

sudo service odoo-server restart -u all -d <production_database_name>

更新您的系统

如果所有测试都通过,您可以安全地更新安装。

  1. 从您的Linode下载源代码中的新代码: cd /opt/odoo \ && sudo git fetch origin 11.0
  2. 将更改应用于存储库: sudo git reset --hard origin/11.0

注意

不要将Odoo系统更新与Odoo 版本升级混淆。使用上面介绍的方法,您将在同一版本中更新Odoo应用程序,而不是升级到较新的Odoo版本。从一个版本迁移到另一个版本通常需要对PostgreSQL数据库进行多次测试和手动修改,这些修改高度依赖于您要升级的Odoo版本。

更多信息

有关此主题的其他信息,您可能需要参考以下资源。虽然我们期望这些信息对您有帮助,但请注意,我们无法保证外部托管材料的准确性或及时性。

本文的版权归 用户1196457 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在服务器上安装LAMP

在本教程中,我们将在Ubuntu上安装LAMP。Ubuntu将满足我们的第一个要求:Linux操作系统。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免...

60720
来自专栏云计算教程系列

如何使用Ubuntu 16.04的Django一键安装镜像

Django是一个用于快速开发Web应用程序的高级Python框架。Django一键安装程序通过Django,Nginx,Gunicorn和Postgres为您...

19850
来自专栏编程微刊

微信小程序从零开始开发步骤(六)4种页面跳转的方法

19230
来自专栏Golang语言社区

HTTP协议漫谈

简介 园子里已经有不少介绍HTTP的的好文章。对HTTP的一些细节介绍的比较好,所以本篇文章不会对HTTP的细节进行深究,而是从够高和更结构化的角度将H...

375130
来自专栏技术小讲堂

ASP.NET5 中静态文件的各种使用方式服务端的静态文件开启目录浏览呈现默认文件使用UseFileServer方法文件类型基于IIS的考虑最佳实践

所谓静态文件,包含HTML文件,css文件、图片文件和js文件等,他们是服务器直接读取到客户端的一些资源,在这篇文章中,我们将解释关于ASP.NET5和静态文件...

43980
来自专栏Java面试笔试题

Hibernate中SessionFactory是线程安全的吗?Session是线程安全的吗(两个线程能够共享同一个Session吗)?

SessionFactory对应Hibernate的一个数据存储的概念,它是线程安全的,可以被多个线程并发访问。SessionFactory一般只会在启动的时候...

17120
来自专栏云计算教程系列

如何在Debian 8上设置Apache虚拟主机

Apache Web服务器是在互联网上提供Web内容的最流行方式。它占互联网上所有活跃网站的一半以上,并且非常强大和灵活。

16040
来自专栏云计算教程系列

如何在Ubuntu 14.04上使用Pydio托管文件共享服务器

随着云的采用增加,越来越多的数据被远程存储。从音乐到图片再到个人文档,很多人都将文件上传到他们不管理的服务器上。如果您希望将文件保存在您控制的服务器上,则可以使...

42400
来自专栏北京马哥教育

HTTP 协议漫谈

简介 网络上已经有不少介绍 HTTP 的好文章,对HTTP的一些细节介绍的比较好,所以本篇文章不会对 HTTP 的细节进行深究,而是从够高和更结构化的角度将 H...

316110
来自专栏用户2442861的专栏

每天一个linux命令(61):wget命令

http://www.cnblogs.com/peida/archive/2013/03/18/2965369.html

26620

扫码关注云+社区

领取腾讯云代金券