Ubuntu 安装 Odoo 17 详细教程

Ubuntu 安装 Odoo 17 详细教程

本教程将指导您在 Ubuntu 系统上从源代码安装 Odoo 17。Odoo 是一款功能强大的开源 ERP 和 CRM 软件套件。本教程适用于希望自行配置和管理 Odoo 环境的用户,尤其适合开发者和系统管理员。

教程概述

本教程将涵盖以下步骤:

  1. 系统更新: 确保您的 Ubuntu 系统是最新的。
  2. 安装依赖: 安装 Odoo 17 运行所需的软件包,包括 Python、PostgreSQL、wkhtmltopdf 等。
  3. 配置 PostgreSQL: 安装并设置 PostgreSQL 数据库,Odoo 使用它来存储数据。
  4. 安装 wkhtmltopdf: 安装用于生成 PDF 报表的 wkhtmltopdf 工具。
  5. 下载 Odoo 17 源代码: 从 GitHub 克隆 Odoo 17 的源代码。
  6. 创建 Python 虚拟环境: 为 Odoo 创建独立的 Python 运行环境。
  7. 安装 Python 依赖: 在虚拟环境中安装 Odoo 的 Python 依赖包。
  8. 首次运行 Odoo: 初始化数据库并启动 Odoo 服务。
  9. (可选)配置 systemd 服务: 将 Odoo 配置为 systemd 服务,以便长期稳定运行。

本教程假设您具备基本的 Linux 终端操作知识。

详细步骤

1. 系统更新

首先,更新您的 Ubuntu 系统软件包列表并升级已安装的软件包,确保系统处于最新状态。

sudo apt update && sudo apt upgrade -y
2. 安装依赖项

安装 Odoo 17 所需的各种依赖项,包括 Python 开发环境、PostgreSQL 数据库客户端库、XML 和 XSLT 处理库、压缩库、认证库、编译工具、Git 和 PostgreSQL 服务器。

sudo apt install -y python3-pip python3-dev python3-venv python3-wheel libpq-dev libxml2-dev libxslt1-dev zlib1g-dev libsasl2-dev libldap2-dev build-essential git postgresql wget

这些依赖项的功能简要说明:

  • python3-pip: Python 包管理工具 pip。
  • python3-dev: Python 开发头文件,用于编译 Python 扩展。
  • python3-venv: Python 虚拟环境工具,用于创建隔离的 Python 环境。
  • python3-wheel: Python wheel 打包格式支持。
  • libpq-dev: PostgreSQL 客户端库开发文件,Python 需要连接 PostgreSQL。
  • libxml2-devlibxslt1-dev: XML 和 XSLT 处理库开发文件。
  • zlib1g-dev: 压缩库开发文件。
  • libsasl2-devlibldap2-dev: 认证和 LDAP 支持库开发文件。
  • build-essential: 编译软件所需的基本工具包,例如 gcc, make。
  • git: 版本控制系统,用于下载 Odoo 源代码。
  • postgresql: PostgreSQL 数据库服务器。
  • wget: 命令行下载工具,用于下载 wkhtmltopdf。
3. 设置 PostgreSQL

Odoo 使用 PostgreSQL 作为数据库后端。在之前的步骤中,我们已经安装了 PostgreSQL 服务器。现在需要进行一些基本设置。

  • 启动并启用 PostgreSQL 服务:
sudo systemctl start postgresql
sudo systemctl enable postgresql
  • 创建 PostgreSQL 用户: 为了安全起见,建议创建一个专门用于 Odoo 的 PostgreSQL 用户。通常使用当前 Ubuntu 用户名作为 PostgreSQL 用户名。
sudo -u postgres createuser --createdb --username postgres --no-createrole --no-superuser $USER

这条命令的含义:

  • sudo -u postgres: 以 postgres 用户身份执行命令(PostgreSQL 的默认管理用户)。

  • createuser: PostgreSQL 命令,用于创建用户。

  • --createdb: 允许新用户创建数据库。

  • --username postgres: 指定创建用户的用户名为 postgres(此参数是指定 createuser 命令自身的用户名,而非要创建的用户名)。

  • --no-createrole: 禁止新用户创建角色。

  • --no-superuser: 禁止新用户成为超级用户。

  • $USER: 环境变量,代表当前的 Ubuntu 用户名,新创建的 PostgreSQL 用户名将与此相同。

  • (可选)设置 PostgreSQL 用户密码: 为了增强安全性,可以为 PostgreSQL 用户设置密码。

sudo -u postgres psql -c "ALTER USER $USER WITH PASSWORD 'your_password';"

your_password 替换为您想要设置的密码。

4. 安装 wkhtmltopdf

