當前位置:
首頁 > 最新 > 在tinycolinux上編譯odoo8

在tinycolinux上編譯odoo8

本文關鍵字:在tinycolinux上源碼安裝odoo8,動態模式python+uswgi+nginx,精簡安裝odoo8模塊

在前面《發布基於openerp的erpcmsone》時,我們談到openerp其實是一種後端erp前端CMS的東西,其網站模塊部分是通用cms網站選型的技術楷模,有可視化拖拉建站支持,且可集成後端erp部分(在線聊天啊,聯繫表單,購物車模塊,etc..),當然,談到cms,不是說它就是前端,它反而正是屬於odoo後端支持部分的,只不過其展示部分是前端技術:

什麼是CMS呢?所謂CMS,隱藏在內容管理系統(CMS)之後的基本思想是分離內容的管理和設計。頁面設計存儲在模板里,而內容存儲在資料庫或獨立的文件中。 當一個用戶請求頁面時,各部分聯合生成一個標準的HTML(標準通用標記語言下的一個應用)頁面。對於一個CMS,其後台admin系統就代表了它的技術全部(負責內容模型表示和前端展示)。所以我們這裡說到前端就是指其生成到html的後台模塊支持部分等等 --- 這跟不生成前台靜態頁面的前台純動態交互網站需求不一樣後者不需要html化。----- 在前面《發布mineportal,ocwp》《讓oc hosting static website》中我們都談到靜態網站,它其實全稱是靜態生成器網站,它其實是CMS工具化了的一種形式。

而且,odoo還採用了pgsql,從Postgres 9.x開始,Postgres又添加了激動人心的NoSQL的支持,,Postgres是通過添加一個json(jsonb)數據類型來實現文檔型存儲的。這迎合了採用統一存儲後端的設計,可以使得odoo的document模塊使用分塊filestor文件系統,見《發布mongopress,基於統一的分散式資料庫和文件系統mongodb》同類文章。

最後,odoo採用python,要談到語言的優異對比足於掀起大論戰了,我不重複那些聚焦語言內部如何pythonic的老話題,只講幾條外部特徵:

1,C系和原生程序,是基本所有現實中可見系統實現的基石,但C系不一定就是最好的,都是先用起來的實用主義的產品,而python,就是所有linux發布版事實上的腳本語言環境。

2,在語言選型上,雖然工程層面是提出越來越多的腳本語言來支持各種domain,但其實歷史上還是傾向直接一門豐富langtechs語言支持庫級表達的DSL,這也是為什麼歷史上眾多語言很好地完成了某領域部分的事現實上在其它領域不好用,但還是會宣稱它自己是通用腳本語言一樣。比如php不被用於作非WEB開發,其它語言不常用於自然語言處或科學計算等等,python雖然也不夠通用,但事實上它的應用領域最通用。

3,在語言選型上,工程上是提倡越來越多的語言,但具體到人和學習者,我們一般傾向於只學二門語言一門C系必學(C or c++),另一門應用腳本語言,且這二種語言形成one host one guest的only two選型特徵,根據2中提到的二種語言要面向DSL包納越來越多這些特徵,lua雖然精微與C一樣重正交設計易與c as hosting交互但依然需要出現c系的面向對象等CPP多范型裡面的需求場景,所以除去lua,c這種較專用,重基礎和偏門的,所以在應用上我們依然需要學習python和cpp這種多范型支持的,而python即是這種langtech level和liblevel都battery included語言。

python in onlytwo as guest for c series是種混合語言系統,業界已有混合語言的實作品,下面這些產品也有python界的比對物這裡只是拿來作為例子:比如製造DSL支持領域邏輯+jit的terralang,比如compiled to lua的moonscript(它提出新語言免去了直接binding的需要),還比如cython,zephir這種僅是生成C模塊作為原語言模塊的「混合語言」系統(它沒有提出新語言)。

下面就讓我們來打造tinycolinux上的lnpp appstack結構(linux+nginx+python+postgresql),並安裝odoo8,注意這裡我們只精簡安裝odoo的必要模塊和web相關模塊。

