通過源碼安裝 Odoo
安裝依賴
使用Debian發(fā)行版時,默認登錄用戶為帶有管理員權(quán)限的 root,這時命令行顯示的為#。在Ubuntu系統(tǒng)中,禁用了 root 賬號,在安裝時配置的初始用戶可通過 sudo 來運行 root 權(quán)限的命令。首先我們應(yīng)更新包索引,然后執(zhí)行升級來確保所有安裝的程序是最新的,命令如下:
sudo apt update
sudo apt upgrade -y
下一步,我們將安裝PostgreSQL數(shù)據(jù)庫,并讓當(dāng)前用戶成為數(shù)據(jù)庫超級用戶,命令如下:
sudo apt install postgresql -y
sudo su -c "createuser -s $USER" postgres
我們將通過源碼運行 Odoo,但在那之前,我們需要安裝所需依賴。以下是所需的Debian包:
sudo apt-get install git python3-dev python3-pip -y
sudo apt install build-essential libxslt-dev libzip-dev libldap2-dev libsasl2-dev libssl-dev -y
還應(yīng)記得安裝打印報表所需的wkhtmltox,命令如下:
sudo apt-get install wkhtmltopdf
在 Odoo 的requirements.txt文件中。我們可以使用如下命令安裝這些包:
wget https://raw.githubusercontent.com/odoo/odoo/12.0/requirements.txt
sudo -H pip3 install -r requirements.txt
既然我們有了所有的依賴,安裝了數(shù)據(jù)庫服務(wù)、系統(tǒng)包和 Python 包,我們就可以安裝 Odoo 了。
準(zhǔn)備獨立的系統(tǒng)用戶
從安全角度建議使用獨立的用戶運行 Odoo,這一用戶不帶有任何系統(tǒng)的特權(quán)。為此我們需要創(chuàng)建系統(tǒng)和數(shù)據(jù)庫用戶,使用命令如下:
sudo adduser --disabled-password --gecos "Odoo" odoo
sudo su -c "createuser odoo" postgres
createdb --owner=odoo odoo-prod
以上odoo 為用戶名,odoo-prod用于運行 Odoo 實例的數(shù)據(jù)庫名。odoo用戶成為了odoo-prod數(shù)據(jù)庫的所有者。也就說它對該數(shù)據(jù)庫有創(chuàng)建和刪除的權(quán)限,包括刪除整個數(shù)據(jù)庫的權(quán)限。如果你運行的是多租戶服務(wù)器,應(yīng)為每個租戶創(chuàng)建一個類似 odoo 的指定系統(tǒng)用戶。
小貼士:Odoo的設(shè)計即使在系統(tǒng)用戶不是數(shù)據(jù)庫所有者時也可以正確運行。但這可能會讓設(shè)置變復(fù)雜,并且固化安全的好習(xí)慣是有一個主系統(tǒng)用戶作為數(shù)據(jù)庫的所有者、為每個實例創(chuàng)建一個指定的不帶有超級用戶權(quán)限的系統(tǒng)用戶來運行服務(wù)。
注意這些是沒有管理權(quán)限的普通用戶,新建系統(tǒng)用戶時會自動創(chuàng)建一個家目錄。比如/home/odoo,用戶可通過~快捷符號來表示自己的家目錄。我們在用戶 Odoo 對應(yīng)的配置和文件中會使用到它。我們可以使用如下命令來以該用戶打開一個會話:
sudo su odoo
exit
exit命令終止會話并回到原用戶。
源碼安裝
要不了多久,你的服務(wù)就會需要升級、打補丁。這時版本控制倉庫會很有幫助。我們使用 git來從倉庫中獲取代碼,就像我們在安裝開發(fā)環(huán)境時的操作一樣。下面我將使用 odoo 用戶并將代碼下載家目錄中:
sudo su odoo
git clone https://github.com/odoo/odoo.git /home/odoo/odoo-12 -b 12.0 --depth=1
-b選項確保獲取的是正確的分支,–depth=1選項會忽略修改歷史并僅獲取最新修訂的代碼,這樣下載內(nèi)容更精簡,速度也更快。
小貼士:git在管理 Odoo 部署版本時是一個非常有價值的工具。注意本系列文章中僅僅涉及到代碼版本管理的冰山一角。想要更加熟悉 git,值得花時間進一步學(xué)習(xí),可從http://git-scm.com/doc開始。
到此為止,我們應(yīng)該已經(jīng)擁有源碼安裝 Odoo 的所有內(nèi)容??赏ㄟ^如下命令以指定用戶會話檢查是否正確啟動并退出:
$ /home/odoo/odoo-12/odoo-bin --version
Odoo Server 12.0
$ exit
下面我們將設(shè)置一些在系統(tǒng)中使用的系統(tǒng)級別的文件和目錄。
設(shè)置配置文件
在啟動 Odoo 服務(wù)時添加–save參數(shù)會將配置保存到~/.odoorc文件中。我們將以這個文件作為服務(wù)配置的初始文件,將其保存到/etc/odoo下,使用命令如下:
sudo su -c "~/odoo-12/odoo-bin -d odoo-prod --db-filter='^odoo-prod$' --without-demo=all -i base --save --stop-after-init" odoo
這行命令中也會包含服務(wù)實例所使用的配置參數(shù)。
小貼士:老版本中的.openerp_serverrc配置文件還被支持,找到后會進行使用。如果安裝 Odoo 10或之后版本的服務(wù)器上同時還安裝了老版本的 Odoo,可能會引起混淆。這時你會發(fā)現(xiàn)–save選項沒有更新.odoorc,而是更新了.openerp_serverrc文件。
下一步我們需要將配置文件放到系統(tǒng)的配置文件目錄/etc 下,命令如下:
sudo mkdir /etc/odoo
sudo cp /home/odoo/.odoorc /etc/odoo/odoo.conf
sudo chown -R odoo /etc/odoo
sudo chmod u=r,g=rw,o=r /etc/odoo/odoo.conf # 安全加固使用
以上命令最后一行是可選的,但它提升了系統(tǒng)的安全性。它確保運行 Odoo 進程的用戶可以讀取但無法修改配置文件。這時你將無法修改數(shù)據(jù)庫主密碼,但在生產(chǎn)服務(wù)下這不是什么問題,因為應(yīng)使用list_db=False服務(wù)配置來禁用網(wǎng)頁數(shù)據(jù)庫管理員。我們還需為 Odoo 服務(wù)創(chuàng)建一個存儲日志文件的目錄。這通常放在/var/log目錄下,命令如下:
sudo mkdir /var/log/odoo
sudo chown odoo /var/log/odoo
現(xiàn)在讓我們通過如下命令編輯配置文件并確保已配置了一些重要參數(shù):
sudo nano /etc/odoo/odoo.conf
以下是大部分重要參數(shù)的推薦值:
[options]addons_path = /home/odoo/odoo-12/odoo/addons,/home/odoo/odoo-12/addons
admin_passwd = False
db_name = odoo-prod
dbfilter = ^odoo-prod$
http_port = 8069
list_db = False
logfile = /var/log/odoo/odoo-server.log
proxy_mode = True
without_demo = all
workers = 6
下面逐一講解:
-
addons_path是一組逗號分隔的用于查找插件模塊的路徑。讀取順序為從左到右,最左邊目錄的優(yōu)先級最高。 -
admin_passwd是訪問網(wǎng)頁客戶端數(shù)據(jù)庫管理功能的主密碼。一定要設(shè)置復(fù)雜的密碼,或者最好是設(shè)為 False來關(guān)閉這一功能。 -
db_name是在服務(wù)啟動時初始化的數(shù)據(jù)庫實例。 -
dbfilter用于過濾可訪問的數(shù)據(jù)庫,它是一個 Python 解釋的正則表達式。為使用戶無需彈出窗口選擇數(shù)據(jù)庫,并使未經(jīng)身份驗證的 URL 可正常運作,應(yīng)設(shè)置為^dbname。它支持%h和%d占位符,由 HTTP 請求主機名和子域名進行替換。
-
http_port是服務(wù)器監(jiān)聽的端口號,默認使用的是8069 -
list_db = False在 RPC級別和 UI 上屏蔽數(shù)據(jù)庫列表,并屏蔽數(shù)據(jù)庫管理界面以及相應(yīng)的 RPC 功能。 -
logfile是服務(wù)日志寫入的位置。對于系統(tǒng)服務(wù),一般位于/var/log文件夾內(nèi)。如果留空,日志會轉(zhuǎn)而在標(biāo)準(zhǔn)輸出中打印。 -
proxy_mode在需要反向代理訪問時應(yīng)設(shè)為True,我們需要用到反向代理。 -
without_demo在生產(chǎn)環(huán)境中應(yīng)進行設(shè)置,這樣新建的數(shù)據(jù)庫中不會帶有演示數(shù)據(jù)。 -
workers的值在大于等于2時啟用多進程,一會兒我們會進一步的討論。
??Odoo 10中引入
http_port參數(shù)來替代老版本中使用但現(xiàn)在已淘汰了的xmlrpc_port參數(shù)。
從安全角度看,admin_passwd=False和list_db=False選項尤為重要。它們屏蔽掉對數(shù)據(jù)庫管理功能的網(wǎng)頁端訪問,在生產(chǎn)環(huán)境和面向外網(wǎng)的 Odoo 服務(wù)中都應(yīng)進行設(shè)置。
以下也是會用到的參數(shù):
-
data_dir是會話數(shù)據(jù)和附件存儲的路徑,記住將備份放在這里 -
http_interface設(shè)置監(jiān)聽的地址。默認監(jiān)聽0.0.0.0,但在使用反向代理時應(yīng)設(shè)置為127.0.0.1來僅響應(yīng)本地請求。Odoo 11中引入它來代替淘汰了的xmlrpc_interface參數(shù)。
我們可通過-c或–config選項來檢查運行服務(wù)的設(shè)置:
sudo su -c "~/odoo-12/odoo-bin -c /etc/odoo/odoo.conf" odoo
通過上述設(shè)置運行 Odoo 不會在終端中有任何輸出,因為修改都寫到了配置文件中定義的日志文件中了。要追蹤服務(wù)的操作,我們需要在終端中運行如下命令:
sudo tail -f /var/log/odoo/odoo-server.log
Odoo 12開發(fā)之部署和維護生產(chǎn)實例
有時可能會需要將日志輸出到標(biāo)準(zhǔn)輸出中,最好的方法是復(fù)制一份不帶logfile選項的配置文件。
小貼士:要在同一個終端窗口中運行多個終端會話,可以使用tmux這樣的應(yīng)用或者GNU Screen。可以使用Byobu,它基于GNU Screen或Tmux提供了好看的用戶界面。
多進程工作進程
生產(chǎn)實例可能會處理大量的工作負載。默認服務(wù)運行單進程并只能使用CPU 的一個核心來處理請求,這是因為Python語言的全局解釋器鎖(GIL)。但是可使用多進程模式來處理并發(fā)請求,來充分利用多核的優(yōu)勢。workers=N選項設(shè)置使用的工作進程數(shù),作為一個參照,可設(shè)置為1+2*P,其中 P為處理器的核數(shù)。最佳設(shè)置需要根據(jù)具體情況進行調(diào)優(yōu),因為這取決于服務(wù)器的負載以及多少其它像PostgreSQL這樣大負載服務(wù)在運行。
為負載將workers設(shè)置高比低好,最低值應(yīng)為6,因為這是大多數(shù)瀏覽器的并行連接數(shù),最大值通常受服務(wù)器的 RAM 所限。普通使用模式的經(jīng)驗是,Odoo服務(wù)應(yīng)能處理(1+2P)6個并發(fā)用戶。
還有一些limit-配置參數(shù)可用于調(diào)優(yōu)工作進程。在達到這些值時工作進程會被回收,相應(yīng)的進程會停止并啟動一個新進程。這可以防止服務(wù)器內(nèi)存溢出以及防止某一進程過度使用服務(wù)器資源。
官方文檔中對工作進程參數(shù)調(diào)優(yōu)也給出了一些很好的建議,欲知詳情,請參照官方文檔Odoo 部署。
設(shè)置 Odoo 為系統(tǒng)服務(wù)
現(xiàn)在我們需要將 Odoo 設(shè)為系統(tǒng)服務(wù),并在系統(tǒng)啟動時自動開啟。
在Ubuntu或Debian中,init程序負責(zé)服務(wù)的啟動。Debian或其分支操作系統(tǒng)曾使用過sysvinit,Ubuntu曾使用過兼容的名為Upstart的啟動程序。但最近都進行了修改,最新的Debian和Ubuntu發(fā)行版的init程序都使用了systemd。這表示現(xiàn)在有兩種方式來安裝系統(tǒng)服務(wù),你需要根據(jù)操作系統(tǒng)的版本來選擇正確的方法。Ubuntu 16.04或之后的版本中應(yīng)使用systemd,但是很多云服務(wù)商還在使用更早的版本,所以很有可能你也會使用到這些老版本。要檢查系統(tǒng)中是否使用systemd,可使用如下命令:
man init
這條命令會打印當(dāng)前使用的 init 程序的文檔,然后就可以查看所使用的啟動服務(wù)。
??Window的子系統(tǒng)(WSL) 中的 Ubuntu環(huán)境僅適用于開發(fā),它有可能發(fā)生些異常問題,完全不適合用于運行生產(chǎn)環(huán)境。在寫本文時,man init顯示啟動服務(wù)為systemd,但并不能安裝systemd服務(wù),反而安裝sysvinit服務(wù)時是正常的。
補充:如出現(xiàn)-bash: man: command not found,則通過sudo apt install man -y來執(zhí)行安裝
創(chuàng)建systemd服務(wù)
如果你使用的是較近的操作系統(tǒng),如Debian 8或Ubuntu 16.04,你的啟動服務(wù)就應(yīng)該是systemd。要在系統(tǒng)中添加服務(wù),只需創(chuàng)建一個描述服務(wù)的文件。我們創(chuàng)建/lib/systemd/system/odoo.service文件并加入如下內(nèi)容:
[Unit]
Description=Odoo
After=postgresql.service
[Service]
Type=simple
User=odoo
Group=odoo
ExecStart=/home/odoo/odoo-12/odoo-bin -c /etc/odoo/odoo.conf
[Install]
WantedBy=multi-user.target
小貼士:Odoo源碼中在debian/下包含一個odoo.service文件示例。你可以不用新建方件,直接把拷貝該文件然后進行所需修改。至少需要根據(jù)設(shè)置來修改ExecStart選項。
下一步我們需要使用如下命令來注冊這個新服務(wù):
sudo systemctl enable odoo.service
使用如下命令啟動該服務(wù):
sudo systemctl start odoo
使用如下命令檢查該服務(wù)狀態(tài):
sudo systemctl status odoo
Odoo 12開發(fā)之部署和維護生產(chǎn)實例
最后,如需停止服務(wù),請使用如下命令:
sudo systemctl stop odoo
使用命令行檢查 Odoo 服務(wù)
現(xiàn)在我們可以確定Odoo實例是否運行以及是否能正常對請求進行響應(yīng)。如果Odoo正常運行,我們應(yīng)該可以得到響應(yīng)并且日志文件中不會報錯。在服務(wù)器上通過如下命令可檢測 Odoo 是否對HTTP請求進行響應(yīng):
curl http://localhost:8069
<html><head><script>window.location = '/web' + location.hash;</script></head></html>
此外通過如下命令可查看日志文件的內(nèi)容:
sudo less /var/log/odoo/odoo-server.log
你還可以使用tail -f 來實時查看日志文件中新增的內(nèi)容:
sudo tail -f /var/log/odoo/odoo-server.log
設(shè)置 Nginx 反向代理
雖然 Odoo 自身可以輸出網(wǎng)頁,但強烈建議在其上加一層反向代理。反向代理作為一個中間層來管理客戶端所發(fā)送請求以及 Odoo 服務(wù)作出響應(yīng)之間的數(shù)據(jù)流。使用反向代理有諸多好處。
從安全角度考慮,有以下幾點:
-
處理并加固HTTPS協(xié)議來對數(shù)據(jù)流加密
-
隱藏內(nèi)部網(wǎng)絡(luò)特征
-
作為應(yīng)用防火墻,限制所接受處理的 URL
然后從性能角度考慮,反向代理可提供如下顯著的改進:
-
緩存靜態(tài)內(nèi)容,因而降低 Odoo 服務(wù)器的負載
-
壓縮內(nèi)容來加快加載時間
-
作為負載均衡器,在多臺服務(wù)間分配負載
Apache是在考慮反向代理時的一個常用選擇,Nginx 是近期在技術(shù)圈被熱議的對其的替代。此處我們使用Nginx作為反向代理,并展示如何使用它來實現(xiàn)上述討論的安全和性能方面的功能。
首先,我們應(yīng)當(dāng)安裝Nginx,我們需要它監(jiān)聽默認的HTTP端口,所以需要確保沒有被其它服務(wù)所占用。執(zhí)行如下命令應(yīng)該會報錯:
$ curl http://localhost
curl: (7) Failed to connect to localhost port 80: Connection refused
如果沒有收到錯誤,應(yīng)當(dāng)禁用相應(yīng)服務(wù)來讓Nginx使用該端口。例如,關(guān)閉已有的Apache服務(wù),使用sudo service apache2 stop。更好的選擇是從服務(wù)器上刪除該服務(wù)或重新配置讓其監(jiān)聽其它端口,這樣Nginx就可以正常使用HTTP和HTTPS端口(80 and 443) 了。
一旦完成上述操作,就可以安裝Nginx了:
sudo apt-get install nginx -y
sudo service nginx start # 如尚未啟動,啟動Nginx服務(wù)
curl http://localhost要確定Nginx是否正確運行,通過瀏覽器訪問或在服務(wù)上執(zhí)行curl http://localhost應(yīng)該可以得到一個Welcome to nginx頁面。
Odoo 12開發(fā)之部署和維護生產(chǎn)實例
Nginx配置文件和Apache的方式基本相同,存儲在/etc/nginx/available-sites/中,并可通過在/etc/nginx/enabled-sites/中添加軟鏈接來激活。注意應(yīng)同時關(guān)閉Nginx安裝時默認帶有的配置:
sudo rm /etc/nginx/sites-enabled/default
sudo touch /etc/nginx/sites-available/odoo
sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/odoo
使用nano或vi等編輯器來編輯 Nginx配置文件:
sudo nano /etc/nginx/sites-available/odoo
一個基本的針對Odoo服務(wù)的Nginx配置文件如下例所示:
upstream odoo {
server 127.0.0.1:8069;
}
upstream odoochat {
server 127.0.0.1:8072;
}
server {
listen 80;
# Add Headers for odoo proxy mode
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
# log
access_log /var/log/nginx/odoo.access.log;
error_log /var/log/nginx/odoo.error.log;
# Redirect longpoll requests to odoo longpolling port
location /longpolling {
proxy_pass http://odoochat;
}
# Redirect requests to odoo backend server
location / {
proxy_redirect off;
proxy_pass http://odoo;
}
# common gzip
gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
gzip on;
}
補充:添加域名請在server 配置區(qū)內(nèi)添加對 server_name 的配置
首先為Odoo服務(wù)添加了upstream配置,監(jiān)聽了默認端口8069和8072。8069用于網(wǎng)頁客戶端和RPC請求,8072用于多進程時 Odoo 實時消息所需的長輪詢(long polling)請求。
Nginx應(yīng)在默認HTTP端口80上接收訪問流量,然后重定向到upstream odoo服務(wù)中。這在server配置區(qū)中進行了定義。/longpolling 地址的訪問流量會傳遞到upstream odoochat,剩余的流量則傳遞到upstream odoo。這里我們還添加了一些請求頭的信息,這樣 Odoo 后臺服務(wù)就會知道這些是經(jīng)過代理的流量。
出于安全考慮,應(yīng)確保proxy_mode參數(shù)設(shè)為True。這是因為在Nginx作為代理時,所有的請求都會認為是來自本地而不是遠程 IP 地址。在代理中設(shè)置X-ForwardedFor頭以及啟動–proxy-mode可解決這一問題。但是,如果不在代理級別強制header就啟用–proxy-mode 會讓其他人可以偽裝遠程地址。
在配置文件的最后,可以看到兩條gzip相關(guān)的命令,它們用于對一些文件進行壓縮,提升性能??赏ㄟ^如下命令測試配置是否正確:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
如果出現(xiàn)錯誤,請檢查配置文件中輸入是否正確。常見的問題是默認的HTTP被其它服務(wù)所占用,如Apache或默認的Nginx網(wǎng)站,所以在重啟Nginx服務(wù)前先通過本文中的命令確保并沒有這種問題。在完成處理后,可使用如下命令重新加載新的配置:
sudo /etc/init.d/nginx reload
如果操作系統(tǒng)使用的是systemd,上述命令正確的版本應(yīng)該是:
sudo systemctl reload nginx
通過如下命令可確認 Nginx 是否將訪問流量重定向到了后臺Odoo服務(wù)中:
$ curl http://localhost
<html><head><script>window.location = '/web' + location.hash;</script></head></html>
Odoo 12開發(fā)之部署和維護生產(chǎn)實例
緩存靜態(tài)內(nèi)容
我們可以配置 Nginx 來緩存服務(wù)端靜態(tài)文件,這樣再次請求時就可以訪問Nginx 中的緩存,而無需將請求傳遞到upstream odoo服務(wù)中。啟用靜態(tài)內(nèi)容緩存可帶來更快的響應(yīng)時間并減少 Odoo 服務(wù)的工作負載。要啟用這一設(shè)置,在location /longpolling區(qū)之前加入如下代碼:
# cache static data
location ~* /web/static/ {
proxy_cache_valid 200 60m;
proxy_buffering on;
expires 864000;
proxy_pass http://odoo;
}
通過這一些命令,靜態(tài)數(shù)據(jù)就可以緩存60分鐘了。在這個期間的其它請求Nginx 會直接使用緩存進行響應(yīng)。
服務(wù)和模塊更新
一旦 Odoo 服務(wù)運行了一段時間,就會需要對其進行升級。這包括兩個步驟:獲取服務(wù)或模塊的新版本、執(zhí)行安裝。
創(chuàng)建分階環(huán)境
如果你按照通過源碼安裝 Odoo一節(jié)正確地進行了安裝,應(yīng)該就可以在暫存區(qū)倉庫中獲取并測試新版本源碼。強烈建議創(chuàng)建一個生產(chǎn)環(huán)境數(shù)據(jù)庫的拷貝,并使用它進行升級測試。如果odoo-prod是我們的生產(chǎn)環(huán)境數(shù)據(jù)庫,可通過如下命令創(chuàng)建一個拷貝odoo-stage:
dropdb odoo-stage
createdb --owner=odoo odoo-stage
pg_dump odoo-prod | psql -d odoo-stage
sudo su odoo
cd ~/.local/share/Odoo/filestore/
cp -al odoo-prod odoo-stage # create filestore hardlinks
exit
在使用以上數(shù)據(jù)庫拷貝之前,應(yīng)進行清理,比如停止計劃動作、關(guān)閉 email 服務(wù)(包含發(fā)送和接收消息)。根據(jù)你的設(shè)置來執(zhí)行這些指定步驟,但通常可使用自動化腳本來執(zhí)行。記住psql可用于在命令行直接執(zhí)行SQL命令,如psql -d odoo-stage -c “<SQL命令>”。
小貼士:可通過createdb命令來更快地創(chuàng)建拷貝:createdb –owner=odoo –template=odoo-prod odoo-stage。但需要說明的是要運行該命令,不能有任何對odoo-prod數(shù)據(jù)庫的連接,因此需要停止Odoo生產(chǎn)環(huán)境的服務(wù)。
更新 Odoo 源碼
我們使用git pull 命令來從GitHub倉庫獲取最新的Odoo源碼。在那之前,我們可以使用git tag命令來為當(dāng)前使用的提交創(chuàng)建一個標(biāo)簽,這樣可以可容易的對更新進行撤銷,命令如下:
sudo su odoo
cd ~/odoo-12
git tag --force 12-last-prod
git pull
要讓代碼修改生效,我們需要重啟Odoo服務(wù)。而要使用數(shù)據(jù)文件的修改生效,需要對模塊進行升級。通常對Odoo穩(wěn)定版本的修改都是代碼的修復(fù),因此無需冒險執(zhí)行模塊升級。如果需要對模塊升級,可使用-u <module>附加參數(shù),或者是-u base,它將升級所有模塊。
現(xiàn)在可以啟動Odoo的分階服務(wù)了,它將使用在分階數(shù)據(jù)庫上使用升級代碼:
~/odoo-12/odoo-bin -d odoo-stage --http-port=8080 -c /etc/odoo/odoo.conf # optionally
add: -u baseexit
Odoo 分階服務(wù)通過在8080端口上進行配置??赏ㄟ^瀏覽器訪問http://xxx:8080來檢查升級代碼是否正確運作。如果出現(xiàn)了錯誤,可通過如下命令來返回上一個版本:
sudo su odoo
cd ~/odoo-12
git checkout 12-last-prod
exit
如果一切運行都如預(yù)期,則可安全地執(zhí)行生產(chǎn)環(huán)境服務(wù)的升級,通常是通過重啟來實現(xiàn)。如果想要執(zhí)行實際的模塊升級,建議的方法是停止服務(wù)、運行升級、再重啟服務(wù),命令如下:
sudo service odoo stop
sudo su -c "~/odoo-12/odoo-bin -c /etc/odoo/odoo.conf -u base --stop-after-init" odoo
sudo service odoo start
記住對在用Git 版本進行記錄,可通過 git checkout回到修改前,這讓我們可以在需要的時候進行回滾。強烈推薦在執(zhí)行數(shù)據(jù)庫升級前保存?zhèn)浞荨T谕瓿芍?,可使?Git 拉取新的版本到生產(chǎn)倉庫并完成升級:
sudo su odoo
cd ~/odoo-12
git tag --force 12-last-prod
git pull
exit
sudo service odoo restart # or: sudo systemctl restart odoo



