centos 下安装ODOO

yum install zlib-devel

yum install bzip2-devel

yum install openssl-devel

yum install ncurses-devel

yum install sqlite-devel

 

yum -y groupinstall Development tools

 

cd /opt

wget --no-check-certificate https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tar.xz

 

tar xf Python-2.7.9.tar.xz

cd Python-2.7.14

 

./configure --prefix=/usr/local

make && make install

 

ln -s /usr/local/bin/python2.7 /usr/local/bin/python

 

建立软连接,使系统默认的python指向python2.7

正常情况下即使python2.7安装成功后,系统默认指向的python仍然是2.6版本,而yum是基于python2.6才能正常工作。所以要将系统默认的python指向到2.7版本。

# /usr/local/bin/python2.7 -V    

# mv /usr/bin/python  /usr/bin/python266 

# ln -s /usr/local/bin/python2.7 /usr/bin/python

 

当升级完成后。会出现输入方向键后乱码。

这个问题主要是由于缺少readline Module问题导致的。而CentOS默认只有readline模块而没有readline-devel开发模块。所以只要安装下即可。

# yum -y install readline-devel

然后重新安装python

cd Python-2.7.14

 

./configure --prefix=/usr/local

make && make install

 

安装pip 和setuptools wheel

curl https://bootstrap.pypa.io/get-pip.py | python2.7 - 

 

 

安装postgresql

wget https://ftp.postgresql.org/pub/source/v9.4.16/postgresql-9.4.16.tar.gz --no-check-certificate

tar xf postgresql-9.4.16.tar.gz

adduser postgres

passwd postgres

编译postgresql 安装在home目录下

./configure --prefix=/home/pgsql

 

make && make install

 

cd /home/postgres

 vi .bash_profile

把 PATH=$PATH:$HOME/bin

改成 PATH=$PATH:$HOME/bin:/home/pgsql/bin

保存退出。

让环境变量生效:

 

source .bash_profile

 

 

然后回到root目录

 

cd /root

 vi .bash_profile

把 PATH=$PATH:$HOME/bin

改成 PATH=$PATH:$HOME/bin:/home/pgsql/bin

保存退出。

让环境变量生效:

 

source .bash_profile

 

 

8.初始化数据库

8.1新建数据目录

[root@postgresql ~]# mkdir /home/pgsql/data

8.2更改权限

[root@postgresql ~]# chown postgres:postgres /home/pgsql/data

8.3切换到postgres用户

[root@postgresql ~]# su - postgres

8.4 init db

[postgres@postgresql ~]$ /home/pgsql/bin/initdb -D /home/pgsql/data

到这里数据的初始化就完成

 

9.1回到root用户

[postgres@postgresql ~]$ exit

9.2复制安装目录下的linux文件到/etc/init.d/

进入postgresql 的安装目录(即刚刚使用tar命令解压的目录)

[root@postgresql ~]# cd postgresql-9.4.3

[root@postgresql postgresql-9.4.3]# cp contrib/start-scripts/linux /etc/init.d/postgresql

9.3修改/etc/init.d/postgresql  

[root@postgresql postgresql-9.4.3]# vi /etc/init.d/postgresql

修改如下prefix和PGDATA到安装的目录

# Installation prefix

#prefix=/usr/local/pgsql

prefix=/home/pgsql

 

# Data directory

#PGDATA="/usr/local/pgsql/data"

PGDATA="/home/pgsql/data"

 

9.4添加执行权限

[root@postgresql postgresql-9.4.3]# chmod +x /etc/init.d/postgresql

 

9.5启动数据库

[root@postgresql postgresql-9.4.3]# /etc/init.d/postgresql start

Starting PostgreSQL: ok

9.6让数据库开机启动

[root@postgresql postgresql-9.4.3]# chkconfig --add postgresql

[root@postgresql postgresql-9.4.3]# chkconfig postgresql on

 

这样就可以通过 service postgresql restart方式重新启动服务了。

 

9.7创建数据库操作历史记录文件 

[root@postgresql postgresql-9.4.3]# touch /home/pgsql/.pgsql_history

[root@postgresql postgresql-9.4.3]# chown postgres:postgres /home/pgsql/.pgsql_history

10.测试使用

[root@postgresql postgresql-9.4.3]# su - postgres

[postgres@postgresql ~]$ createdb test

[postgres@postgresql ~]$ psql test

psql (9.4.3)

Type "help" for help.

test=#

 

源码编译安装成功。

 设置posgresql的远程连接

cd /home/pgsql/data

修改pg_hba.conf

添加一条host    all             all             0.0.0.0/24              trust

# IPv4 local connections:

host    all             all             127.0.0.1/32            trust

host    all             all             0.0.0.0/0              trust

另一个要改的就是postgresql.conf文件.

将listen_address =”localhost” 引号里面改为*,即对所有地址监听.