編譯lnpp的python+uswgi和postgresql

接《為tinycolinux創建應用和lnmp-源碼和toolchain》文,我們這次是編譯python,除了那文中gcc中需要的tinycorelinux的tcz,我們還需要openssl-1.0.0-dev.tcz(事實上python編譯不要它但是接下來pip要用到它),解壓安裝它,下載python src,我選擇的是Python-2.7.14rc1.tgz,解壓cd到src目錄我們這裡是/home/tc/Python-2.7.14rc1,sudo ./configure --prefix=/usr/local/python(你可以加條 --enable-threads未來用python啟動uswgi多線程支持會用到),sudo make install

cd /usr/local/python/bin,下載pip,wget --no-check-certificate https://bootstrap.pypa.io/get-pip.py ,然後sudo python get-pip.py安裝pip。接下來可以安裝uswgi了sudo pip install uswgi(會用到與nginx編譯時一樣的pcre-dev.tcz),運行uswgi,顯示安裝後的uswgi版本是,ctl+c退出它,下面第二部分我們會談到以正確詳細的參數運行它。

對於pgsql我下載的是postgresql-10.1.tar.gz,按處理python src的方法處理它,會要求用到readline,在sudo ./configure --prefix=/usr/local/pgsql --disable-redline中禁用。sudo make install 編譯完。然後在/usr/local/pgsql中創建一個data文件夾,右擊許可權設置為7777 組root,用戶tc[1001]。這是因為pgsql默認實際上也不允許以root方式運行。

sudo -u tc /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data --encoding=UTF8創建默認系統資料庫base,然後啟動它sudo -u tc /usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data(pg_ctl start也可是postgresql),此時tc用戶對於這個資料庫的密碼為空埠為5432, sudo -u tc /usr/local/pgsql/bin/psql base可連上管理,ctl+c退出管理,進入data目錄。修改二個conf文件使得可本地用navcat等工具管理否則會出現server closed the connection unexpectedly postgresql錯誤,首先在postgresql.conf 打開listenadress="*",然後在pg_hba.conf中加一條: host all all 10.0.2.2/32 trust(10.0.2.2是tinycolinux slirp模式下的host windows地址,你也可以改成0.0.0.0)。

為什麼加--encoding呢。因為不這樣做稍後在安裝完odoo在base中建立odoo資料庫時會提示:new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII)

在lnpp中安裝精簡odoo,python模塊和配置uswgi和nginx參數

我們先安裝odoo再來處理python,這樣運行它時可以逐個通過pip安裝缺少的python模塊,將odoo8釋放到/usr/local/nginx/html,精簡/usr/local/nginx/html/odoo/addons安裝的所有模塊,僅保留以下:

account

account_voucher

analytic

auth_crypt

auth_signup

base_action_rule

base_import

base_setup

board

bus

calendar

contacts

decimal_precision

document

edi

email_template

fetchmail

gamification

google_account

google_drive

im_chat

im_livechat

knowledge

mail

marketing

note

pad

pad_project

payment

payment_paypal

payment_transfer

procurement

product

project

report

resource

sale

sales_team

share

web

website

website_blog

website_forum

website_forum_doc

website_livechat

website_mail

website_partner

website_payment

website_report

website_sale

web_calendar

web_diagram

web_gantt

web_graph

web_kanban

web_kanban_gauge

web_kanban_sparkline

web_tests

web_view_editor

下面我們來聯合配置啟動uwsgi和python,nginx,我們還希望像lnmp一樣,分別獨立啟動nginx,mysql和php-cgi(它就相當於python中的uwsgi),先啟動uswgi:

/usr/local/python/bin/uwsgi --socket :8000 --pythonpath /usr/local/nginx/html/odoo --wsgi-file /usr/local/nginx/html/odoo/openerp-wsgi.py

實際上它也有很多變體和縮略形式(你可以參照網上建立一個小例子代替openerp-wsgi.py中的內容來分別測試):

--socket=:8000 --master --uid=tc --gid=root --wsgi-file /usr/local/nginx/html/odoo/openerp-wsgi.py --daemonize=/usr/local/python/bin/uwsgi.log

