Odoo(以前称为OpenERP)是一个由10,000多个开源应用程序组成的自托管套件,可满足各种业务需求,包括CRM,电子商务,会计,库存,销售点和项目管理。这些应用程序都是完全集成的,可以通过Web界面进行安装和访问,从而可以轻松实现公司流程的自动化和管理。
对于简单安装,可以在单个Linode上安装Odoo及其依赖项(有关详细信息,请参阅我们在Ubuntu上安装Odoo 10的指南)。但是,此单服务器设置不适合生产部署。本指南介绍了如何配置Odoo 11生产集群,其中Odoo服务器和PostgreSQL数据库托管在单独的Linode上,并通过数据库主从复制来提高性能和可靠性。
本指南中的安装需要的最低 Linode配置:
请记住,您的实施可能需要更多节点或更高内存计划,具体取决于您要服务的最终用户数量以及您计划集成的模块数量。
本指南中的所有示例均适用于Ubuntu 16.04。如果您计划使用其他操作系统,请根据需要调整命令。
sudo
。完成“ 保护您的服务器 ”部分以创建标准用户帐户,加强SSH访问并删除不必要的网络服务。software-properties-common
: sudo apt install software-properties-common
如果要为Linode配置防火墙,请打开以下端口:
节点 | 打开TCP端口 |
---|---|
Odoo 11应用 | 22, 6010, 5432, 8070 |
PostgreSQL数据库(Master&Slave) | 22, 6010, 5432 |
Ports 22
,80
和5432
分别是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 |
本指南中尽可能使用FQDN以避免混淆。
配置数据库后端。主数据库节点将处理所有交易,并将数据流传输到从数据库。
PostgreSQL的9.6版本为数据库复制提供了重大改进,但不幸的是,它不包含在默认的Ubuntu 16.04存储库中。在所有数据库节点上安装最新版本。
apt
缓存: sudo apt update
从Odoo通信所需的PostgreSQL用户开始。在主节点和从节点上创建此用户。
postgres
用户并创建负责所有操作的数据库用户odoo
。使用强密码并将其保存在安全的位置,稍后您将需要它: sudo -u postgres createuser odoo -U postgres -dRSP 在所有节点上为Odoo 用户postgres使用相同的密码。Odoo不会处理数据库复制,因此如果两个服务器共享相同的信息,则更容易触发最终的故障转移过程。replicauser
用户具有比odoo
用户更少的权限,因为replicauser
唯一的目的就是让从服务器从主节点读取信息。--replication
选项授予replicauser
执行其作业所需的权限。
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
用户连接到所有服务器中的数据库的权限。pg_hba.conf
文件中的设置说明:
host
:使用Unix域套接字启用连接。replication
:指定给定用户的复制连接。此类连接不需要数据库名称。replicauser
:上一节中创建的用户。md5
:使用客户端提供的MD5加密密码进行身份验证。all
:匹配服务器中的所有数据库。如果您事先了解它们,则可以提供特定的Odoo数据库名称(如果有多个,则用逗号分隔)。odoo
:负责应用程序/数据库通信的Odoo用户。
在主节点上
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_segments
:pg_xlog
目录中保留的过去日志文件段的最小数量,以防备用服务器(从节点)需要获取它们以进行流复制。hot_standby = on
:指定从服务器可以在恢复期间连接并运行查询。
replicauser
密码。传输完成后,主节点将从节点将完成数据库同步。这将在从节点上放置主节点数据库的完整副本。警告 在完成所有配置之后,不要启动从节点的PostgreSQL服务,直到下一节的第3步。
这些参数将您的从节点配置为还原数据。PostgreSQL文档中描述了故障转移和更多选项以进行恢复。
测试您的设置以检查一切是否按预期工作。
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 | asyncodoo
用户创建测试数据库: sudo createdb -h localhost -p 5432 -U odoo helloworldpostgres
用户检查刚刚创建的新数据库是否存在,使用psql 参数
: sudo -u postgres psqlpsql
: \q此测试不仅确认复制正在运行,而且还确认odoo
用户已准备好执行数据库操作。
在masterdb和slavedb上启用服务postgresql:
sudo systemctl enable postgresql
配置您的Odoo 11 Web应用程序以使用PostgreSQL数据库后端。
为了将Odoo与其他服务分开,请创建一个新的Odoo系统用户来运行其进程:
sudo adduser --system --home=/opt/odoo --group odoo
本指南中的示例使用单独的文件来记录Odoo活动:
sudo mkdir /var/log/odoo
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.xzwkhtmltopdf
正常运行,请将二进制文件移动到可执行文件路径中的某个位置,并为其提供执行所需的权限: sudo mv wkhtmltox/bin/wk* /usr/bin/ \ && sudo chmod a+x /usr/bin/wk*
/etc/
并将其名称更改为odoo-server.conf
sudo cp /opt/odoo/debian/odoo.conf /etc/odoo-server.confadmin_passwd
:允许在Odoo GUI中进行管理操作的密码。确保更改为比admin更安全的密码。db_host
:masterdb 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-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 |
---|
odoo-server
服务权限和所有权,以便只有root才能写入,而odoo
用户只能读取和执行它: sudo chmod 755 /lib/systemd/system/odoo-server.service \ && sudo chown root: /lib/systemd/system/odoo-server.serviceodoo
用户将运行该应用程序,因此相应地更改其所有权: sudo chown -R odoo: /opt/odoo/odoo
用户设置为日志目录的所有者: sudo chown odoo:root /var/log/odoo
确认一切都按预期工作。
odoo-server
正在运行: sudo systemctl status odoo-serverodoo.yourdomain.com
或者odoo Linode 的IP地址。如果您的代理和DNS配置工作正常,则会出现登录屏幕。现在您可以看到之前创建的测试数据库。
5.单击“ Create Database”并使用测试数据库填写表单。选中“Load demonstation data”框以使用示例数据填充数据库。
6. 在浏览器中,您应该看到可用应用程序列表,表明数据库创建成功:
第一次创建数据库时,Odoo可能需要几分钟才能加载其所有附加组件。在此过程中不要重新加载页面。
odoo-server
服务在重新启动时自动启动: sudo systemctl enable odoo-server
如果Odoo堆栈的所有组件都在单个服务器上运行,则使用Odoo Web界面备份数据库非常简单。但是,这不适用于本指南中的配置,因为odoo Linode 上没有安装PostgreSQL 。
您有两种备份或传输生产数据库的选项:
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服务,以指示系统搜索更新并应用:
sudo service odoo-server restart -u all -d <production_database_name>
如果所有测试都通过,您可以安全地更新安装。
注意 不要将Odoo系统更新与Odoo 版本升级混淆。使用上面介绍的方法,您将在同一版本中更新Odoo应用程序,而不是升级到较新的Odoo版本。从一个版本迁移到另一个版本通常需要对PostgreSQL数据库进行多次测试和手动修改,这些修改高度依赖于您要升级的Odoo版本。
有关此主题的其他信息,您可能需要参考以下资源。虽然我们期望这些信息对您有帮助,但请注意,我们无法保证外部托管材料的准确性或及时性。