CentOS6.5下源代码安装OE7+nginx代理配置+防火墙配置+自动备份
-
以前根据自己的安装经历并且在很多坛友的帮助下写过一篇《CentOS6.4下源代码安装以及nginx配置》,论坛版主抬爱,给置顶了,本人倍感荣幸, :)。
[color=orange]最近由于疏忽大意,结果服务器被黑了(被捉去当了肉鸡, ),为了安全起见只好把系统重做,这次顺带把这次安装经历更新到论坛,希望能给有需要新安装OE的坛友做个参考,如有谬误,请坛友多指正[/color]
[size=18pt][b]整个部署分四个部分 安装OE、安装Nginx、安装防火墙iptables、配置自动备份脚本[/b][/size]
[size=18pt][b]第一部分,安装OE[/b][/size]
[color=navy][b]说明:CentOS版本为6.5版本,命令行采用bash,PostgreSQL为9.3版本,Nginx为1.4.7版本[/b][/color]
[b]1、[/b]CentOS 的安装选项有最小化安装、基本服务器安装、虚拟主机安装等等的,我这里采用的是基本服务器安装(带的东西较少,其实我们也只需要网络能联通加上yum可用即可)
[b]2、[/b]安装postgresql9.3
[color=navy]注意:#代表root用户命令行状态(不做特别说明了),中间会涉及到切换到其他用户[/color]
#cd /tmp //进入tmp目录,这是系统的临时目录,里面的文件不重要,即使误删危害也不大,所以推荐在tmp目录下做临时性操作
#yum remove postgres //卸载原有的pg,如果pg默认没有安装这条命令则无视
#rpm -Uvh [检测到链接无效,已移除] //RPM方式从网络上安装pg的RPM包
#yum -y install postgresql93 postgresql93-server postgresql93-libs postgresql93-contrib postgresql93-devel //使用yum安装相关依赖包
#service postgresql-9.3 initdb //初始化pg数据库
#cd /etc/init.d/
#ln -sf postgresql-9.3 pg93 //做个链接文件,这样省的名字太长敲起来麻烦
#service pg93 start //启动pg服务(LINUX下的服务名称就是启动目录下的文件名,即使该文件为链接文件)
#chkconfig pg93 on //将pg启动服务加入CentOS的启动列表,相当于windows里面的启动项
#su - postgres //切换到postgres用户,该用户为安装pg时安装包自动创建的,它是pg默认的超级用户,在该用户环境下有一些管理命令
-bash-4.1(postgres)$createuser --superuser openerp //创建一个叫openerp的超级用户(此时创建的用户只是数据库的用户,openerp在操作系统中并不存在,请注意其中的区别)
#rpm -ivh [检测到链接无效,已移除] //从网络上安装epel包,我这里的RPM链接是针对x86_64版本的,如果是其他版本请做对应修改
#yum -y install python-dateutil python-docutils python-feedparser python-imaging python-jinja2 python-ldap libxslt-python python-lxml python-mako python-mock python-openid python-psutil python-psycopg2 python-reportlab python-yaml pywebdav python-vobject python-vatnumber python-unittest2 python-simplejson pytz python-gdata python-ZSI pychart pydot pybabel pyparsing python-werkzeug //安装OE依赖的库,大部分都是python库,也有一部分其他依赖库
#unzip gdata-2.0.18.zip //google的网站都改成了https了,所以请用网页下载然后传入系统目录下
#cd gdata-2.0.18
#python setup.py install
#cd /tmp
#rm -rf openerp* //清理不用的旧的openerp开头的所有文件(慎用)
#wget [检测到链接无效,已移除] //下载OE源代码包,准备安装
#tar xvzf openerp-7.0-latest.tar.gz //解压OE源代码包
#adduser openerp -d /opt/openerp //创建openerp用户,它与postgres创建的openerp是关联的
#cp -R openerp*/{openerp,install/{openerp-server.init,openerp-server.conf},openerp-server,setup.py} /opt/openerp //将我们需要的文件拷贝到安装目录
#chown openerp:openerp /opt/openerp -R //将OE安装目录下的所有文件所有者设定为oe7用户
#cd /opt/openerp
#chmod u+x openerp-server.init //.init文件是oe的一个启动脚本,需要给它设置可执行权限
#ln -sf /opt/openerp/openerp-server.init /etc/init.d/oe7server
#chkconfig oe7server on //将oe加入CentOS启动列表
#ln -sf /opt/openerp/openerp-server.conf /etc //将oe目录下的配置文件做一份链接到/etc下,如果想自定义配置文件路径可以通过给openerp-server设置选项或者修改openerp-server.init文件里面的路径来实现,这里采用的方法不用做修改,较为简单
#ln -sf /opt/openerp/openerp-server /usr/bin/ //将OE的主执行文件链接到/usr/bin目录,主要是因为官方启动文件使用了/usr/bin目录
;;到这里OE基本上安装完成了
#service oe7server start //启动OE,这时候应该可以通过浏览器访问OE了
[size=18pt][b]第二部分,安装Nginx[/b][/size]
OE本身自带的webserver效能较低,在前端采用nginx做代理
#rpm -Uvh [检测到链接无效,已移除] //nginx安装很简单
配置/etc/nginx/nginx.conf文件,如果只是为OE服务,建议一个配置文件即可
;;/etc/nginx/nginx.conf配置文件
#设定http服务器,利用它的反向代理功能提供负载均衡支持
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
#error_log /var/log/nginx/error.log notice;
#error_log /var/log/nginx/error.log info;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
http {
#设定mime类型,类型由mime.type文件定义
include /etc/nginx/mime.types;
default_type application/octet-stream;
#设定日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
#添加一个类型 application/javascript
gzip_types text/plain text/css application/javascript application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
# Load config files from the /etc/nginx/conf.d directory
# The default server is in conf.d/default.conf
include /etc/nginx/conf.d/.conf;
upstream oe_server{
#这里可以给出多个server,用来分担OE服务器的负担,并且还可以设定权重(具体请参考nginx配置)
server 127.0.0.1:8069; //这是OE提供服务的地址及端口,可以指定多个server,也就是可以使用多个OE服务器来均衡负载,但是后台数据库还是要保证在逻辑上是一台
//我是因为nginx与OE在同一台机器,所以可以写成127段地址
}
#第一个虚拟服务器
server {
#侦听192.168.1.2的80端口
listen 80;
server_name 192.168.1.2;
location /{
root /opt/openerp/openerp/addons/; #定义服务器的默认网站根目录位置
proxy_pass [检测到链接无效,已移除] ;#请求转向mysvr 定义的服务器列表
#以下是一些反向代理的配置可删除.
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
}
}
}
#service nginx start
OK,现在可以通过nginx来访问OE了
[size=18pt][b]第三部分,配置防火墙[/b][/size]
;;由于我的疏忽大意,造成服务器被黑,所以这次安装配置添加上了防火墙设置(当然防火墙不是万能的,单服务器还是不要裸奔好)
;;如果没有安装防火墙,请先安装
#yum install iptables
;;启动防火墙
#service iptables start
#iptables -F //清空防火墙所有的当前规则
#iptables -L //该命令可以查看当前防火墙规则
;;我们采用命令行的方式逐一添加防火墙规则(也可以直接编辑防火墙配置文件/etc/sysconfig/iptalbes),切记命令执行完之后请使用/etc/init.d/iptables save 来保存配置)
#iptables -A INPUT -S 192.168.1.0/24 -j ACCEPT //允许内网ip访问该服务器所有端口
#iptables -A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT //允许所有ip访问80端口
#iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT //允许本地发起的连接返回数据到任意端口。本地作为客户端可以发起到任何ip和端口的请求,这条规则确保能够收到返回
#iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT //允许80端口返回数据
#iptables -A OUTPUT -j ACCEPT //允许返回数据给所有ip所有端口(上面那条就没用了)
#iptables -P INPUT DROP //除上面允许的规则,抛弃所有INPUT请求
#iptables -P FORWARD DROP //除上面允许的规则,抛弃所有FORWARD请求
#iptables -P OUTPUT DROP //除上面允许的规则,抛弃所有OUTPUT请求
;;我们可以使用iptables -L命令来查看当前防火墙规则,实际上上述规则已经及时生效的,但是必须保存,否则系统重启或者iptables重启后上述规则就丢失了
#/etc/init.d/iptables save //保存iptables配置
[b];;上述命令可以写成一个shell脚本,方便以后使用[/b]
[size=18pt][b]第四部分,自动备份[/b][/size]
;;我们希望系统安全,并且数据资料可以每天都自动备份好,随时准备恢复,这项工作当然希望计算机自动完成
;;我们编写一个脚本文件
#vi /opt/oepenerp/oe7_backup.sh
#!/bin/bash
# chkconfig: 345 99 05
export oe7_home=awk -F ":" '$1 ~/openerp/ {print $6}' /etc/passwd
DB_LIST="Test1 Test2" #请在这里写上你需要备份的数据库名(不要写成跟我这里一样的,因为我们数据库名称不同,多个数据库以空格分开即可)
for i in $DB_LIST; do
su - openerp -c "pg_dump --format=c $i > $oe7_home/oe7_dump/oe7_"$i"$(date +%Y-%m-%d%H:%M:%S)_Z.dump"
done;
find ./ -mtime +30 -name "*.dump" -exec rm -rf {} ; #删除30天以上的备份文件,以防止磁盘空间不足
;;记得给备份脚本添加执行权限
#chmod u+x /opt/openerp/oe7_backup.sh
上面这个脚本可以使用crontab设定为固定时间执行
#crontab -e //启动编辑,命令执行后进入一个与vi编辑器类似的命令状态,按i进入插入状态,然后输入如下规则
30 2 * * * /opt/openerp/oe7_backup.sh
;;上述规则表示每天夜里2:30分定时备份
;;编辑完后记得保存退出
#crontab -l //该命令可以看到是否有定时执行的任务列表
[size=18pt][b]至此整个OE系统配置完成[/b][/size]
[color=green]友情提醒:上面所有的命令都是我手工敲的,所以都是可执行的(当然也可能有复制的时候造成误操作)。以前遇到很多坛友说执行不了的问题,大部分都是自身权限错误或者目录/文件不存在造成的,请坛友细心查看一下[/color] -
访问本地http://192.168.0.114/ 提示 502 Bad Gateway ;
访问本地http://192.168.0.114:8069,出现如下错误:
Internal Server Error
{"message": "OpenERP Server Error", "code": 200, "data": {"debug": "Server Traceback (most recent call last):\n File "/opt/oe7/openerp/addons/web/session.py", line 89, in send\n return openerp.netsvc.dispatch_rpc(service_name, method, args)\n File "/opt/oe7/openerp/netsvc.py", line 296, in dispatch_rpc\n result = ExportService.getService(service_name).dispatch(method, params)\n File "/opt/oe7/openerp/service/web_services.py", line 122, in dispatch\n return fn(*params)\n File "/opt/oe7/openerp/service/web_services.py", line 359, in exp_list\n cr = db.cursor()\n File "/opt/oe7/openerp/sql_db.py", line 484, in cursor\n return Cursor(self.__pool, self.dbname, serialized=serialized)\n File "/opt/oe7/openerp/sql_db.py", line 182, in init\n self._cnx = pool.borrow(dsn(dbname))\n File "/opt/oe7/openerp/sql_db.py", line 377, in _locked\n return fun(self, *args, **kwargs)\n File "/opt/oe7/openerp/sql_db.py", line 440, in borrow\n result = psycopg2.connect(dsn=dsn, connection_factory=PsycoConnection)\n File "/usr/lib64/python2.6/site-packages/psycopg2/init.py", line 164, in connect\n conn = _connect(dsn, connection_factory=connection_factory, async=async)\nOperationalError: FATAL: role "openerp" does not exist\n\n\nClient Traceback (most recent call last):\n File "/opt/oe7/openerp/addons/web/http.py", line 285, in dispatch\n r = method(self, **self.params)\n File "/opt/oe7/openerp/addons/web/controllers/main.py", line 570, in index\n db, redir = db_monodb_redirect(req)\n File "/opt/oe7/openerp/addons/web/controllers/main.py", line 98, in db_monodb_redirect\n return db_redirect(req, not config['list_db'])\n File "/opt/oe7/openerp/addons/web/controllers/main.py", line 109, in db_redirect\n dbs = db_list(req, True)\n File "/opt/oe7/openerp/addons/web/controllers/main.py", line 90, in db_list\n dbs = proxy.list(force)\n File "/opt/oe7/openerp/addons/web/session.py", line 30, in proxy_method\n result = self.session.send(self.service_name, method, *args)\n File "/opt/oe7/openerp/addons/web/session.py", line 103, in send\n raise xmlrpclib.Fault(openerp.tools.ustr(e), formatted_info)\nFault: <Fault FATAL: role "openerp" does not exist\n: 'Traceback (most recent call last):\n File "/opt/oe7/openerp/addons/web/session.py", line 89, in send\n return openerp.netsvc.dispatch_rpc(service_name, method, args)\n File "/opt/oe7/openerp/netsvc.py", line 296, in dispatch_rpc\n result = ExportService.getService(service_name).dispatch(method, params)\n File "/opt/oe7/openerp/service/web_services.py", line 122, in dispatch\n return fn(*params)\n File "/opt/oe7/openerp/service/web_services.py", line 359, in exp_list\n cr = db.cursor()\n File "/opt/oe7/openerp/sql_db.py", line 484, in cursor\n return Cursor(self.__pool, self.dbname, serialized=serialized)\n File "/opt/oe7/openerp/sql_db.py", line 182, in init\n self._cnx = pool.borrow(dsn(dbname))\n File "/opt/oe7/openerp/sql_db.py", line 377, in _locked\n return fun(self, *args, **kwargs)\n File "/opt/oe7/openerp/sql_db.py", line 440, in borrow\n result = psycopg2.connect(dsn=dsn, connection_factory=PsycoConnection)\n File "/usr/lib64/python2.6/site-packages/psycopg2/init.py", line 164, in connect\n conn = _connect(dsn, connection_factory=connection_factory, async=async)\nOperationalError: FATAL: role "openerp" does not exist\n\n'>\n", "fault_code": "FATAL: role "openerp" does not exist\n", "type": "server_exception"}}
有遇到这个问题的朋友么?麻烦指导下qq282655008,感谢!