安装subversion

# yum install subversion*

cd  /usr/src/

#svn co http:/xxxxxxxx(svn代码路径)

 

cd /usr/src/tse_3.0

然后安装python的类库

pip install -r requirement.txt

通过requirements.txt安装psycopg2失败,尝试下载psycopg2,手动安装。

pip install psycopg2 失败。报错说没有pg_config的PATH。

(也可以通过source方式:http://initd.org/psycopg/download/下载psycopg2-2.6.2.tar.gz

解压后,python setup.py build)

是因为没有安装postgres9.4-devel

The pg_config program: it is usually installed by the libpq-dev package but sometimes it is not in a PATH directory. Having it in thePATH greatly streamlines the installation, so try running pg_config --version: if it returns an error or an unexpected version number then locate the directory containing the pg_config shipped with the right libpq version (usually/usr/lib/postgresql/X.Y/bin/) and add it to the PATH:

 

pg_config在/usr/pgsql-9.4/bin下

#vim /etc/profile

添加

export PATH="$PATH:/usr/pgsql-9.4/bin"

#source /etc/profile

#pip install psycopg2成功

 

注意,要把requirement.txt的 

psycopg2==2.5.3注释掉。

 

 

supervisor的配置

odoo的源代码放在usr/odoo下

[program:odoo]

command=/usr/local/python278/bin/python2.7 /opt/odoo/openerp-server -c /opt/odoo/openerp-server.conf

directory=/opt/odoo

autostart=true

autorestart=true

startsecs=3

user=openerp

stdout_logfile=/opt/odoo/openerp-server.log

stdout_logfile_maxbytes=500MB

stdout_logfile_backups=50

stdout_capture_maxbytes=1MB

stdout_events_enabled=false

 

 

2017-2-13comment

安装完成之后,配置openerp-server.conf。因为自己的模块放在另外一个目录下,所以addons_path=/home/radzhang/workspace/tse2.0/openerp/addons,/home/radzhang/workspace/tse2.0/openerp/addons_self。设置了两个路径。但是#./openerp-server开启odoo服务端的时候,一直无法识别后面那个新加的addons_self目录。

然后把我自己的模块放到openerp/addons目录下的话,程序是能正常运行的。

后来通过openerp-server命令,直接指定addons路径,然后用-s参数,保存了一下,之后,就能正常识别第二个

 

2017-12-31comment

#pip install -r requirement.txt的时候,报错

  1. src/lxml/lxml.etree.c:157929: error: ‘xsltLibxsltVersion’ undeclared (first use in this function)  
  2. src/lxml/lxml.etree.c:157941: error: ‘__pyx_v_4lxml_5etree_XSLT_DOC_DEFAULT_LOADER’ undeclared (first use in this function)  
  3. src/lxml/lxml.etree.c:157941: error: ‘xsltDocDefaultLoader’ undeclared (first use in this function)  
  4. src/lxml/lxml.etree.c:157950: error: ‘__pyx_f_4lxml_5etree__xslt_doc_loader’ undeclared (first use in this function)  
  5. error: command 'gcc' failed with exit status 1  

pip list查看有lxml4.1.1安装过了,但是还是报lxml的错误。

 

查看了一下#rpm -qa|grep libxlm2*,

[root@tse4-odoo tse_4.0]# rpm -qa|grep libxml2*

libxml2-python-2.7.6-21.el6_8.1.x86_64

libxml2-2.7.6-21.el6_8.1.x86_64

libxml2-devel-2.7.6-21.el6_8.1.x86_64

libxml2-static-2.7.6-21.el6_8.1.x86_64

已经安装了,但是没有libxslt。

#yum install libxslt*

[root@tse4-odoo tse_4.0]# rpm -qa|grep libxslt*

libxslt-1.1.26-2.el6_3.1.x86_64

libxslt-devel-1.1.26-2.el6_3.1.x86_64

 

然后就正常了。requirement.txt的lxml是3.3.5版本的,pip install -r requirement.txt自动会删除lxml4.1.1。然后安装lxml3.3.5

 

2018-2-11comment

openerp-server.conf多核配置

db_user = odoo

dbfilter = .*

limit_memory_hard = 2147483648

limit_memory_soft = 1744830464

limit_request = 81920

limit_time_cpu = 6000

limit_time_real = 7200

log_handler = [':INFO']

log_level = info

syslog=true

#logfile = /usr/src/tse_3.0/log/log.log

login_message = False

logrotate = True

longpolling_port = 8072

max_cron_threads = 2

netrpc = False

netrpc_interface =

netrpc_port = 8070

osv_memory_age_limit = 1.0

osv_memory_count_limit = False

pg_path = /home/pgsql/bin

smtp_password = False

smtp_port = 25

smtp_server = localhost

smtp_ssl = False

smtp_user = False

workers = 13

xmlrpc = True

xmlrpc_interface =

