Odoo:自建开源ERP系统

如何拉起开箱即用的企业级应用全家桶 Odoo,并使用 Pigsty 管理其后端 PostgreSQL 数据库。

Odoo 是一个开源的企业级 ERP 系统,提供了从 CRM、销售、采购、库存、生产、财务等全方位的企业管理功能。Odoo 也是一个典型的 Web 应用,底层使用 PostgreSQL 数据库作为存储。

将你所有的业务都汇总入一个平台,简单,高效,省钱。

公开演示(不一定开放):http://odoo.pigsty.cc, username: [email protected], password: pigsty


快速上手

首先准备一个 Pigsty 单节点配置文件,如下所示:

 curl -fsSL https://repo.pigsty.io/get | bash
./bootstrap               # prepare local repo & ansible
./configure -c demo/odoo  # IMPORTANT: CHANGE CREDENTIALS!!
./install.yml             # install pigsty & pgsql & minio
./docker.yml              # install docker & docker-compose
./app.yml                 # install odoo

Odoo 默认监听在 8069 端口,你可以通过浏览器访问 http://<ip>:8069。第一次登陆会提示您创建数据库(建议使用 odoo 即可,其他初始用户名密码按实际情况填写并记录)

你可以在浏览器所在主机(/etc/hosts)添加一条解析记录 odoo.pigsty 指向您的服务器,这样您就可以通过 http://odoo.pigsty 访问 Odoo 网络界面了。

如果你想要通过 SSL/HTTPS 访问 Odoo,你需要使用真正的 SSL 证书,或者信任 Pigsty 自动生成的自签名 ca 证书。(当然,在 Chrome 浏览器中,你也可以使用敲击键入 thisisunsafe 来绕过证书验证)


单节点配置文件

conf/demo/odoo.yml 中有一个样例配置文件:

all:
  children:

    infra:
      hosts: { 10.10.10.10: { infra_seq: 1 } }
      vars:

        # ./docker.yml -l infra
        docker_enabled: true
        docker_registry_mirrors: []
        #  - https://docker.m.daocloud.io
        #  - https://dockerproxy.com

        # ./app.yml -l infra -e app=odoo
        app: odoo
        app_config:
          PG_HOST: 10.10.10.10
          PG_PORT: 5432
          PG_USER: dbuser_odoo
          PG_PASS: DBUser.Odoo
          ODOO_PORT: 8069

    etcd: { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }
    #minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }

    pg-meta:
      hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
      vars:
        pg_cluster: pg-meta
        pg_users:
          - {name: dbuser_meta       ,password: DBUser.Meta       ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: pigsty admin user }
          - {name: dbuser_view       ,password: DBUser.Viewer     ,pgbouncer: true ,roles: [dbrole_readonly] ,comment: read-only viewer for meta database }
          - {name: dbuser_odoo       ,password: DBUser.Odoo       ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: admin user for odoo service ,createdb: true } #,superuser: true}
        pg_databases:
          - {name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty] ,extensions: [{name: vector}]}
          #- {name: odoo ,owner: dbuser_odoo ,revokeconn: true ,comment: odoo main database  }  # this will be created by the dbuser_odoo, you can register it to grafana later
        pg_hba_rules:
          - {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana dashboard access cmdb from infra nodes'}
        pg_libs: 'pg_stat_statements, auto_explain'  # add timescaledb to shared_preload_libraries

  vars:                               # global variables
    version: v3.2.1                   # pigsty version string
    admin_ip: 10.10.10.10             # admin node ip address
    region: default                   # upstream mirror region: default|china|europe
    infra_portal:                     # domain names and upstream servers
      home         : { domain: h.pigsty }
      grafana      : { domain: g.pigsty ,endpoint: "${admin_ip}:3000" , websocket: true }
      prometheus   : { domain: p.pigsty ,endpoint: "${admin_ip}:9090" }
      alertmanager : { domain: a.pigsty ,endpoint: "${admin_ip}:9093" }
      blackbox     : { endpoint: "${admin_ip}:9115" }
      loki         : { endpoint: "${admin_ip}:3100" }
      odoo         : { domain: odoo.pigsty, endpoint: "127.0.0.1:8069", websocket: true } # <-- 在这里指定 Odoo 的域名

    # Credential: CHANGE THESE PASSWORDS IN PRODUCTION
    grafana_admin_password: pigsty
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty

    repo_modules: infra,node,pgsql,docker
    repo_packages: [ node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-utility, docker ]
    repo_extra_packages: [ pg17-main ]
    pg_version: 17

然后依次执行以下剧本,即可完成 Odoo 安装:

./install.yml   # 完成单节点 Pigsty 安装
./docker.yml    # 安装 Docker 模块
./app.yml       # 安装 Odoo 模块

默认的连接串如下所示,你可以在 app.yml 中修改用户的密码,并相应修改 app_config 中的配置

psql postgres://dbuser_odoo:[email protected]:5432/postgres

将 Odoo 服务对外暴露

infra_portal:                     # domain names and upstream servers
  home         : { domain: h.pigsty }
  grafana      : { domain: g.pigsty    ,endpoint: "${admin_ip}:3000" , websocket: true }
  prometheus   : { domain: p.pigsty    ,endpoint: "${admin_ip}:9090" }
  alertmanager : { domain: a.pigsty    ,endpoint: "${admin_ip}:9093" }
  blackbox     : { endpoint: "${admin_ip}:9115" }
  loki         : { endpoint: "${admin_ip}:3100" }
  odoo         : { domain: odoo.pigsty, endpoint: "127.0.0.1:8069", websocket: true }  # <------ add this line
./infra.yml -t nginx   # setup nginx infra portal

Odoo 扩展插件

社区中有很多可用的 Odoo 模块,你可以通过下载并将它们放置在 addons 文件夹中来安装它们。

volumes:
  - ./addons:/mnt/extra-addons

你可以将 ./addons 目录挂载到容器中的 /mnt/extra-addons 目录,然后下载并解压到 addons 文件夹中,然后启用这些模块。

要启用这些模块,首先进入 开发者模式

Settings -> Generic Settings -> Developer Tools -> Activate the developer Mode

然后,转到 > Apps -> Update Apps List, 然后你可以在面板中找到这些额外的模块并安装它们。

经常使用的 免费模块 ,当然以及大家最需要的 Accounting Kit 模块。


Last modified 2025-01-12: routine update (85ee5b92)