wkhtmltopdf 是一个用于将 HTML 转换为 PDF 的工具,Odoo 使用它来生成 PDF 报表。务必下载与您的 Ubuntu 版本相匹配的 wkhtmltopdf 版本,否则可能导致 PDF 生成失败。

访问 wkhtmltopdf GitHub releases 页面,找到适合您 Ubuntu 版本的 .deb 包链接。

例如,对于 Ubuntu 22.04 (Jammy),可以使用以下命令下载并安装:

wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb
sudo apt install -y ./wkhtmltox_0.12.6.1-2.jammy_amd64.deb
rm wkhtmltox_0.12.6.1-2.jammy_amd64.deb

请根据您的 Ubuntu 版本,替换下载链接中的版本号和 Ubuntu 代号 (例如 jammy, focal, kinetic 等)。 如果您不确定您的 Ubuntu 版本,可以运行 lsb_release -a 命令查看。

5. 下载 Odoo 17 源代码

使用 Git 克隆 Odoo 17 的源代码仓库到您的用户主目录下的 odoo17 文件夹。

git clone https://github.com/odoo/odoo --depth 1 --branch 17.0 ~/odoo17
  • git clone: Git 命令,用于克隆仓库。
  • https://github.com/odoo/odoo: Odoo 的官方 GitHub 仓库地址。
  • --depth 1: 仅克隆最近一次提交,减少下载量。
  • --branch 17.0: 指定克隆 Odoo 17.0 分支。
  • ~/odoo17: 指定克隆到的本地目录,这里是用户主目录下的 odoo17 文件夹。
6. 创建 Python 虚拟环境

进入 Odoo 源代码目录,并创建一个 Python 虚拟环境,以隔离 Odoo 的 Python 依赖,避免与系统 Python 环境冲突。

cd ~/odoo17
python3 -m venv venv
source venv/bin/activate
  • python3 -m venv venv: 在当前目录下创建名为 venv 的 Python 虚拟环境。
  • source venv/bin/activate: 激活虚拟环境。激活后,您的终端提示符前会显示 (venv),表示您正在虚拟环境中工作。
7. 安装 Python 依赖

在激活的虚拟环境中,安装 Odoo 17 的 Python 依赖包。这些依赖包在 Odoo 源代码目录下的 requirements.txt 文件中列出。

pip install wheel
pip install -r requirements.txt
  • pip install wheel: 安装 wheel 包,用于安装 wheel 格式的 Python 包,可以提高安装速度。
  • pip install -r requirements.txt: 使用 pip 安装 requirements.txt 文件中列出的所有 Python 包。
8. 首次运行 Odoo

现在可以首次运行 Odoo 17,初始化数据库并启动服务。

python3 odoo-bin -i base --addons-path=addons -d odoo17db
  • python3 odoo-bin: 执行 Odoo 的主程序 odoo-bin,在虚拟环境的 bin 目录下。
  • -i base: 指定安装 base 模块,这是 Odoo 的核心模块,初始化数据库时需要安装。
  • --addons-path=addons: 指定附加模块的路径,默认为 addons 目录(位于 Odoo 源代码根目录下)。
  • -d odoo17db: 指定要创建的数据库名称为 odoo17db

首次运行 Odoo 会初始化数据库,并加载 base 模块。您可以在终端看到 Odoo 的日志输出。当看到类似 Odoo server is running ... 的信息时,表示 Odoo 服务已经启动。

打开浏览器,访问 http://localhost:8069,您应该能看到 Odoo 的设置界面,可以创建管理员账户并开始使用 Odoo。

注意: 首次运行 Odoo 时,为了初始化数据库,可能需要一些时间,请耐心等待。

9. (可选)配置 systemd 服务

为了让 Odoo 在后台长期稳定运行,并方便管理,建议将其配置为 systemd 服务。

  • 创建 systemd 服务文件: 使用文本编辑器创建 /etc/systemd/system/odoo17.service 文件,并添加以下内容。请根据您的实际安装路径和用户名进行调整。
[Unit]
Description=Odoo 17 Server
Requires=postgresql.service
After=network.target postgresql.service[Service]
Type=simple
User=your_username  # 替换为您的 Ubuntu 用户名
WorkingDirectory=/home/your_username/odoo17  # 替换为 Odoo 源代码目录
ExecStart=/home/your_username/odoo17/venv/bin/python3 /home/your_username/odoo17/odoo-bin -c /etc/odoo/odoo.conf
Restart=on-failure
StandardOutput=journal
StandardError=journal[Install]
WantedBy=multi-user.target
  • 创建 Odoo 配置文件: 创建 /etc/odoo/odoo.conf 配置文件,并添加以下内容。请根据您的实际情况修改配置,例如管理员密码、数据库连接信息等。