xmlrpc_port = 8169

xmlrpcs = True

xmlrpcs_interface =

xmlrpcs_port = 8071

pre_code=$

 

然后Postgresql.conf优化

 

数据库恢复问题

odoo正常启动之后,还原数据库一直出错。上传到一半就跳出来了。

后来发现是因为多核设定之后,用Nginx做了转发,odoo的端口是8069,直接用nginx转发的80端口访问database/manager后

上传会受到nginx的上传文件的限制,

解决办法。1.更改nginx设置。2.直接访问odoo的8069端口。

 

上传问题解决了之后,还是不行。后来在centos上直接还原也还是不行。

尝试通过pg_restore命令手动恢复数据库看看,果然执行pg_restore的时候报错

undefined symbol: PQconnectdbParams

网上有人说是因为ld_library_path没有设定对的原因

It's probably finding the wrong library. Which binaries are you using?
If you do "ldd /path/to/binary", what does it show? Maybe you need to
set LD_LIBRARY_PATH to the "lib" directory of your new postgres install?

在centos查看

rpm -qa | grep postgresql 发行有另外一个版本的lib存在,是否这个产生了冲突?

# rpm -qa |grep postgres

postgresql-libs-8.4.20-8.el6_9.x86_64

回想到前面postgres用户的.bashrc里是添加了ld_library_path.不知道为什么不能识别

LD_LIBRARY_PATH: 动态库的查找路径

设置:

方法一: export  LD_LIBRARY_PATH=LD_LIBRARY_PATH:/XXX 但是登出后就失效

方法二:  修改~/.bashrc或~/.bash_profile或系统级别的/etc/profile

                  1. 在其中添加例如export PATH=/opt/ActiveP/lib:$LD_LIBRARY_PATH

                  2. source .bashrc  (Source命令也称为“点命令”,也就是一个点符号(.)。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录)

方法三:这个没有修改LD_LIBRARY_PATH但是效果是一样的实现动态库的查找, 

                1. /etc/ld.so.conf下面加一行/home/pgsql/lib

于是按照第三种方法再设置了一下LD_library_path。

然后执行pg_restore就正常了。

回到odoo的database/manager页面,也能正常还原数据了。

 

#2018-02-12comment

今天恢复一个300M的备份文件,上传也成功了,上传过程中也在/tmp/目录下出现了

临时上传文件,但是总是报错不能恢复数据库。

然后把那个备份文件直接ftp上传到服务器,通过pg_restore命令,能正常还原数据库。

怀疑是300M的文件上传不完全???导致/tmp/下的临时备份文件缺失?导致还原数据库失败?有待验证。下次可以把/tmp/下的那个文件复制出来试试能不能手动pg_restore还原。

 

 

#2018-02-13comment

因为使用了多核处理,网上评论说用循环日志的话,有时候会出错。原因是跨天文件日志备份的时候,正好把日志文件备份后删除的时候,其他进程还有可能在使用原来的

日志文件。

方案一,改用rsyslog

openerp-server.conf里的设置syslog=true

然后 vi /etc/rsyslog.conf

在最后添加如下规则

 

:msg,contains,"werkzeug" /var/log/odoo/odoo-server.log

:msg,contains,"werkzeug" ~

:msg,contains,"openerp\." /var/log/odoo/odoo-server.log

:msg,contains,"openerp\." ~

 

然后 service rsyslog restart

这样odoo的日志就保存在/var/log/odoo/odoo-server.log日志文件里了。

缺点是这个文件会一直变大。网上也有通过安装logrotate来分割日志的文章。可以尝试一下。

 

方案二

依旧使用原来的odoo的log日志

#syslog=true

logfile = /usr/src/tse_3.0/log/log.log

login_message = False

 

logrotate = True

因为logging用的是python自带的库类。

修改/usr/local/lib/python2.7/logging/handlers.py

有一个class TimedRotatingFileHandler(BaseRotatingHandler):类是处理循环日志的

在349行左右

        #if os.path.exists(dfn):

        #    os.remove(dfn)

        # Issue 18940: A file may not have been created if delay is True.

        #if os.path.exists(self.baseFilename):

        #    os.rename(self.baseFilename, dfn)

        #if self.backupCount > 0:

        #    for s in self.getFilesToDelete():

        #        os.remove(s)

        #if not self.delay:

        #    self.stream = self._open()

 

        #20180208 modify by rad change logging file for multiprocess

        if not os.path.exists(dfn) and os.path.exists(self.baseFilename):

            os.rename(self.baseFilename, dfn)

        if self.backupCount > 0:

            for s in self.getFilesToDelete():

                os.remove(s)

        if not self.delay:

            self.mode = "a"

 

            self.stream = self._open()

把删除文件变成改名。

这个方法有待验证。

 

 

 

猜你喜欢

转载自radzhang.iteye.com/blog/2410753