--socket=:8000 --chdir=/usr/local/nginx/html/odoo --wsgi-file openerp-wsgi.py

(以上chdir也可用pythonpath代替,此pythonpath非python裡面的應用模塊尋找意義上的pythonmoudlepath)

--manage-script-name --mount /yourapplication=myapp:app

-s :8000 -w uwsgi-server:application -d somelogfile

(以上參數都可寫進一個ini,然後以uswgi指定ini的方式進行,但上面我們傾向於不使用uwsgi+ini文件的方式)

可以看到上面總有靜態配置的東西,要麼地址要麼模塊名要麼類名,而lnmp中的php-cgi後面的參數是不與任何靜態地址掛鉤的,它就是一個全局伺服器將語言服務轉化成cgi或uwsgi,所以我們得改動一下,這個改動叫「uswgi的動態模式」:

/usr/local/python/bin/uwsgi --socket=:8000 --master --daemonize=/usr/local/python/bin/uwsgi.log

nginx下正確配置以配合來自上面uwsgi的「動態模式」(可以看出與靜態模式下配置條目的相對應性):

include uwsgi_params;

uwsgi_param UWSGI_CHDIR /usr/local/nginx/html/odoo;

uwsgi_param UWSGI_MODULE uwsgi-server; (不需要.py)

uwsgi_param UWSGI_CALLABLE application;

uwsgi_pass 127.0.0.1:8000;

修改/usr/local/nginx/html/odoo下的swgi-openerp.py對應於下面的一些條目,(它相當於同cd目錄下./openerp-server -c ./openerp-server.conf,openerp-server.conf中的內容即類似下面修改的得到的配置文件):

db_host = 127.0.0.1

db_port = 5432

db_user = tc

db_password =

pg_path = /usr/local/pgsql/bin

addons_path = /usr/local/nginx/html/odoo/addons,/usr/local/pgsql/data/addons/8.0 (不設置這個,會導致 http://xxx:/web/static.... full.css 404)

data_dir = /usr/local/pgsql/data

確定python所須模塊在最後進行,注釋掉uwsgi啟動時的daemonize項,查看啟動後的輸出,並一一sudo pip install 模塊名安裝,其中pillow和pychart特殊處理如下:

.......

sudo pip install Pillow==3.4.2 (不安裝這個版本會出現cant create space錯誤)

sudo pip install http://archive.ubuntu.com/ubuntu/pool/universe/p/python-pychart/python-pychart_1.39.orig.tar.gz

.....

上述lnpp全部成功啟動會自動在/usr/local/pgsql/data下生成filestor,addons/8.0等目錄,訪問localhost,成功!!

總結起來,我們需要在tinycolinux啟動時在/opt/bootlocal.sh中以如下命令分別啟動nginx,uswgi和

/usr/local/nginx/sbin/nginx

/usr/local/python/bin/uwsgi --socket=:8000 --master --uid=tc --gid=root --daemonize=/usr/local/python/bin/uwsgi.log

sudo -u tc /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data

好了,進入odoo怎麼應用和操作又是一種境地了,odoo所有的操作中,數據都有固定的視圖,一條博文和一個文件是一樣的,一個產品和一個電腦是一樣的,faint,我記得怎麼進管理模式,忘了。

------------------

我特別喜歡python生態下的jupyter,如果說odoo的cms是一種帶前端展示渲染後端控制渲染的綜合應用邏輯體,且其可視化拖拉是一種visual editor and demo instant showing system,那麼它其實可以結合jupyter,讓jupyter直接支持這二種機制。見我的《發布engitor,一個paasone》。但其實paasone我更喜歡將其改成appstackx。一個同時帶託管和編輯性質的傳統簡裝paas(不喜歡sandstorm那種,它所處的抽象層是多餘的不需要paas這樣一個東西只需要appstackx)

下一篇或許是《oc上集成wordpress as cms app》和《oc上利用打造codesnippter note》etc,相比php v1版的mineportal,這是py v2版的mineportal了。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 shaolonglee公號 的精彩文章:

TAG:shaolonglee公號 |