[options]
admin_passwd = your_admin_password  # 替换为您想要设置的管理员密码
db_host = localhost
db_port = 5432
db_user = your_username  # 替换为您的 Ubuntu 用户名,也是 PostgreSQL 用户名
db_password = your_database_password  # 如果您为 PostgreSQL 用户设置了密码,请在此处填写
addons_path = /home/your_username/odoo17/addons  # 替换为 Odoo 源代码目录下的 addons 目录路径

确保将 your_username 替换为您的 Ubuntu 用户名,your_admin_password 替换为您想要设置的 Odoo 管理员密码,如果设置了 PostgreSQL 用户密码,也需要填写 db_password

  • 启用并启动 Odoo 服务:
sudo systemctl daemon-reload
sudo systemctl enable odoo17
sudo systemctl start odoo17
  • sudo systemctl daemon-reload: 重新加载 systemd 配置,使新的服务文件生效。

  • sudo systemctl enable odoo17: 设置 Odoo 服务开机自启动。

  • sudo systemctl start odoo17: 立即启动 Odoo 服务。

  • 检查服务状态: 可以使用以下命令检查 Odoo 服务是否正在运行。

sudo systemctl status odoo17

如果服务正常运行,您应该看到 active (running) 的状态。

现在,Odoo 17 应该已经在后台作为 systemd 服务运行了。您仍然可以通过浏览器访问 http://localhost:8069 来使用 Odoo。

常见问题与注意事项

  • 端口占用: 默认情况下,Odoo 使用 8069 端口。如果该端口已被占用,您可以在运行 odoo-bin 时使用 --xmlrpc-port 参数指定其他端口,例如 python3 odoo-bin --xmlrpc-port=8070 ...
  • 依赖安装错误: 如果在安装依赖时遇到错误,请仔细检查错误信息,确保您的系统网络连接正常,并检查是否遗漏了某些依赖包。
  • 数据库连接错误: 如果 Odoo 无法连接到 PostgreSQL 数据库,请检查 PostgreSQL 服务是否正在运行 (sudo systemctl status postgresql),并检查 Odoo 配置文件 /etc/odoo/odoo.conf 中的数据库连接信息是否正确。
  • wkhtmltopdf 版本不兼容: 如果 PDF 报表生成失败,很可能是 wkhtmltopdf 版本不兼容。请务必下载并安装与您的 Ubuntu 版本匹配的 wkhtmltopdf 版本。
  • 权限问题: 确保 Odoo 运行用户(在 systemd 服务文件中指定)对 Odoo 源代码目录及其子目录具有读取和执行权限。

总结

通过以上步骤,您应该已经成功在 Ubuntu 系统上安装了 Odoo 17。您可以根据您的需求进一步配置 Odoo,例如安装更多模块、配置 SMTP 服务器等。 建议您参考 Odoo 官方文档和社区资源,以获取更多高级配置和使用技巧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90269.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鲲鹏·卓识系列2.45G传感器型有源标签:以国产化技术重塑安全监测与人员管理新标准

标题:鲲鹏卓识系列2.45G传感器型有源标签:以国产化技术重塑安全监测与人员管理新标准 随着工业4.0和智慧城市建设的加速推进,安全生产、环境监测和人员管理成为各行业的核心需求。在军事、工业、仓储、能源等领域,温湿度、烟雾、油…

腾讯云推出CodeBuddy:革新AI全栈开发体验

文章目录一、前言二、安装流程三、CodeBuddy 核心功能3.1 AI辅助开发3.2 Coding Design Chat 三大模式3.3 Boost Prompt3.4 Figma 集成3.5 Componen 控件库3.6 Config MCP3.7 Upload Images 图片上传和管理3.8 Preview功能3.9 Deploy 一键部署3.10 项目展示 | MCP生成小红书卡片…

龙虎榜——20250723

上证指数放量收上影线,未站上3600点,个股下跌明显多于上涨,指数有调整需求,注意短线风险。深证指数较昨日缩量收阴线,依然在5日均线上方运行,打到前期平台高点有震荡调整需求,注意风险。2025年7…

SpringBoot06-@ConfigurationProperties注解

ConfigurationProperties注解用于将配置文件(application.properties 或 application.yml)中的配置值,自动绑定到 Java Bean 对象上。1-1、基本用途比如我们在 application.yml 中有这样一段配置:app:name: myAppversion: 1.0.0au…

oracle里面concat函数用法,oracle wm_concat函数用法-

