HostAdmin App如何导入配置APP界面欣赏

像傻逼一样坚持,就会看到牛逼一样结果
分类 [ 开源APP ] 下的全部文章 ▼
安装ubuntu操作系统
安装pgAdmin
准备odoo源代码
安装pycharm
调试odoo后端python代码
进入odoo.py的shell命令模式(odoo v9才有)
§8.2 服务启动过程跟踪
§8.3 跟踪后端网页动作
§8.4 调试模块
调试odoo前端js代码
§9.1 安装和配置chrome浏览器
§9.2 配置goagent翻墙工具
§9.3 调试前端js脚本
防火墙配置
Pycharm是一个全功的的python和Web开发集成工具,支持Django、Flask、Google App Engine、Pyramid、web2py框架和JavaScript、CoffeeScript、TypeScript、CSS、Cython和模板语言等,以及数据库和SQL, UML & SQLAlchemy Diagrams。而且能实现远程开发和调试。本人曾经尝试在windows搭建,但是安装python的各种软件包时问题很多,最后在Linux操作系统上成功完成。
本文件讲述如何在ubuntu 14.04操作系统上搭建odoo的调试开发环境,我们采用如下的软件:
⑴、VMware-workstation-full-11,
可从下载使用版,然后去网上搜索密钥产生器,或者采用个序列号:VA7HH-44W0Q-0818Y-RYZEV-WVRGA
⑵、ubuntu-14.10-desktop-i386,
可从下载。
⑶、jdk-8u40-linux-i586.tar.gz,采用命令下载:wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%%2F; oraclelicense=accept-securebackup-cookie"
⑷、chrome最新版浏览器,可从下载。
⑸、开发调试工具pycharm-professional,
可从下载Linux版本的。
⑹、翻墙工具goagent,可从下载,此网站上有详细的安装配置文档。
⑺、odoo最新源代码,可从下载。
⑻、odoo_8.0.latest_all.deb,可从下载最新版。
安装ubuntu操作系统
首先在windows上安装VMWare workstation 11,然后再创建虚拟机,给2GB内存,桥接网卡,20GB硬盘即可。
安装ubuntu 32位的桌面版,版本号是11.10,选择中文语言、重庆时区,并创建普通用户moodisk,机器取名为OdooDev。安装完后重启进入图形桌面,打开终端窗口,输入命令做如下配置:
⑴、切换到超级用户:
moodisk@OdooDev:~$ sudo -s
⑵、把系统升级到最新:
root@OdooDev:~# sed -i ‘s|cn.||g’ /etc/apt/sources.list
root@OdooDev:~# apt-get update -y && apt-get upgrade -y
⑶、允许root登陆:
root@OdooDev:~# passwd root
root@OdooDev:~# echo “greeter-show-manual-login=true” && /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf
root@OdooDev:~# reboot
重启之后采用root用户登陆图形桌面,打开一个终端窗口。
⑷、安装vmware tools:
点击VMware虚拟机管理软件的菜单“虚拟机à安装VMware Tools(T)…”,这样就在虚拟机里挂载了虚拟光盘,在终端里输入如下命令安装VMware Tools:
root@OdooDev:~# tar -zxf /media/root/VMware\ Tools/VMwareTools-9.9.2-2496486.tar.gz -C /tmp
root@OdooDev:~# cd /tmp/vmware-tools-distrib
root@OdooDev:~# ./ vmware-install.pl
此后一路按回车键即可,安装完了再次重启,此后的图形桌面充满整个屏幕。
⑸、安装一些必要的软件:
root@OdooDev:~# apt-get -y install vim openssh-server
root@OdooDev:~# vim /etc/ssh/sshd_config
把PermitRootLogin参数的值改成yes
⑹、配置网卡:
root@OdooDev:~# vim /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
iface lo inet loopback
iface eth0 inet static
address 192.168.0.12
netmask 255.255.252.0
gateway 192.168.0.1
dns-nameservers 8.8.8.8 8.8.4.4
root@OdooDev:~# reboot
Ubuntu 14.04自带的图形桌面不好看且不好用,建议更换成经典的gnome桌面,采用如下命令安装:
root@OdooDev:~# apt-get -y install gnome-session-fallback
重启系统后在图形登陆画面参见如下图操作:
把上面提到的软件下载到目录/root/install_softwares下,为以下各步做好准备。不过建议采用如下的命令直接安装gnome桌面:
tasksel -y install ubuntu-gnome-desktop
root@OdooDev:~# cd install_softwares
root@OdooDev:~/install_softwares# tar -zxf jdk-8u40-linux-i586.tar.gz -C /opt/
root@OdooDev:~/install_softwares# cd /opt/jdk1.8.0_40/
root@OdooDev:/opt/jdk1.8.0_40# ln -s /usr/bin/update-alternatives /usr/sbin/alternatives
由于后续的一些软件安装时要用到命令alternatives,在ubuntu下此命令被命名为update-alternatives。
root@OdooDev:/opt/jdk1.8.0_40# alternatives --install /usr/bin/java java /opt/jdk1.8.0_40/bin/java 2
root@OdooDev:/opt/jdk1.8.0_40# alternatives --config java
There are 3 programs which provide 'java'.
-----------------------------------------------
/opt/jdk1.8.0/bin/java
/opt/jdk1.8.0_25/bin/java
/opt/jdk1.8.0_40/bin/java
Enter to keep the current selection[+], or type selection number: 3
root@OdooDev:/opt/jdk1.8.0_40# alternatives --install /usr/bin/jar jar /opt/jdk1.8.0_40/bin/jar 2
root@OdooDev:/opt/jdk1.8.0_40# alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_40/bin/javac 2
root@OdooDev:/opt/jdk1.8.0_40# alternatives --set jar /opt/jdk1.8.0_40/bin/jar
root@OdooDev:/opt/jdk1.8.0_40# alternatives --set javac /opt/jdk1.8.0_40/bin/javac
root@OdooDev:/opt/jdk1.8.0_40# cd
root@OdooDev:~# java -version
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b25)
Java HotSpot(TM) Server VM (build 25.40-b25, mixed mode)
验证版本。
root@OdooDev:~# cat &$HOME/.bash_profile &&E”O”F
export JAVA_HOME=/opt/jdk1.8.0_40
export JRE_HOME=/opt/jdk1.8.0_40/jre
export PATH=$PATH:/opt/jdk1.8.0_40/bin:/opt/jdk1.8.0_40/jre/bin
这个命令就是设置三个环境变量JAVA_HOME、JRE_HOME、PATH。重启系统。
安装一个生产环境的odoo,以便与调试环境的odoo做比较。先安装postgresql 9.4。
root@OdooDev:~# sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" && /etc/apt/sources.list.d/pgdg.list'
root@OdooDev:~# wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | apt-key add -
root@OdooDev:~# apt-get update
root@OdooDev:~# apt-get install -y postgresql-contrib-9.4 postgresql-9.4
root@OdooDev:~# cd $HOME/install_softwares
root@OdooDev:~/install_softwares# dpkg -i odoo_8.0.latest_all.deb
会报错,因为缺少很多依赖软件包,别怕,我们再执行下面的命令安装这些软件包。
root@OdooDev:~/install_softwares# apt-get -f install
下面安装最新版的wkhtmltopdf,这是odoo 8打印报表时要求的。
root@OdooDev:~/install_softwares# wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-i386.deb
如果是64位操作系统,那么下载wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
root@OdooDev:~/install_softwares# dpkg -i wkhtmltox-0.12.2.1_linux-trusty-i386.deb
会报缺少依赖的文件包,再执行下面的命令即可安装这些包:
root@OdooDev:~/install_softwares# apt-get -f install
root@OdooDev:~/install_softwares# wget http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-i386.deb
root@OdooDev:~/install_softwares# update-rc.d odoo disable
odoo的主要文件被安装在目录/usr/lib/python2.7/dist-packages/openerp/下,启动脚本文件/etc/init.d/odoo,配置文件/etc/odoo/openerp-server.conf,创建的数据库用户和操作系统用户都是odoo。操作系统用户odoo用于启动odoo服务,所以为了加快网站前段的访问速度,需要把/usr/lib/python2.7/dist-packages/openerp的主人改为odoo,这样第一次访问的*.py文件就会编译成*.pyc程序,此后访问时速度就会明显加快,使用如下命令修改:
root@OdooDev:~/install_softwares# chown -R odoo: /usr/lib/python2.7/dist-packages/openerp
为了支持在线通信,还需要安装额外一些软件:
root@OdooDev:~/install_softwares# apt-get -y install python-pip python-gevent python-coverage python-coverage-dbg ttf-wqy-microhei ttf-wqy-zenhei
root@OdooDev:~/install_softwares# pip install psycogreen
为了支持我购买的功能强大的odoo website在线开发主题包theme_clean(可以在这里购买:),还需要安装另外一些软件:
root@OdooDev:~/install_softwares# wget -qO- /setup | bash -
root@OdooDev:~/install_softwares# apt-get install -y nodejs
root@OdooDev:~/install_softwares# npm install -g less less-plugin-clean-css
把theme_clean主题包拷贝到odoo的addons目录:
root@OdooDev:~/install_softwares# tar -xjf theme_clean.tar.bz2
root@OdooDev:~/install_softwares# cp -r theme/* /usr/lib/python2.7/dist-packages/openerp/addons/
root@OdooDev:~/install_softwares# chown -R odoo: /usr/lib/python2.7/dist-packages/openerp
通过下面命令修改数据库用户odoo的密码为123456:
root@OdooDev:~/install_softwares# su - postgres
postgres@OdooDev:~$ psql -c “alter user odoo with password ‘123456’;”
postgres@OdooDev:~$ exit
修改odoo的配置文件
root@OdooDev:~# vim /etc/odoo/openerp-server.conf
addons_path = /usr/lib/python2.7/dist-packages/openerp/addons
admin_passwd = A1B2C3
data_dir = /var/lib/odoo/.local/share/odoo
db_host = localhost
db_template = template1
db_user = odoo
db_password = 123456
dbfilter = %d_db
lang = zh_CN
list_db = False
logfile = /var/log/odoo/odoo-server.log
timezone = Asia/Shanghai
workers = 2
xmlrpc_interface = 192.168.0.12
xmlrpc_port = 8069
以上一些重要参数说明如下:
admin_passwd = A1B2C3:odoo超级管理员的密码修改为A1B2C3,安装完的默认密码是admin。
db_user = odoo,db_password = 123456:odoo后端连接数据库的用户名和密码。
dbfilter = %d_db:根据前段访问odoo的域名来自动选择套帐,其中%d代表域名,比如用户通过访问odoo,那么选择的套帐就是weisuan_db,同理通过访问,那么选择的套帐就是moodisk_db了。此参数配合list_db = False,在odoo的登陆界面不会出现选择套帐的列表,这样就能轻松实现SaaS部署odoo了。当然也可以通过:8069/web/database/selector和:8069/web/database/manager来手工选择套帐或管理套帐。
workers = 2:odoo服务在启动的时候产生多个服务子进程,子进程的个数是这样计算的:4+n,假如参数定义workers=n。其中有一个子进程执行/usr/bin/openerp-gevent程序,专门用于实现在线聊天的功能,其他的子进程都是执行/usr/bin/odoo.py。如果屏蔽了workers参数,那么就只有与一个odoo服务进程,没有openerp-gevent进程,所以不能在线聊天了,除非直接启动openerp-gevent服务进程,此进程同时也支持ERP业务操作。注意:odoo8如果要打印报表,workers的值必须大于或等于2。
xmlrpc_port = 8069:定义端口,由于启动odoo服务的用户是普通odoo用户,所以端口不能改成小于1024的端口号,1~1024的端口只有超级用户权限才允许监听。那么到底如何让odoo监听80端口呢?方法有两种:
利用iptables做端口转发,具体参见后面的防火墙部分,或者在/etc/rc.local的exit 0之前加入下面一行。
/sbin/iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8069
以root用户运行odoo服务:修改odoo配置文件/etc/odoo/openerp-server.conf,加入参数定义“xmlrpc_port = 80”;修改文件/usr/lib/python2.7/dist-packages/openerp/cli/server.py,在def check_root_user():行之下加入return;修改/etc/init.d/odoo,把里面的“USER=odoo”改为“USER=root”。
安装pgAdmin
pgAdmin是图形化的postgresql数据库管理工具,为了便于操作数据库,建议安装它。
root@OdooDev:~# apt-get -y install pgadmin3
点击操作系统的菜单“应用程序à编程àpgAdmin III”启动pgAdmin,见下图:
准备odoo源代码
root@OdooDev:~# unzip odoo-8.0.zip
root@OdooDev:~# cd odoo-8.0
root@OdooDev:~/odoo-8.0# cp /etc/odoo/openerp-server.conf ./
然后修改openerp-server.conf成如下所示的内容:
;addons_path = /usr/lib/python2.7/dist-packages/openerp/addons
admin_passwd = A1B2C3
;data_dir = /var/lib/odoo/.local/share/odoo
db_host = localhost
db_template = template1
db_user = odoo
db_password = 123456
dbfilter = %d_db
lang = zh_CN
list_db = False
;logfile = /var/log/odoo/odoo-server.log
timezone = Asia/Shanghai
;workers = 2
xmlrpc_interface = 192.168.0.12
xmlrpc_port = 8069
行首是“;”的为注释。修改openerp/cli/server.py,在def check_root_user():行之下加入return,这样root用户也能运行odoo服务了。参照之前的内容把theme_clean主题拷贝到$HOME/odoo-8.0/addons下。
源码根目录下有一个文件requirements.txt,里面包含了所依赖的软件包,采用下面的命令安装这些依赖包:
root@OdooDev:~/odoo-8.0# pip install -r requirements.txt
安装pycharm
登陆Linux图形桌面并且打开一个终端窗口:
执行如下命令:
root@OdooDev:~/odoo-8.0# cd $HOME/install_softwares
root@OdooDev:~/install_softwares# tar -zxf pycharm-professional-4.0.5.tar.gz -C ../
root@OdooDev:~/install_softwares# cd ../pycharm-4.0.5/bin/
root@OdooDev:~/pycharm-4.0.5/bin# ./pycharm.sh
下面开始导入odoo的源代码,指定其目录即可。
点击上图中右上角的“Configure Python Interpreter”,配置python解释器为python2.7,然后pycharm根据python2.7建立索引,几分钟后出现如下的界面:
点击右上角的“Install requirements”安装依赖的python插件,安装过程很可能报错。配置openerp-server的启动参数,见下图:
如下图所示定义数据源:
下面的图直接点击“OK”。
到此,pycharm安装完毕,并且导入了odoo工程项目,以后启动pycharm的方法是:操作系统菜单“应用程序à编程àPycharm”。
最后我们来汉化pycharm,从这里(访问密码 03a4)下载,汉化的官方网站是/Jythoner/pycharm。解压之后把resources_zh_CN.jar拷贝到pycharm安装目录下的lib目录下,重启pycharm即可。
调试odoo后端python代码
在调试odoo8之前,不要单独启动odoo8服务。
§8.1 进入odoo.py的shell命令模式(odoo 9才有)
./odoo.py shell -d odoo9_db -r odoo -w pass123 --db_host=127.0.0.1
-c openerp-server.conf
----返回当前脚本的所有名字,其中openerp和self,可以进一步列,如dir(openerp)、dir(self)
&&& print self
----查看当前模块,默认是res.users。
&&& dir(openerp)
-----查看模块openerp定义的名字和函数。
&&& help()
----进入帮助界面。
&&& help(openerp.osv.orm.Model.browse)
----获取browse()函数的帮助
&&& self.search_read([('id','=',1)],['name'])
----查看表res_users中id为1的用户的名字。
&&& self.pool.get('neon.asset').browse([1,2])
服务启动过程跟踪
Odoo.py定一了一系列的函数,最后两条语句是执行总路口,我们在main()处设置断点,然后开始跟踪调试,结果如下:
odoo.py&main():导入openerp,然后执行openerp/cli/__init__.py&main(),然后执行openerp/cli/server.py&main(args),&check_root_user()检查是否是根用户,如果是,则退出。由于我们是用root用户登录linux并做调试工作的,所以openerp/cli/server.py有一条语句改为 “if pwd.getpwuid(os.getuid())[0] == 'root1' :”,这样root用户也能运行odoo服务了。
openerp/tools/config.py&parse_config(args)分析配置文件(--config=/opt/dev/odoo8/odoo-config/openerp-server.conf)。
check_postgres_user()检查是否是postgres数据库用户,如果是则退出。
report_configuration()打印OpenERP版本信息,addons路径,数据库登录信息。
openerp/service/server.py&start(preload=None,stop=False):
装载全局模块(模块由--load命令行参数或server_wide_modules指定,默认模块是web,web_kanban),执行run(),执行start(),再执行http_spawn(self),开始监听80或者8069端口了,在执行run()时传递了application函数(在openerp/service/wsgi_server.py中定义)。服务器有三种(默认是ThreadedServer),在windows下只有ThreadedServer支持:
GeventServer if sys.modules.get("gevent").
PreforkServer if workers is defined in configuration.
ThreadedServer if none of the above are true.
文件openerp/service/server.py中定义了ThreadedServer服务器对应的类,类中方法run()完成:调用start()产生一个http线程和2个cron线程。http线程调用http_thread产生Werkzeug wsgi 守护服务进程,所有的web请求被传递给application函数(在openerp/service/wsgi_server.py中定义)。cron线程为每个数据库(套帐)每隔60秒钟调用_acquire_job(db_name)方法(方法的类ir_cron定义在openerp/addons/base/ir/ir_cron.py中)来处理后台任务。启动大概流程见下面的图。
跟踪后端网页动作
在用pycharm 4调试odoo8时,odoo服务程序监听8072端口,而不是80,但当在pycharm里运行odoo8时又是监听80端口。我们都知道8072端口是支持在线聊天的。既然监听8072,那么我们就干脆访问http://&ip&:8072,但是网页长时间打不开。我们在/root/odoo-8.0/openerp/service/wsgi_server.py的application()函数内第一条语句处设置断点,然后debug运行odoo服务,并且在浏览器打开网页,可以开始跟踪了。有外国朋友说修改文件/root/odoo-8.0/openerp/__init__.py,参照下图注释掉两行:
然后调试odoo就是监听80端口了,而且浏览网页也正常,跟踪也顺利。但是又产生了一个新的问题:在pycharm中运行odoo,监听8072端口了。下图供参考。
§8.4 调试模块
模块名就是模块文件所在的目录名,当调试模块时,需要不断地修改代码,并在odoo中升级模块,才能看到修改后的效果。升级模块有两种方式,一种是在odoo的“设置”菜单中完成,一种可在启动odoo服务时升级,后一种方法比较快捷,带参数 -u 模块名 启动Odoo服务即可,比如:
./odoo.py -c openerp-server.conf -u neon_asset
其中neon_asset是我开发的资产管理模块。
调试odoo前端js代码
前端调试要结合chrome和其插件,同时最好配置goagent翻墙软件,因为后续的js调试插件JetBrains IDE Support需要翻墙才能下载。
安装和配置chrome浏览器
root@OdooDev:~/install_softwares# dpkg -i google-chrome-stable_current_i386.deb
如果此时直接启动chrome浏览器,那么就会报错:
我们的解决办法是:
root@OdooDev:~/install_softwares# mkdir $HOME/.chrome
root@OdooDev:~/install_softwares# vim /usr/bin/google-chrome
这样就可以正常启动chrome浏览器了。
配置goagent翻墙工具
从这里http://t.cn/RwuUMo2下载(密码29b9),然后解压到/opt/GoAgent-323/目录下。参照里面的操作说明配置,对于Linux系统,注意以下几点:
root@OdooDev:~# apt-get -y install python-vte
root@OdooDev:~# python2.7 /opt/GoAgent-323/local/addto-startup.py
这一步是添加开机自动启动翻墙软件,也可以手工启动,采用命令python2.7 /opt/GoAgent-323/local/goagent-gtk.py或者python2.7 /opt/GoAgent-323/local/proxy.py
下面还要手工导入证书:
打开 Chrome 浏览器 &设置 & 显示高级设置… & HTTPS/SSL & 管理证书… & 授权中心& 导入… & 导入/opt/GoAgent-323/local目录下的 CA.crt 证书 & Edit trust settings 全部选中 & 重启浏览器
PS: goagent目前不稳定,我直接采用蓝灯(lantern)翻墙工具,速度快,还比较稳定,本博客的第一篇文章中有下载链接。
调试前端js脚本
参照下图增加js调试配置:
点击“OK”后会提示需要在chrome浏览器中安装插件JetBrains IDE Support。调试时在pycharm中正常运行或者调试运行odoo8或者在系统命令窗口运行odoo8服务(root@OdooDev:~/odoo-8.0# ./odoo.py -c openerp-server.conf),然后在pycharm中调试运行js debug:
pycharm会自动启动chrome浏览器,如下图所示:
对于网站的前端调试,我还是喜欢使用chrome开发者工具或者与firefox集成的FireBug,后者有中文版,使用更人性化一些。下面简单介绍下安装和使用FireBug。先从下载浏览器并安装它,安装完之后启动firefox浏览器,点击右上角的菜单(那个“三”的小图标),然后点击“添加组件”,再然后搜索firebug,搜到之后直接安装这个组件即可。最后在firefox浏览器的靠近右上角的地方出现一个小虫子的图标就是FireBug了,见下图:
现在进入odoo的商城下单,直到如下付款的界面:
选择不同的付款方法,那个“现在支付”按钮下的信息就会改变,那么现在我们来找找改变这些信息的代码在哪里。
第一种方法:点击那个小虫子打开firebug界面,然后依次参照图中的1、2、3操作:
上图中已经告诉我们执行的js函数,我们双击这个函数打开包含这个函数的那个js文件,并定位到目标函数。js文件一般是经过压缩的,可读性极差,点击“{}”整理代码,如下图所示:
第二种方法:参见下图操作。
然后再点击“PayPal”前的那个点,这样就触发了事件了,见下图:
10、防火墙设置
如果服务器放在公网上,等于就暴露在不安全的外部世界,合理设置防火墙规则就显得至关重要了。
安装需要的软件包:
root@OdooDev:~# apt-get -y install iptables iptables-persistent
root@OdooDev:~# update-rc.d iptables-persistent defaults
root@OdooDev:~# cat &/etc/iptables/rules.v4 &&E"O"F
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
-A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp -m multiport --dports 22,80,443, -j ACCEPT
-A OUTPUT -p udp --sport 53 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
-A OUTPUT -m state --state NEW -m tcp -p tcp -m multiport --dports 22,80,443,5432 -j ACCEPT
# Completed on Fri Mar 27 00:30:59 2015
REROUTING ACCEPT [2:467]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [15:1045]
OSTROUTING ACCEPT [15:1045]
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8069
对于这个配置,说明如下:
(1)、放行进来的端口22,80,443,,22号端口是ssh登陆的端口,不能禁止,否则没法远程登陆管理机器;80和443是网站服务端口,分别对应http和https协议,如果禁用了没法登陆odoo;8069是odoo的服务端口,尽管做了端口转发,还是要开启的;8072是在线聊天端口。
(2)、放行出去的端口22,80,443,5432,因为在登陆服务器后当然还希望再登陆到其他电脑,所以出去的22不能封;同时安装软件需要访问外部的80和443端口;5432是本机上的postgresql数据库,本机的odoo服务要访问数据库,对它来说当然是要出去了。
(3)、80端口转向到8069端口,采用nat技术。这样外面的人访问odoo时不用指定8069端口,直接访问域名如就行啦。
重启系统。
10、模块开发
注意,如果用vim编辑,建议在文件末尾放上下面一行:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
一些提醒:
1)、继承:首先继承一个旧类以增加字段或方法,然后添加视图内容,如:
class pet_Animal(osv.Model):
_name = 'pet.animal'
_columns = {
'res_partner_id':fields.many2one('res.partner','Owner'),
class pets_res_Partner(osv.Model):
_inherit = "res.partner"
_columns = {
'animal_ids':fields.one2many('pet.animal','res_partner_id',string="Pets"),
} #继承res.partner类,增加字段animal_ids。在写本类时考虑的角度与res.partner一样。
如果重载了方法,那么一般首先会调用super()函数。下面再来集成并修改视图:
&record id="base_view_partner_form" model="ir.ui.view"&
&field name="name"&res.partner.form.inherit.pet_animal&/field&
&field name="model"&res.partner&/field&
&field name="inherit_id" ref="base.view_partner_form" /&
&field name="arch" type="xml"&
&!--Adds a new page (tab) to the view after the tab Information --&
&xpath expr="//page[@string='Information']" position="after"&
&page name="pets" string="Animal Pets"&
&field name="animal_ids"/&
关于xpath expr更详细的参见
可以在windows或者Linux平台上履行odoo8的开发和调试任务,工具可以选择ecplise+pydev或者pycharm+java sdk,前者是免费的,而pycharm专业版是收费的,社区版是免费的,但是社区版功能要弱一些,pycharm专业版允许无偿使用1个月,之后就必须购买序列号,不过破解它也是容易的。pycharm是专门针对python语言的集成可视化开发环境,相对于ecplise的pydev插件更专业一些,但是ecplise的开发界面更通用一些,因为只要安装相应的插件,ecplise可以用来开发任何语言的程序了,比如c, c++, java, php, python,......
本文搭建采用:ubuntu 14.04 LTS 32位桌面版,
pycharm 4.0.3专业版, jdk-8u25-linux-i586.rpm
1、安装基本的包
# sed -i 's|cn.||g'
/etc/apt/sources.list
# apt-get update && apt-get -y upgrade && apt-get -y install vim python-pip
# apt-get install -y python-dateutil python-feedparser python-ldap python-libxslt1 python-lxml python-mako python-openid python-psycopg2 python-pybabel python-pychart python-pydot python-pyparsing python-reportlab python-simplejson python-tz python-vatnumber python-vobject python-webdav python-werkzeug python-xlwt python-yaml python-zsi python-docutils python-psutil python-mock python-unittest2 python-jinja2 python-pypdf python-decorator python-passlib
# pip install gdata
# apt-get install python-gevent
# pip install psycogreen
---- odoo的在线聊天要使用这个包和上一步安装的python-gevent包
# echo 'LANG="zh_CN.UTF-8"'&/etc/default/locale #解决文件的修改日期乱码的问题
# echo 'LANGUAGE="zh_CN:zh"'&&/etc/default/locale
# update-grub2
2、安装和配置数据库
# apt-get -y install postgresql
# /etc/init.d/postgresql restart
# sudo -u postgres psql -e --command "CREATE USER odoo WITH SUPERUSER PASSWORD 'odoo_pass'"
3、准备odoo8源码
# mkdir -p
/opt/dev/custom-addons && cd /opt/dev && git clone -b 8.0
# mv odoo odoo8 && mkdir /opt/dev/odoo8/odoo-config
# cp /opt/dev/odoo8/debian/openerp-server.conf /opt/dev/odoo8/odoo-config/
# cat &/opt/dev/odoo8/odoo-config/openerp-server.conf &&E'O'F
; This is the password that allows database operations:
; admin_passwd = admin
db_host = localhost
db_port = 5432
db_user = odoo
db_password = odoo_pass
addons_path = /opt/dev/odoo8/addons,/opt/dev/custom-addons
timezone = Asia/Shanghai
list_db = False
xmlrpc_port = 80
workers = 2
db_template = module_db
dbfilter = %d_db
如果没有xmlrpc_port参数,那么默认就是8069(参见程序/opt/dev/odoo8/openerp/tools/coonfig.py中的语句group.add_option("--xmlrpc-port", dest="xmlrpc_port", my_default=8069,help="specify the TCP port for the XML-RPC protocol", type="int"))。
参数list_db = False、db_template = module_db和dbfilter = %d_db主要用来把odoo配置成SaaS模式,list_db=False参数使得用户不能在登录界面上看到全部的套帐(数据库),因此无法选择套帐;dbfilter = %d_db参数指定:根据访问域名选择套帐,比如域名是,那么选择的套帐就是xyz_db,另外的选择器%h表示整个域名,这对于SaaS形式的odoo非常有用。
4、安装pycharm
Pycharm需要JAVA JDK,从/technetwork/java/javase/downloads/index.html?ssSourceSiteId=ocomen下载最新的JDK到/opt/dev/,比如jdk-8u25-linux-i586.rpm
# apt-get install -y alien
----在ubuntu上需要采用工具alien来安装rpm格式的包
# alien -i -c /opt/dev/jdk-8u25-linux-i586.rpm
-----注意:本命令要根据下载的具体文件名来定。
# java -version
----查看java的版本信息
从/pycharm/download/下载最新专业版的Pycharm到/opt/下,可以试用30天,之后可以破解。
# cd /opt/ && tar -xzf pycharm-professional-4.0.3.tar.gz
# mv pycharm-4.0.3 pycharm
以后在图形的Linux桌面上运行/opt/pycharm/bin/pycharm.sh就可以启动可视化的python开发界面了。
5、在pycharm中导入odoo项目
初始启动pycharm,在图形命令窗口中执行/opt/pycharm/bin/pycharm.sh
点击“Open…”打开并导入目录/opt/dev/odoo8,在集成开发环境中点击菜单“Run--&Resume Program”或者直接按F9,出现:
点击Edit Configurations…,新建一个启动配置:
这样在pycharm中启动odoo,对应的命令就是/opt/dev/odoo8/odoo.py --config=/opt/dev/odoo8/odoo-config/openerp-server.conf
下面是pycharm的集成开发调试界面。
6、odoo服务启动分析。
由于启动服务的命令是/opt/dev/odoo8/odoo.py --config=/opt/dev/odoo8/odoo-config/openerp-server.conf,所以我们从跟踪odoo.py开始,在pycharm集成环境中双击odoo.py打开文件:
Odoo.py定一了一系列的函数,最后两条语句是执行总路口,我们在main()处设置断点,然后开始跟踪调试,结果如下:
odoo.py&main():导入openerp,然后执行openerp/cli/__init__.py&main(),然后执行openerp/cli/server.py&main(args),&check_root_user()检查是否是根用户,如果是,则退出。由于我们是用root用户登录linux并做调试工作的,所以openerp/cli/server.py有一条语句改为 “if pwd.getpwuid(os.getuid())[0] == 'root1' :”,这样root用户也能运行odoo服务了。
openerp/tools/config.py&parse_config(args)分析配置文件(--config=/opt/dev/odoo8/odoo-config/openerp-server.conf)。
check_postgres_user()检查是否是postgres数据库用户,如果是则退出。
report_configuration()打印OpenERP版本信息,addons路径,数据库登录信息。
openerp/service/server.py&start(preload=None,stop=False):
装载全局模块(模块由--load命令行参数或server_wide_modules指定,默认模块是web,web_kanban),执行run(),执行start(),再执行http_spawn(self),开始监听80或者8069端口了,在执行run()时传递了application函数(在openerp/service/wsgi_server.py中定义)。服务器有三种(默认是ThreadedServer),在windows下只有ThreadedServer支持:
GeventServer if sys.modules.get("gevent").
PreforkServer if workers is defined in configuration.
ThreadedServer if none of the above are true.
文件openerp/service/server.py中定义了ThreadedServer服务器对应的类,类中方法run()完成:调用start()产生一个http线程和2个cron线程。http线程调用http_thread产生Werkzeug wsgi 守护服务进程,所有的web请求被传递给application函数(在openerp/service/wsgi_server.py中定义)。cron线程为每个数据库(套帐)每隔60秒钟调用_acquire_job(db_name)方法(方法的类ir_cron定义在openerp/addons/base/ir/ir_cron.py中)来处理后台任务。
application(environ, start_response)函数调用application_unproxied(environ, start_response)函数,这是WSGI服务的总入口,它又调用environment.manage()方法创建本地环境数据集(如数据库访问参数和本地缓存),其中数据库参数:cr-数据库游标,uid-用户id号,context-当前上下文的字典。
7、odoo.py的运行参数
打开文件openerp/tools/config.py,可以看到很多服务启动时用到的参数,这些参数可以在配置文件中定义,也可以在odoo.py的命令行上指定,一些重要的参数如下:
命令行参数名
addons_path
--addons-path
指明额外的addons目录,多个目录用逗号分隔
admin_passwd
管理员密码
auto_reload
--auto-reload
是否自动重载:true|false
--config, -c
指明配置文件
--data-dir,-D
定义Odoo数据存放目录
$HOME/.local/share/Odoo
定义postgresql数据库的ip地址
db_maxconn
--database,-d
指定数据库名称
db_password
--db_password,-w
数据库密码
--db_user,-r
数据库用户名
数据库端口
db_template
--db-template
指定模板数据库
--db-filter
定义数据库过滤器,%h表示主机名,%d表示域名(除掉www和最后的部分),如通过访问odoo,那么自动选择duse_db套帐。
dbfilter=%d_db
debug_mode
是否以调试方式启动
email_from
--email-from
发送邮件的地址
--no-database-list
不列出全部数据库
当指定False时,登录时要输入数据库名,适合于odoo的SaaS应用。
publisher_warranty_url
指明odoo的根目录
/opt/dev/odoo8/openerp/__init__.pyc的basename
smtp_password,smtp_port, smtp_server,smtp_user
server_wide_modules
指明odoo服务启动时需要装入的全局模块
web,web_kanban
--timezone ,-t
指明服务器的时区,如Asia/Shanghai
timezone = Asia/Shanghai
odoo服务的进程个数,一般等于cpu的核心数。当大于0时,会自动产生在线聊天的后台进程并监听8072端口
xmlrpc_interface
--xmlrpc-interface
监听的网卡ip
默认监听全部网卡
xmlrpc_port
--xmlrpc-port
监听端口,当端口小于1024时必须以root用户运行odoo服务。如果仍以普通用户运行且端口为8069,但是用户又要以80端口访问时,可以运行以下命令转发:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8069
xmlrpc_port = 80 或者 --xmlrpc-port=80。
一般我们设计好一个具备基本功能的数据库(套帐),比如module_db,作为数据库模板,并定义在配置文件中。
db_host = localhost
db_port = 5432
db_user = odoo
db_password = odoo_pass
db_template = module_db
addons_path = /opt/dev/odoo8/addons,/opt/dev/custom-addons
publisher_warranty_url = False
timezone = Asia/Shanghai
list_db = False
; xmlrpc_interface = 192.168.0.12
xmlrpc_port = 80
workers = 4
8、用户浏览网页的过程
打开网页http://hostname:8069被自动重定向到http://hostname:8069/web,这是由/opt/dev/odoo8/addons/web模块处理的,我们重点检查文件controllers/main.py,看到里面的代码:
@http.route('/', type='http', auth="none")
def index(self, s_action=None, db=None, **kw):
return http.local_redirect('/web', query=request.params, keep_hash=True)
@http.route('/web', type='http', auth="none")
def web_client(self, s_action=None, **kw):
ensure_db() #选择和管理数据库
if request.session.uid:
if kw.get('redirect'):
return werkzeug.utils.redirect(kw.get('redirect'), 303)
if not request.uid:
#在同一台电脑上已经登录的用户
request.uid = request.session.uid
menu_data = request.registry['ir.ui.menu'].load_menus(request.cr, request.uid, context=request.context)
#获取菜单数据
return request.render('web.webclient_bootstrap', qcontext={'menu_data': menu_data})
#调用模板webclient_bootstrap渲染成网页并返回给用户
#还没有登录的用户
return login_redirect()
由此可见,渲染会调用web.webclient_bootstrap模板(在/opt/dev/odoo8/addons/web/views/webclient_templates.xml中定义),模板中采用的样式定义在文件/opt/dev/odoo8/addons/web/static/src/css/base.css中。
9.1)、在列表和表单界面上,隐藏系统的“create”:
在tree 和form 后直接加
create="false", 例如
〈tree string="XXX" create="false"〉
〈form string="YYY" create="false"〉
9.2)、在系统的print和more下拉菜单下添加子菜单:
use key2="client_action_multi" in act_window to add submenu to "More" button
&act_window name="New Sub menu"
res_model="product.product"
src_model="product.product"
key2="client_action_multi"
view_mode="form" target="new"
view_type="form"
id="act_new_sub_menu" /&
You can goto Settings && Technical && Action && Action Bindings. Then in search Group By Model and Type. Find the model product.product and expand it. You can see two types, client_print_multi (for items under Print button)and client_action_relate (for items under More button). You can choose the one you want and delete those entries which you want to hide in that type.
These action bindings are stored in "ir_values" table in your database.
常见的五种简介:
  对于开源软件来说,相信每个人心中都会有自己的TOP10,尤其是那些开源软件拥护者眼中的TOP10,可能会与我们所列的TOP10有些不同。不过,这是经过全球很多开源社区高手共同讨论的结果,我们觉得这个版本的TOP10是我们所能做到的最公正、最准确的了。当然如果你不同意这样的TOP10,没关系,尽管保留你心中的TOP10。
