在更深刻了解 Odoo 開發以前,咱們應配置好開發環境並學習相關的基礎管理任務。本文中,咱們將學習建立 Odoo 應用所需用到的工具和環境配置。這裏採用 Ubuntu 系統來做爲開發服務器實例的主機,能夠是雲服務器、本地服務器或者PC 上的虛擬機。css
本文主要內容有:html
本文將介紹如何在開發電腦上使用源碼安裝 Odoo,建議使用系統是Ubuntu 18.04 ,也能夠選擇 Windows 10,文中會介紹到如何在 Windows 下安裝 Linux 子系統。相關代碼可參見 GitHub 倉庫。前端
推薦使用Debian/Ubuntu來運行 Odoo 服務。雖然 Odoo 是一個跨平臺的系統,能夠運行在不一樣的操做系統上,但事實上 Odoo 的研發(R&D)團隊把 Debian 系做爲參照部署平臺。而且 Odoo 本身的 SaaS 平臺也運行在 Debian 之上。這也是社區中最主流的選擇,說明使用Debian 或 Ubuntu 會更容易尋求到幫助和建議。你也許僅有 Windows 相關背景,但對Debian 繫有必定了解也很是重要。node
固然你依然能夠選擇本身喜歡的系統,如 Windows, Mac 或其它Linux發行版本(如 CentOS)。python
ℹ️本文中介紹的是在一個全新的系統中進行開發,若是你在已有系統中開發,請作好備份以在出錯時進行恢復linux
在 Windows 系統中,最簡單的方案是使用 Windows 10自帶的Linux子系統(WSL – Windows Subsystem for Linux)。經過子系統,咱們能夠在 Windows 內運行 Ubuntu 系統,足以應對 Odoo 開發所需的一切。更多 WSL 相關知識請參考官網。git
WSL 是Windows 10最近發佈中的一個可選功能,使用前須要先啓用。啓用後便可在商店中安裝 Ubuntu,詳見官方幫助文檔。github
在寫本文時,須要以下步驟來完成安裝:web
第一步是要確保 WSL 功能已開啓,以管理員身份打開 PowerShell 並運行:正則表達式
以上命令須要在單行執行,而後根據提示重啓電腦。而後咱們就能夠安裝Ubuntu Windows應用,最簡單地方式是在自帶微軟商店中搜索 Ubuntu,在寫本文時最新的長期支持版本(LTS)是18.04,按照提示進行安裝便可。運行 Ubuntu 應用會打開一個bash 命令行,這裏能夠輸入在 Ubuntu 系統中相同的命令。須要記住在安裝時配置的用戶名和密碼,由於在進行提權操做時會要求輸入該信息(如運行 sudo 時)。
咱們還能夠選擇在電腦上安裝 Linux,或在局域網乃至雲端安裝 Linux 系統。咱們須要一臺基於 Debian 的服務器用於 Odoo 服務端開發,若是此前你沒有接觸過 Linux, 請注意 Ubuntu 是一個基於 Debian 的 Linux 發行版本,因此二者極爲類似。Odoo 保證可在當前穩定的 Debian 或 Ubuntu 版本上運行,在寫本文時,分別爲 Debian 9(Stretch)和Ubuntu 18.04 LTS(Bionic Beaver)。
更推薦選擇 Ubuntu,因安裝上較 Debian 容易。可從 Ubuntu 官網上下載 ISO 鏡像,建議使用最新的 LTS 版本。若是你剛剛接觸 Linux,使用預配置的鏡像會更容易些。TurnKey Linux提供了含 ISO 的多種格式預安裝鏡像。ISO 格式能夠在任意虛擬化軟件上使用,即使是裸機。較優的選擇是 LAPP 鏡像,已安裝了 Odoo 所需的Python 和 PostgreSQL。
爲可以進行遠程操做,一般需安裝OpenSSH服務。在 Ubuntu 的設置助手中有這一服務,但也能夠經過以下命令來進行安裝:
而後須要使用 SSH(Secure Shell)客戶端來鏈接 Odoo 的宿主機,Windows 中經常使用的有 PuTTY、XShell 和 SecureCRT。
能夠經過以下命令來查看服務器的 IP 地址:
使用 SSH 客戶端能夠遠程操做 Linux 主機,還能夠得到比在虛擬機終端操做更好的體驗,咱們能夠更容易的複製粘貼、修改窗口大小、字體等。
補充:關於虛擬機 Hyper-V, VMware, VirtualBox和 Vagrant 都是很好的方案,網上有不少資料,限於篇幅本文再也不介紹。
在本系列文件第一篇使用開發者模式快速入門 Odoo 12中,咱們介紹了快速運行 Odoo 的各類方式,本文中咱們將更深刻一步,直接經過源碼來安裝、運行 Odoo。
Odoo使用Python 編程語言,數據存儲使用 PostgreSQL數據庫,這是對 Odoo 主機的兩大要求。要使用源碼運行 Odoo,首先要安裝其所依賴的 Python 庫。而後從 GitHub 上下載源代碼,雖然能夠下載 zip 和 tar 文件,但使用 Git版本管理工具獲取代碼會更優。
ℹ️具體依賴的安裝根據操做系統和安裝的 Odoo 版本可能會不一樣。若是在上述步驟中存在問題,請參考官方文檔,可切換版本查看其它版本的操做步驟。
Odoo 要使用到 PostgreSQL服務,典型的開發設置是使用安裝 Odoo 的同一臺機器安裝PostgreSQL。下面咱們就來安裝數據庫服務:
最後這條命令爲當前系統用戶建立了一個PostgreSQL用戶,用於 Odoo 實例建立或刪除數據庫時使用。
若是在 WSL內運行 Ubuntu,注意系統服務不會自動啓動。也就是說運行任何須要數據庫鏈接的命令(如createuser或啓動 Odoo 服務)時都要手動開啓PostgreSQL服務,手動啓動PostgreSQL服務執行:sudo service postgresql start。
要運行 Odoo,咱們還須要一些系統包和軟件。獲取版本控制的源碼應安裝 Git,安裝運行 Odoo要求 Python 3.5或以後的版本、Python 3的 pip 以及一些 Python 包的系統依賴:
Odoo 9, 10, and 11版要用到less CSS 預處理器,因此對這些版本須要執行以下安裝:
Odoo 12中無需執行如上命令,但一般咱們也會用到前述版本,若是有此狀況則仍需安裝。
ℹ️Odoo 12中的修改
CSS 預處理器由 less 改爲了 Sass,Sass 編譯器無需進行額外安裝,在 Odoo 12的 Python 依賴中已經安裝了libsass-python。作出這一更改的緣由有:Bootstrap 4由 less 調整爲 Sass,已有 Python綁定和避免對 Node.js(或 Ruby)的依賴。
爲便於管理,咱們將在家目錄下建立一個/odoo-dev目錄做爲工做目錄。在本系列文章中咱們均假設 Odoo 安裝在/odoo-dev目錄下。
Odoo 使用的是 Python 3(3.5或以後的版本),那麼在命令行中咱們將再也不使用python和pip,而是用python3和 pip3。
ℹ️Odoo 11的修改
從版本11開始,Odoo 運行在 Python 3.5及之後的版本上,Odoo 11依然支持 Python 2.7,但 Odoo 12僅能運行在Python 3.5+的環境中。Odoo 10及以前的版本僅可運行在Python 2.7上。
要從源碼安裝 Odoo,咱們首先要從 GitHub 上克隆一套 Odoo 源代碼:
~是用戶家目錄的簡寫,好比/home/alan。
若是使用 WSL Windows 子系統,家目錄存放在一個Windows 系統文件夾中一個不易於發現的地方。避免這一狀況的一個方法是把工做文件放在經常使用的文件夾下,而後在子系統中使用軟連接(相似 Windows中的快捷方式)。好比mkdir /mnt/c/Users/Public/odoo-dev建立C:\Users\Public\odoo-dev工做目錄,而後ln -s /mnt/c/Users/Public/odoo-dev ~/odoo-dev建立~/odoo-dev Linux目錄,其實是 Windows 目錄的連接。如今就可使用~/odoo-dev運行全部的命令,好比前述的 git clone,文件將存放在C:\Users\Public\odoo-dev下。
Git命令中的-b 12.0明確代表要下載 Odoo 12.0分支,在寫本文時,這顯得有些多餘,由於這正是當前默認的分支。–depth=1表示僅下載當前修訂版本,而不是全部歷史修改記錄,這會使下載更快、內容更少。
小貼士:如需在後續下載歷史提交內容,能夠運行git fetch –unshallow
在運行 Odoo 以前,應安裝requirements.txt中所聲明的 Python 依賴:
補充:安裝時如因requirements.txt指定了Babel==2.3.4而報錯,請修改Babel==2.3.4爲Babel或 Babel>=2.3.4後再從新執行以上命令;另內存太小也可能致使不易察覺報錯,測試時1G 內存報錯,調整爲2G 後正常安裝
這其中的不少依賴均可以經過 Debian 包安裝,如python3-lxml,因此使用 apt 包管理器是一個有效的替代方案。這樣的優點是在必要時能夠自動安裝系統依賴,使用的依賴列表能夠在./odoo/debian/control中找到。
還有一些requirements.txt中未包含的 Python 包,亦可安裝來避免警告或用於開啓額外的功能:
小貼士:pip3工具能夠經過好幾種方式安裝:系統包的方式和原生 Python 的方式。若是pip3報了 import error,在系統中從新安裝或能解決問題。對應的命令爲sudo python3 -m pip uninstall pip && sudo apt install python3-pip –reinstall
如今,經過以下命令可啓動 Odoo 實例:
如需中止服務並回到命令行,按下 Ctrl + C。
小貼士:Odoo 10中的修改
如今啓動 Odoo的腳本是./odoo-bin,而以前的 Odoo 版本中爲./odoo.py
默認Odoo 實例監聽8069端口,因此在瀏覽器中訪問http://<server-address>:8069 就能夠訪問到 Odoo 實例。對於開發者來講,咱們會須要使用到多個數據庫,因此在命令行中建立會更爲方便,後面會介紹如何實現。如今在命令行終端中按下Ctrl + C 中止 Odoo 服務並回到命令行。
要按照 Odoo 的數據模式建立和初始化 Odoo 數據庫,咱們應使用-d 參數運行 Odoo 服務:
初始化 testdb 數據庫可能要花上一分鐘,通常會以Modules loaded的 INFO 日誌信息結束。它有可能不是最後一條日誌信息,但在倒數三到四行中能夠找到。此時,服務器就能夠監聽用戶請求了。
ℹ️Odoo 9中的修改
從 Odoo 9開始,若是數據庫不存在會被自動建立。但在 Odoo 8中並不是如此,需使用PostgreSQL命令行中的createdb命令手動建立
默認狀況下,數據庫初始化時會帶有演示數據,做爲開發數據庫這一般頗有用。至關於在前端建立數據庫時勾選了Load demonstration data。如在初始化時無需帶有演示數據,在命令行中添加–without-demo=all。
小貼士:在寫本文時Ubuntu WSL中有一個針對 PostgreSQL 的問題,該環境下沒法新建空數據庫。一個解決方案是手動經過createdb 12-library命令建立空數據庫。這樣會重複提示WARNING: could not flush dirty data: Function not implemented。雖然存在警告信息,但數據庫正常建立了。按下Ctrl + C中止警告,使用命令行便可啓動 Odoo 並初始化數據庫。
當前用戶須要是 PostgreSQL 的超級用戶才能建立新數據庫,前文中在安裝過程當中已經進行相關操做。
小貼士:對於開發環境,使用數據庫超級用戶來運行 Odoo 實例毫無問題。但在生產環境中,Odoo最佳安全實踐推薦不要使用數據庫超級用戶權限的用戶來運行生產實例。
Odoo 實例已經運行起來了,如今咱們能夠經過http://<server-name>:8069在瀏覽器中進行訪問。這時會出現登陸界面,若是不知道主機名能夠經過 hostname 命令查看或經過 ifconfig 查看 IP 地址。默認管理員的用戶名和密碼均爲 admin。登陸後便可看到 Apps菜單,及可安裝的應用。
在命令終端中按下Ctrl + C能夠中止 Odoo 服務實例並回到命令行。按下上方向鍵能夠回到上一條命令,這樣能夠經過一樣的命令再次快速啓動 Odoo。
前面咱們學習瞭如何經過命令行建立和初始化 Odoo 數據庫。管理數據庫還有更多的命令值得咱們學習。雖然 Odoo 服務能夠自動地進行數據庫管理,咱們仍是可使用以下命令來手動建立 PostgreSQL 數據庫:
更有趣的是,Odoo 能夠經過–template 參數拷貝已有數據庫來建立新的數據庫。要進行這一操做,被拷貝的數據庫不能被鏈接,因此要確保 Odoo 實例已中止而且沒有其它應用鏈接該數據庫。命令以下:
事實上,每當建立數據庫時都會使用一個模板,若是沒有指定模板,會使用一個名爲 template1的預設模板。
要在系統中列出已有數據庫,須要使用 PostgreSQL 的 psql 工具及-l 參數:
執行上述命令會列出咱們截至目前所建立的數據庫。若是執行了前述操做,能夠看到列表中有MyDB和MyDB2。列表中還會顯示 每一個數據庫所使用的編碼,默認爲UTF-8,這也是 Odoo 所須要的數據庫編碼。
如需刪除數據庫,執行dropdb命令:
如今咱們已學習了數據庫的基本知識。要了解更多 PostgreSQL請參見官方文檔或PostgreSQL使用匯總。
警告:dropdb操做是不可撤銷的,在對重要數據庫執行該命令時請務必備份數據庫
Odoo 服務還支持一些其它參數,可經過–help 來查看更多參數:
咱們在下面的部分將會學習一些重要參數,首先咱們先學習下如何把當前使用參數保存到配置文件中。
大多數的參數均可以保存到配置文件中。默認 Odoo 使用.odoorc文件。Linux 系統中缺省的路徑是在家目錄($HOME)中,而在 Windows 中則和運行 Odoo 的可執行文件放在同一個目錄中。
ℹ️在老版本的 Odoo/OpenERP 中,默認的配置文件爲.openerp-serverrc,爲保持向後兼容,存在該文件且沒有.odoorc文件的狀況下會使用該文件。
一個全新安裝中不會自動建立.odoorc配置文件,咱們應使用–save參數來保存,若是配置文件不存在則會建立默認配置文件:
此處咱們還使用–stop-after-init參數以在執行結束後中止服務。這一參數常在運行測試或要求運行模塊升級來檢測是否正確安裝時使用。
小貼士:命令行參數能夠縮短到保持不混淆的程度,如–stop-after-init可縮寫爲–stop。
如今能夠經過以下命令來查看缺省配置文件:
以上命令會顯示全部配置項及配認值,編輯文件後在下一次啓動 Odoo 實例後生效,輸入 q 回到命令行。
咱們還可使用–conf(或-c)參數來指定配置文件。配置文件無需包含全部配置項,僅包含需修改默認值的配置項便可。
–http-port=(或-p)參數能夠修改實例的監聽端口(默認端口8069),不一樣的端口可讓咱們在同一臺機器上運行多個實例。
Odoo 11的修改:在 Odoo 11中引入–http-port參數以替代此前版本使用的–xmlrpc-port
下面就能夠作個嘗試,打開兩個終端,第一個中輸入
第二個中輸入
此時就在同一臺機器上使用不一樣端口運行了兩個 Odoo 實例,這兩個實例可使用同一個數據庫或不一樣數據庫。這取決於咱們使用的配置參數,而且兩個端口上也能夠運行相同或不一樣版本的 Odoo。
小貼士:不一樣 Odoo 版本必須使用不一樣的數據庫。嘗試在不一樣版本上使用相同數據庫將沒法正常運行,由於各大版本採用了不兼容的數據庫模式。
進行 Odoo 開發時,常常會使用多個數據庫,有時還會用到不一樣版本。在同一端口上中止、啓動不一樣服務實例,或在不一樣數據庫間切換,會致使網頁客戶端會話異常。由於瀏覽器會存儲會話的 Cookie。
在瀏覽器中使用私有模式訪問實例能夠避免這一問題。另外一優良實踐是在服務實例上開啓數據庫過濾器,這樣能夠確保實例僅容許對指定數據庫的請求,而忽略其它請求。
Odoo 11中的修改:
從Odoo 11開始,–database(或-d)參數可接收逗號分隔的多個數據庫名,設置–database參數時也會自動設置–db-filter參數,這樣僅有這個數據庫才能爲服務實例使用。對於 Odoo 11以前的版本,咱們須要使用–db-filter來限制可訪問的數據庫。
–db-filter可限制 Odoo 實例所能使用的數據庫。它接收一個正則表達式來過濾可用數據庫名,要精確匹配一個名稱,表達式須要以^開頭並以$結束。例如,僅容許testdb數據庫,咱們可使用以下命令:
使用–database和–db-filter參數來匹配同一數據庫是一個良好的實踐。事實上從 Odoo 11開始默認會爲–database設置對應的–db-filter。
–log-level 參數可用於設置日誌級別,這有助於瞭解服務的情況。例如要開始調試日誌級別,使用–log-level=debug參數。還有以下選項:
其實–log-level是設置Odoo 日誌級別的簡化方式,此外經過更完整的–log-handler參數能夠有選擇地打開/關閉日誌記錄器。默認狀況下日誌會做爲標準輸出(打印到屏幕),可是能夠經過logfile=參數來指定日誌存儲文件。
在 Odoo 實例中產生新的模塊並安裝,對於初學者總會容易搞不清。下面一塊兒來熟悉這一點。
網絡上有不少 Odoo 模塊,Odoo應用商店能夠下載一系列模塊安裝到系統中。另外一個重要的資源是Odoo 社區聯盟(OCA – Odoo Community Association)維護的模塊,可在 GitHub 上查找。OCA 是一個協調社區貢獻的非營利組織,它同時提高軟件質量,推廣最佳開發實踐和開源價值觀。可經過https://odoo-community.org/來進一步瞭解 OCA。
爲 Odoo 添加模塊,僅需將其拷貝到官方插件的 addons 文件夾中便可,按前述安裝即爲~/odoo-dev/odoo/addons/。但這不是一個好的實踐,咱們安裝的 Odoo 是由 Git 版本控制的代碼倉庫,將會與上游 GitHub 倉庫保持同步,在其中加入外部插件會不利於管理。
避免這一點,咱們能夠選取一個或多個存放模塊的目錄,讓 Odoo 服務也會從該目錄中查找模塊來使用。咱們不只能夠把自定義模塊放在一個不一樣的目錄下不與官方的混在一塊兒,還能夠經過不一樣目錄組織這些模塊。
咱們能夠經過下載系統課程的代碼來準備供 Odoo 安裝的插件模塊,獲取 GitHub 上的源碼,執行以下命令:
此時與/odoo同級的/library文件夾中將包含一些模塊,如今就需告知 Odoo 這個新的模塊目錄。
Odoo 服務有一個addons_path參數可設置查找插件的路徑,默認指向Odoo 服務所運行處的/addons文件夾。咱們能夠指定多個插件目錄,這樣就能夠把自定義模塊放到另外一個目錄下,無需與官方插件混到一塊兒。
經過以下命令可包含新的模塊路徑來運行服務:
仔細看服務日誌,會發現有一行報告插件路徑,信息相似INFO ? odoo: addons paths: […],確認下里面是否有library/目錄。
維護多個 Odoo 版本的代碼在 Odoo 開發中很常見,須要整理一下來保持項目在同一臺開發機器上並行。改變版本有時會須要上下文的切換。好比,如今 Odoo 的啓動執行文件是odoo-bin,而在老版本中是odoo.py。遷移到 Python 3後又更易混淆了,咱們要知道是選擇python/pip仍是python3/pip3,這取決於使用的 Odoo 版本。
Python 有一個在同機器上管理獨立環境的工具virtualenv。每一個環境有本身的Python 可執行文件和庫文件,僅需在使用時激活環境,而後python和 pip 無需指定就能夠在相應的安裝了 Python庫的環境下運行。要在Debian/Ubuntu上使用virtualenv,執行以下命令:
若是咱們使用的工做目錄是~/odoo-dev,並把 Odoo 12源代碼克隆到~/odoo-dev/odoo目錄中,咱們能夠這樣進行虛擬環境的建立:
一旦激活了虛擬環境,咱們能夠在其中安裝 Odoo,能夠經過 pip 來進行操做:
以上代碼會將~/odoo-dev/odoo中的 Odoo源代碼安裝到虛擬環境中。-e 參數很是重要,這是一個可編輯安裝。它不會複製一份代碼到虛擬環境中,僅僅只是保留了一個到原地址 Odoo 代碼的引用。由於使用到了源代碼,源代碼的修改在當前環境中也一樣生效。
Odoo 的 Python 依賴會被自動安裝,因此無需使用requirements.txt來進行手動安裝。咱們也能夠經過 pip 來安裝其它所需的 Python 庫:
注意咱們無需記住使用的是 Python 2仍是 Python 3,這裏的pip 命令會指向正確的版本。而後就能夠運行 Odoo 了,pip 安裝建立了一個bin/odoo命令,可在任何位置運行,無需涉及源代碼所在目錄。
小貼士:若是決定使用虛擬環境,任何要使用odoo-bin運行的命令,均可以替換爲 odoo
如下命令會啓動並關閉所安裝版本 Odoo,打印一些日誌信息用於肯定 Odoo 版本和使用的插件:
推薦的操做是將配置文件放在虛擬環境文件夾中。如下會爲咱們的項目初始化一個12-library 數據庫,並建立一個對應的12-library.conf 文件:
自此開始,咱們可經過以下命令啓動圖書項目 Odoo 服務:
最後在完成後,經過以下命令來退出環境:
假設咱們要在同一臺機器上使用 Odoo 10項目,它使用的是 Python 2.7,經過以下命令建立環境、安裝 Odoo:
要使得在 Odoo 版本間切換更容易,咱們能夠在~/odoo-dev/odoo10目錄下再爲10.0分支克隆一份源代碼。而後建立虛擬環境,激活環境,使用 pip建立一個 Odoo 10可編輯安裝。virtualenv沒有使用-p 參數指定 Python 版本,默認爲 Python 2,也就是 Odoo 10所需的版本。
若是系統中沒有 Python 2,Ubuntu 18.04默認就不帶 Python 2,則須要執行以下命令來進行安裝:
社區貢獻的插件能夠打包成 Python 庫,發佈到 Python 包索引(PyPI -Python Package Index),而後像其它庫同樣使用 pip 安裝。爲了能使用這一方法,Odoo 自動添加了site-packages/文件夾至插件配置路徑,用於安裝庫文件。打包能夠經過setuptools-odoo工具。
OCA 項目使用該工具打包併發布插件至 PyPI。因不一樣 Odoo 版本中存在相同模塊,模塊名以前會加一個 Odoo 版本前綴。例如odoo12-addon-partner-fax 是Odoo 12的partner_fax PyPI 包,它爲 partner 添加了一個傳真字段。
如需從 PyPI 下載該模塊及依賴,並隨後安裝至odoo12env環境,使用以下命令:
爲便於開發者,Odoo 有一個–dev=all參數可激活一些開發者友好的功能。
Odoo 10中的修改:
–dev=…參數是在 Odoo 10中引入的,它取代了此前版本中更簡單、功能也更少的–debug參數
這啓用了一些有用的功能可加快開發流程,最重要的以下:
–dev=all將在拋出異常時啓動 Python調試器(pdb),在服務報錯後作後驗(postmortem)分析很是有益。注意這一設置對日誌輸出不產生任何影響。有關 Python 調試器命令詳情可參見Python 官方文檔。
雖然 all 值適用於大多數狀況,–dev還可接一串逗號分隔的選項。缺省狀況下會使用Python 調試器 pdb。有些人會傾向安裝、使用其它調試器,來改善功能和易用性。Odoo 是容許咱們指定調試器的,經常使用的有ipdb和pudb。在本系列第八篇Odoo 12開發之業務邏輯 – 業務流程的支持中,咱們將介紹如何在 Odoo 開發中使用調試器。
要自動偵測代碼文件的變化 ,服務開發者模式需安裝一個額外的依賴python3-watchdog。咱們須要在Ubuntu/Debian系統中安裝它以後纔可以使用,命令以下:
對於 Odoo 11以前的版本,使用的是 Python 2,則需安裝python-watchdog。一樣可以使用 pip 安裝,命令爲pip install watchdog。
在本文中,如們學習瞭如何在 Ubuntu 系統中安裝 Odoo 並從 GitHub 上獲取 Odoo源碼,以及如何建立Odoo 數據庫和運行 Odoo 實例。
如今咱們的 Odoo 環境可正經常使用於開發,而且也能夠對數據庫和實例進行管理。有了這些,咱們能夠進行一步的學習了。在下一篇文章中,咱們將從零開始建立第一個 Odoo 模塊,並理解相關的主要元素。