wmsys.wm_concat函数,它的作用是以’,’链接字符 例子如下: SQL> create table idtable (id number,name varchar2(30)); Table created SQL> insert into idtable values(10,’ab’); 1 row inserted SQL> insert into idtable values(10,’bc…

C++中的list(2)简单复现list中的关键逻辑

C中的list(2)//简单复现list中的关键逻辑 前言 这一节的主要内容就是:简单复现list中的关键逻辑。同样的,我们这一节也是先粗略的看一眼源码,结合源码,边理解边复现。源码我已经上传到gitee,网…

Linux——System V 共享内存 IPC

文章目录一、共享内存的原理二、信道的建立1.创建共享内存1.key的作用2.key的选取3.shmid的作用4.key和shmid的区别5.内存设定的特性6.shmflg的设定2.绑定共享内存3.代码示例三、利用共享内存通信1.通信2.解除绑定3.销毁共享内存1.命令行销毁2.程序中销毁四、共享内存的生命周期…

Python 程序设计讲义(9):Python 的基本数据类型——复数

Python 程序设计讲义(9):Python 的基本数据类型——复数 复数与数学中的复数概念类似。在 Python 中,复数表示为 abj,其中:a为实数部分,b为虚数部分,j称为虚数单位。复数必须包含虚数…

leetcode_121 买卖股票的最佳时期

1. 题意 有一个股价变化图,你可以在一天买入,在未来一天卖出。 求通过这样一次操作的最大获利。 2. 题解 2.1 枚举 直接枚举,买入卖出的时间,肯定会超时啦~ 时间复杂度为O(n2)O(n^2)O(n2) 空间复杂度为O(1)O(1)O(1) class …

ToBToC的定义与区别

B 端和 C 端主要是从产品所面向的用户群体角度来区分的,B 端指的是企业用户(Business),C 端指的是个人消费者(Consumer),它们在多个方面存在明显区别,具体如下:用户特征B…

Python 程序设计讲义(8):Python 的基本数据类型——浮点数

Python 程序设计讲义(8):Python 的基本数据类型——浮点数 目录Python 程序设计讲义(8):Python 的基本数据类型——浮点数一、浮点数的表示形式1、小数形式2、指数形式二、浮点数的精确度浮点数也称小数&am…

MCP客户端架构与实施

前言:从模型到生产力 — MCP的战略价值 在过去的一年里,我们团队见证了大型语言模型(LLM)从技术奇迹向企业核心生产力工具的演变。然而,一个孤立的LLM无法解决实际的业务问题。真正的价值释放,源于将模型的认知能力与企业现有的数据、API及工作流进行无缝、安全、可扩展…

白盒测试核心覆盖率标准详解文档

白盒测试核心覆盖率标准详解文档 1. 什么是白盒测试与覆盖率? 白盒测试(White-box Testing),又称结构测试或逻辑驱动测试,是一种测试方法,测试人员能够访问并了解被测软件的内部结构、代码和实现逻辑。测试…

顺丰面试提到的一个算法题

顺丰面试提到的一个算法题面试过程中大脑空白,睡了一觉后突然想明白了 原理非常简单就是根据数组中元素的值对值对应的索引进行排序 哎,,,,具体看以下代码吧[使用 Java 17 中 Stream 实现] 最好别用 CSDN 提供的在线运…

ChatGPT Agent深度解析:告别单纯问答,一个指令搞定复杂任务?

名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录一、什么是ChatGPT Agent?从"客服"到"秘书"的华丽转…

位运算在算法竞赛中的应用(基于C++语言)_位运算优化

在C算法竞赛中,位运算优化是一种非常重要的技巧,因为它可以显著提高算法的效率。以下是一些常见的位运算优化方法及其在各种算法中的应用示例: 常见的位运算优化 1)位与运算 &: 用途:用于检查某个位是否…

SpringBoot 使用Rabbitmq

1.Springboot默认MQ支持rabbitmq或者kafka maven引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>propertis添加配置 # spring.rabbitmq.host192.168…

C++核心编程学习4--类和对象--封装

C面向对象有三大特性&#xff1a;封装、继承和多态。 封装 将属性和行为作为一个整体。将属性和行为加以权限控制。 例子1&#xff1a;设计一个圆类 #include <iostream> using namespace std;// 设计一个圆类&#xff0c;求圆的周长 // 圆周率&#xff1a;3.14 const do…

AC身份认证实验之AAA服务器

一、实验背景某公司需要在企业的公司网络出口使用上网行为管理设备&#xff0c;以审计管理局域网的所有设备&#xff0c;同时&#xff0c;局域网内的所有设备都将上网行为代理上网&#xff0c;但是发生过访客外传一些非法信息&#xff0c;所以需要对外来人员进行实名认证&#…

数组算法之【数组中第K个最大元素】

目录 LeetCode-215题 LeetCode-215题 给定整数数组nums和整数k&#xff0c;返回数组中第k个最大元素 public class Solution {/*** 这里是基于小顶堆这种数据结构来实现的*/public int findKthLargest(int[] nums, int k) {// 实例化一个小顶堆MinHeap minHeap new MinHeap…