想必各位与我一样,平时偶尔看到又有一个好的产品开源了,于是匆忙到网上搜索其更详细的相关资料,然后看看是否适合于自己的企业,或者自己安装一番,然后自我陶醉陶醉,再然后可能又丢一边了,日后可能又忘了,再以后真的又需求了,可能压根就想不起来这个适合自己需求的开源产品,从而错失了一个好机会了。于是我还是觉得把这些新发现的优秀开源产品先记下来,以后自己可以随时查阅,各位也可以把自己认为好的开源产品加在跟帖里,谢谢先。
Linux操作系统培训目前越来越流行,更多的培训是采用现场教学方式——上机教学,那么上机教学怎么来达到把老师的电脑上的屏幕内容广播到学生电脑上呢?这可以采用软件italc来完成。本文采用ubuntu 9.04操作系统。
EncFS是一个免费的,开源的,基于GPL的,FUSE级别的加密文件系统,能够透明加密文件,使用任意目录存放加密文件.EncFS 运行于 Linux 的用户空间,使用FUSE内核模块。所有写入该文件系统的文件都将被加密。EncFS 为我们提供一个用户级的加密文件系统,每个用户都可为自已的目录或文件创建一个加密的文件系统。这个文件系统只能由你加载和访问,其他用户只能看到加密后的内容。其使用FUSE库和FUSE内核模块来提供文件系统的接口。
运行平台:Ubuntu8+php5+apache2+Mysql5+osCommerce2.2
osCommerce是一套国际著名的开源免费的电子商务系统。运行于PHP+MySql服务器环境。项目始于2000年,由严谨的德国人开发,是老牌的外贸网站购物程序。其特征you:
Plone是基于Zope的最主要的平台,Zope是一个非常优秀的应用服务器。原生开发语言是Python。做个比喻:Python是开发语言,相当于JAVA、C#;Zope是一套应用体系,相当于J2EE、.net;Plone相当于构建这些基础之上的一个遵循标准的技术平台或系统,包括工作流,内容管理,文档管理,权限等。企业内容管理(CMS)越来越得到了广大企业的重视,企业的电子化文件资料无疑是一种重要的知识资产,采用专门的工具来管理这些资产就显得重要而紧迫。Zope/Plone是一套老牌的内容管理软件,不过现在应该更好的开源工具了,有时间再去网上刮刮……}

我要回帖

更多关于 App界面 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信