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的时候,报错
- src/lxml/lxml.etree.c:157929: error: ‘xsltLibxsltVersion’ undeclared (first use in this function)
- src/lxml/lxml.etree.c:157941: error: ‘__pyx_v_4lxml_5etree_XSLT_DOC_DEFAULT_LOADER’ undeclared (first use in this function)
- src/lxml/lxml.etree.c:157941: error: ‘xsltDocDefaultLoader’ undeclared (first use in this function)
- src/lxml/lxml.etree.c:157950: error: ‘__pyx_f_4lxml_5etree__xslt_doc_loader’ undeclared (first use in this function)
- 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()
把删除文件变成改名。
这个方法有待验证。