当前位置: 代码迷 >> Linux/Unix >> Linux服务器上环境部署集锦
  详细解决方案

Linux服务器上环境部署集锦

热度:752   发布时间:2016-04-29 12:24:22.0
Linux服务器上环境部署汇总

1.jdk的安装

2.nginx的安装

3.tomcat的安装

4.mysql的安装

5.scrapy的安装

6.mongodb的安装

?

作为爬虫工程师,Linux工程师,系统管理员,软件的部署安装是必备技能。下面是我在工作学习中的总结,希望对网友们有所借鉴和帮助。

环境:

阿里云服务器 CentOS7.0

一.JDK的安装

1.查看linux机器是32位还是64位的方法:

?

$ getconf LONG_BIT

64

2.下载对应系统的jdk版本 ?linux 64bit ?jdk1.8

? ? ?下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

?

? ? ?http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

3.安装正式开始:

创建安装目录,在/usr/java下建立安装路径,并将文件考到该路径下:?

# mkdir /usr/java

?

1、jdk-6u11-linux-i586.bin 这个是自解压的文件,在linux上安装如下:?

# chmod 755 jdk-6u11-linux-i586.bin?

# ./jdk-6u11-linux-i586.bin (注意,这个步骤一定要在jdk-6u11-linux-i586.bin所在目录下)

在按提示输入yes后,jdk被解压。

出现一行字:Do you aggree to the above license terms? [yes or no]

?安装程序在问您是否愿意遵守刚才看过的许可协议。当然要同意了,输入"y" 或 "yes" 回车。

2、若是用jdk-6u11-linux-i586-rpm.bin 这个也是一个自解压文件,不过解压后的文件是jdk-6u11-linux-i586-rpm 包,执行rpm命令装到linux上就可以了。安装如下:?

#chmod 755 ./jdk-6u11-linux-i586-rpm

# ./jdk-6u11-linux-i586-rpm .bin?

# rpm -ivh jdk-6u11-linux-i586-rpm

?

出现一行字:Do you aggree to the above license terms? [yes or no]

?安装程序在问您是否愿意遵守刚才看过的许可协议。当然要同意了,输入"y" 或 "yes" 回车。

安装软件会将JDK自动安装到 /usr/java/目录下。

4.配置

#vi /etc/profile

?在里面添加如下内容

export JAVA_HOME=/usr/java/jdk1.6.0_27

export JAVA_BIN=/usr/java/jdk1.6.0_27/bin

export PATH=$PATH:$JAVA_HOME/bin

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME JAVA_BIN PATH CLASSPATH

让/etc/profile文件修改后立即生效 ,可以使用如下命令:

# . /etc/profile

注意: . 和 /etc/profile 有空格.

重启测试

?java -version

?屏幕输出:

?java version "jdk1.6.0_02"
?Java(TM) 2 Runtime Environment, Standard Edition (build jdk1.6.0_02)
?Java HotSpot(TM) Client VM (build jdk1.6.0_02, mixed mode)

?

?javac

会打印出一些帮助信息,说明安装配置成功

?

二.Nginx:

参考url:http://www.linuxidc.com/Linux/2015-03/114988.htm

参考url:http://www.linuxidc.com/Linux/2015-03/114986.htm

1. 从Nginx官网下载Nginx。目前最新的稳定版为:1.6.2

2. 将下载下来的Nginx上传到/opt/nginx目录下。运行“tar -zxvf nginx-1.6.2.tar.gz”进行解压。

3. 切换到/opt/nginx/nginx-1.6.2目录下,运行./configure进行初始化配置。如出现下面的提示,说明该机器没有安装PCRE,而Nginx需要依赖PCRE,需要手动安装PCRE,见?http://www.linuxidc.com/Linux/2015-03/114986.htm。

4. 安装完PCRE后,再次运行./configure进行初始化即可。注意这里生成的配置文件,尤其箭头所指的方向,是启动nginx时的路径。

5. 运行 make install 进行编译。

6. 切换到步骤4生成的nginx运行目录下,运行./nginx,启动Nginx。

如出现下面所述的错误,在已安装PCRE库的情况下,需要配置PCRE共享库。具体操作看这里?http://www.linuxidc.com/Linux/2015-03/114985.htm?。

./nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

7.? 在浏览器中输入IP:端口号,出现如下图所示,说明安装成功。

如出现nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)。可能是端口号被占用,切换到/usr/local/nginx/conf/目录下,更改nginx.conf下的端口号。也有可能是不小心nginx重启了多次,关闭nginx进程,重启即可。

8. 关闭Nginx

使用 ps -ef|grep nginx 查看nginx的进程,可以看到nginx有两个进程:

[[email protected] sbin]# ps -ef|grep nginx?

root? ? ? 7276? ? 1? 0 14:21 ?? ? ? ? 00:00:00 nginx: master process ./nginx

www? ? ? 7277? 7276? 0 14:21 ?? ? ? ? 00:00:00 nginx: worker process

root? ? ? 7279? 5197? 0 14:21 pts/1? ? 00:00:00 grep nginx

8.1 从容停止nginx

kill - QUIT nginx 主进程号

8.2 停止nginx所有进程

[[email protected] sbin]# pkill -9 nginx

?

三.Tomcat的安装

1.下载tomcat(http://tomcat.apache.org/)

2.解压缩

[[email protected] ~]# unzip apache-tomcat-6.0.30.zip

[[email protected] ~]# mv apache-tomcat-6.0.30/ /usr/local/

[[email protected] ~]cd /usr/local/

[[email protected] local]# ln -s /usr/local/apache-tomcat-6.0.30/ /usr/local/tomcat

[[email protected] local]# cd tomcat/bin/

[[email protected] bin]#ls

[[email protected] bin]#vim catalina.sh

添加以下内容:

CATALINA_HOME=/usr/local/apache-tomcat-6.0.30/

[[email protected] local]#chmod +x *.sh

3.启动tomcat服务器

[[email protected] tomcat]#?/usr/local/tomcat /bin/catalina.sh start

Using CATALINA_BASE:?? /usr/local/apache-tomcat-6.0.30/

Using CATALINA_HOME:?? /usr/local/apache-tomcat-6.0.30/

Using CATALINA_TMPDIR: /usr/local/apache-tomcat-6.0.30//temp

Using JRE_HOME:??????? /usr/local/jdk1.6.0_05

Using CLASSPATH:?????? /usr/local/apache-tomcat-6.0.30//bin/bootstrap.jar

[[email protected] logs]# cd /usr/local/tomcat/logs/

[[email protected] logs]# tail -f catalina.out

??????? at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

??????? at java.lang.reflect.Method.invoke(Method.java:597)

??????? at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)

??????? at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

Jul 4, 2011 11:06:57 AM org.apache.coyote.http11.Http11Protocol pause

INFO: Pausing Coyote HTTP/1.1 on http-8080

Jul 4, 2011 11:06:58 AM org.apache.catalina.core.StandardService stop

INFO: Stopping service Catalina

Jul 4, 2011 11:06:58 AM org.apache.coyote.http11.Http11Protocol destroy

INFO: Stopping Coyote HTTP/1.1 on http-8080

4.在浏览器中输入

http://localhost:8080/(如果不是本机,则输入对应的ip地址)

测试出现tomcat页面则测试成功

ps:需要说明的是tomcat的默认测试页面是放在webapps下面,这个其实是在server.xml文件中配置的,如下所示:

<Host name="localhost" ?appBase="webapps"

? ? ? ? ? ? unpackWARs="true" autoDeploy="true"

? ? ? ? ? ? xmlValidation="false" xmlNamespaceAware="false">

[[email protected]_SYS apache-tomcat-6.0.30]# ls

LICENSE ?NOTICE ?RELEASE-NOTES ?RUNNING.txt ?bin ?conf ?lib ?logs ?temp ?webapps ?work

? ? ? ? 1)webapps文件夹主要用于web应用程序部署,比如你可以把你的应用程序包,如war文件拷到该目录下,容器会自动部署。

  2)conf文件夹下主要是放置tomcat的服务器的相关配置文件

5.添加应用,再次进行测试

在webapps目录下放测试包(注意:webaapps目录下面主要是放应用包的.war在tomcat重启访问后会自动解压

[[email protected] webapps]# pwd
/usr/local/tomcat/webapps

[[email protected] webapps]# tar -zxvf moni2.tar.gz?

[[email protected] webapps]# ls
docs? examples? host-manager? manager
??moni2? moni2.tar.gz? ROOT

[[email protected] webapps]#?/usr/local/tomcat/bin/catalina.sh start(重启tomcat)
Using CATALINA_BASE:?? /usr/local/apache-tomcat-6.0.30/
Using CATALINA_HOME:?? /usr/local/apache-tomcat-6.0.30/
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-6.0.30//temp
Using JRE_HOME:??????? /usr/local/jdk1.6.0_05
Using CLASSPATH:?????? /usr/local/apache-tomcat-6.0.30//bin/bootstrap.jar

在浏览器中输入如下地址:

http://192.168.55.229:8080/moni2/

6.修改tomcat的监听端口

[[email protected] ~]# ?cd ?/usr/local/tomcat/conf

[[email protected] ~]# ls

[[email protected] ~]# vim server.xml

<Server port="8005" shutdown="SHUTDOWN">【停止tomcat时的端口】

?<Connector port="8081" protocol="HTTP/1.1"

? ? ? ? ? ? ? ?connectionTimeout="20000"

? ? ? ? ? ? ? ?redirectPort="8443" /> 【tomcat默认的监听端口是8080,现在改成8081】

?<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />【apache+tomcat模式时访问tomcat的端口】

?

现在重启tomcat。访问http://192.168.55.229:8081/moni2/【注意:这时就需要修改端口了,嘿嘿。。。】

?

四.MySQL的安装

在Linux中安装MySQL,通常为RPM与源码方式安装。对于生产环境而言,由于需要自定义诸如安装路径、数据文件位置、字符集以及支持的存储引擎等多以源码方式来进行安装。之前有写过一篇关于源码安装的文章,Linux下基于源码方式安装MySQL 5.6(http://www.linuxidc.com/Linux/2014-10/108040.htm),但不是很完整,因此该文可以作为其补充。以下为具体安装步骤,供大家参考。

1、安装前的有关描述
必备的包和工具
? gcc/g++ :MySQL 5.6开始,需要使用g++进行编译。
? cmake? :MySQL 5.5开始,使用cmake进行工程管理,cmake需要2.8以上版本。
? bison? :MySQL语法解析器需要使用bison进行编译。
? ncurses-devel :用于终端操作的开发包。
? zlib? ? :MySQL使用zlib进行压缩

功能需要的包
? libxml? :用于XML输入输出方式的支持。
? openssl? :使用openssl安全套接字方式通信。
? dtrace? :用于诊断MySQL问题。

有关MySQL编译参数
? CMAKE_BUILD_TYPE? ? ? ? ? ? 编译的版本类型:RelWithDebInfo和Debug,不同之处是RelWithDebInfo会进行优化。
? CMAKE_INSTALL_PREFIX? ? ? ? 指定make install安装的目标路径。
? SYSCONFDIR? ? ? ? ? ? ? ? ? 指定配置文件的默认路径。
? MYSQL_DATADIR? ? ? ? ? ? ? 指定data目录的默认路径。
? WITH_DEBUG? ? ? ? ? ? ? ? ? 指定是否有debugging信息,一般用于源码调试时,打开WITH_DEBUG,生产环境关闭。
? ENABLED_PROFILING? ? ? ? ? 指定是否可以使用show profile显示操作执行的详细信息。
? DEFAULT_CHARSET? ? ? ? ? ? 指定默认字符集,可以在启动的配置文件中指定。
? DEFAULT_COLLATION? ? ? ? ? 指定默认字符比较、排序的规则。
? WITH_EXTRA_CHARSETS? ? ? ? 指定其他可能使用的字符集。
? WITH_SSL? ? ? ? ? ? ? ? ? ? 指定SSL的类型,从5.6.6开始默认bundled类型,此外也可以指定SSL库的路径地址。
? WITH_ZLIB? ? ? ? ? ? ? ? ? 指定zlib的类型,用于压缩功能。
? ENABLED_LOCAL_INFILE? ? ? ? 指定是否允许使用load data infile功能。
? WITH_EMBEDDED_SERVER? ? ? ? 指定是否编译libmysqld嵌入式库。
? INSTALL_LAYOUT? ? ? ? ? ? ? 指定安装的布局类型。
? WITH_storage_STORAGE_ENGINE 指定编译支持的存储引擎,默认支持MyISAM,MERGE,MEMORY,CSV存储引擎。
? 更多详细参数可参考?http://dev.mysql.com/doc/refman/5.5/en/source-configuration-options.html

?

本次安装环境
? [[email protected] ~]# cat /etc/issue
??CentOS?release 5.9 (Final)
? Kernel \r on an \m
??
? [[email protected] ~]# uname -a
? Linux SZ-RD03 2.6.18-348.el5 #1 SMP Tue Jan 8 17:53:53 EST 2013 x86_64 x86_64 x86_64 GNU/Linux
??
? MySQL版本:5.6.12-log Source distribution
? 安装目录为:/app/soft/mysql/
? 数据目录为:/data/mysqldata?
? 存储引擎包括:MEMORY,MyISAM,InnoDB等?
? 字符集为:UTF8

2、源码安装MySQL?
先安装需要用到的库:
? yum -y install gcc gcc-c++
? yum -y install ncurses-devel

下载所需软件包:
? #将下载的文件都放到/usr/local/src目录下,如下
? # cd /usr/local/src
? # wget?http://www.cmake.org/files/v2.8/cmake-2.8.11.1.tar.gz
? # wget?http://ftp.gnu.org/gnu/bison/bison-2.7.tar.gz
? # wget?http://ftp.gnu.org/gnu/m4/m4-1.4.16.tar.gz
? # wget?http://www.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.12.tar.gz/from/http://cdn.mysql.com/

?

安装cmake编译器
? # cd /usr/local/src
? # tar -xvf cmake-2.8.11.1.tar.gz
? # cd cmake-2.8.11.1
? # ./bootstrap
? # make && make install

安装m4
? # cd /usr/local/src
? # tar -xvf m4-1.4.16.tar.gz
? # cd m4-1.4.16
? # ./configure && make && make install

安装bison
? # cd /usr/local/src
? # tar -xvf bison-2.7.tar.gz
? # cd bison-2.7
? # ./configure && make && make install

?

创建mysql用户与组,相关目录
? # /usr/sbin/groupadd mysql
? # /usr/sbin/useradd -g mysql mysql
? # mkdir -p /app/soft/mysql
? # chown -R mysql:mysql /app/soft/mysql
? # mkdir -p /data/mysqldata
? # chown -R mysql:mysql /data/mysqldata/

安装mysql
? # cd /usr/local/src
? # tar -xvf mysql-5.6.12.tar.gz?
? # export CFLAGS="-O3 -g -fno-exceptions -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing"
? # export CXXFLAGS="-O3 -g -fno-exceptions -fno-rtti -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing"
? # export CXX=g++
? # cd mysql-5.6.12
? # cmake -DCMAKE_INSTALL_PREFIX=/app/soft/mysql/ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock?
? ? -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=utf8,gbk??
? ? -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1?
? ? -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/data/mysqldata/ -DSYSCONFDIR=/app/soft/mysql/?
? ? -DWITH_SSL=bundled -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1?
? ? -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DENABLE_DOWNLOADS=1
? # make && make install

?

初始化数据库
? # cd /app/soft/mysql/
? # ./scripts/mysql_install_db --user=mysql --ldata=/data/mysqldata

?

3、安装后的收尾工作
配置运行环境
? # vi /etc/profile
? # PATH=/app/soft/mysql/bin:/app/soft/mysql/lib:$PATH
? # export PATH
? # source /etc/profile

创建开机启动
? # cp support-files/my-default.cnf /etc/my.cnf? #也可以将my.cnf直接复制到安装文件位置
? # cp support-files/mysql.server /etc/init.d/mysqld?
? # chkconfig --level 35 mysqld on?
? # service mysqld start


查检是否启动成功
? netstat -ntlp? | grep mysql

设置root密码
? # mysqladmin -u root password 'xxx'

登陆账号

? # mysql -uroot -pxxx

配置参数
? 根据系统及业务需求配置my.cnf文件

?

若出现错误,vim /etc/my.cnf  修改其中的参数[client]socket = /var/lib/mysql/mysql.sockdefault-character-set=utf8[mysqld]datadir=/app/soft/mysqlsocket=/var/lib/mysql/mysql.sockcharacter-set-server=utf8[mysql]socket=/var/lib/mysql/mysql.sockno-auto-rehashdefault-character-set=utf8[mysqldump]socket=/var/lib/mysql/mysql.sock[mysqladmin]socket=/var/lib/mysql/mysql.sock

?

?

操作MySql非常简单,就5步骤,如下:

1.进入 mysql:

?
1
/usr/local/mysql/bin/mysql -u root -p

2.使用 mysql库 :

?
1
use mysql;

3.查看用户表 :

?
1
SELECT `Host`,`User` FROM user;

?

五.Scrapy的安装

参考url:http://www.cnblogs.com/xiaoruoen/archive/2013/02/27/2933854.html

参考url:http://www.coder4.com/archives/3660

Centos下安装Scrapy

Scrapy是一个开源的机遇twisted框架的python的单机爬虫,该爬虫实际上包含大多数网页抓取的工具包,用于爬虫下载端以及抽取端。

安装环境:

?

centos5.4python2.7.3

?

安装步骤:

1.下载python2.7??http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz

复制代码
[[email protected] ~]# wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz -P /opt[[email protected]-websgs opt]# tar xvf Python-2.7.3.tgz [[email protected]-websgs Python-2.7.3]# ./configure [[email protected]-websgs Python-2.7.3]# make && make install
复制代码

 验证python2.7安装

[[email protected] Python-2.7.3]# python2.7Python 2.7.3 (default, Feb 28 2013, 03:08:43) [GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> exit()

2.安装setuptools,http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz

[[email protected] ~]# wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz -P /opt/[[email protected] opt]# tar zxvf setuptools-0.6c11.tar.gz [[email protected]-websgs setuptools-0.6c11]# python2.7 setup.py  install

?

3.安装Twisted

[[email protected] setuptools-0.6c11]# easy_install Twisted......Installed /usr/local/lib/python2.7/site-packages/Twisted-12.3.0-py2.7-linux-x86_64.egg......Installed /usr/local/lib/python2.7/site-packages/zope.interface-4.0.4-py2.7-linux-x86_64.egg

Twisted要安装zope.interface,可以从下面地址下载

zope.interface:http://pypi.python.org/packages/source/z/zope.interface/zope.interface-4.0.1.tar.gz

twisted:http://twistedmatrix.com/Releases/Twisted/12.1/Twisted-12.1.0.tar.bz2

5.安装w3lib

复制代码
[[email protected] setuptools-0.6c11]# easy_install -U w3libSearching for w3libReading http://pypi.python.org/simple/w3lib/Reading http://github.com/scrapy/w3libBest match: w3lib 1.2Downloading http://pypi.python.org/packages/source/w/w3lib/w3lib-1.2.tar.gz#md5=f929d5973a9fda59587b09a72f185a9eProcessing w3lib-1.2.tar.gzRunning w3lib-1.2/setup.py -q bdist_egg --dist-dir /tmp/easy_install-wm_1BB/w3lib-1.2/egg-dist-tmp-2DQHY_zip_safe flag not set; analyzing archive contents...Adding w3lib 1.2 to easy-install.pth fileInstalled /usr/local/lib/python2.7/site-packages/w3lib-1.2-py2.7.eggProcessing dependencies for w3libFinished processing dependencies for w3lib
复制代码

w3lib:http://pypi.python.org/packages/source/w/w3lib/w3lib-1.2.tar.gz

6.安装libxml2或者用easy_install安装lxml

[[email protected] lxml-3.1.0]# easy_install lxml

验证lxml安装

[[email protected] lxml-3.1.0]# python2.7Python 2.7.3 (default, Feb 28 2013, 03:08:43) [GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> import lxml>>> exit()

也可以安装libxml2,官网上推荐安装2.6.28或者以上的版本,但在官网上没找到,我先是安装的2.6.9的版本,运行scrapy时报以下错误

复制代码
Traceback (most recent call last):  File "/usr/local/bin/scrapy", line 5, in <module>    pkg_resources.run_script('Scrapy==0.14.4', 'scrapy')  File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 489, in run_script  File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 1207, in run_script  File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/EGG-INFO/scripts/scrapy", line 4, in <module>    execute()  File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/cmdline.py", line 112, in execute    cmds = _get_commands_dict(inproject)  File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/cmdline.py", line 37, in _get_commands_dict    cmds = _get_commands_from_module('scrapy.commands', inproject)  File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/cmdline.py", line 30, in _get_commands_from_module    for cmd in _iter_command_classes(module):  File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/cmdline.py", line 21, in _iter_command_classes    for module in walk_modules(module_name):  File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/utils/misc.py", line 65, in walk_modules    submod = __import__(fullpath, {}, {}, [''])  File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/commands/shell.py", line 8, in <module>    from scrapy.shell import Shell  File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/shell.py", line 14, in <module>    from scrapy.selector import XPathSelector, XmlXPathSelector, HtmlXPathSelector  File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/selector/__init__.py", line 30, in <module>    from scrapy.selector.libxml2sel import *  File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/selector/libxml2sel.py", line 12, in <module>    from .factories import xmlDoc_from_html, xmlDoc_from_xml  File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/selector/factories.py", line 14, in <module>    libxml2.HTML_PARSE_NOERROR + \AttributeError: 'module' object has no attribute 'HTML_PARSE_RECOVER'
复制代码

升级到2.6.21版本以后解决了。

libxml2.6.1:ftp://xmlsoft.org/libxml2/python/libxml2-python-2.6.21.tar.gz

7.安装pyOpenSSL(这个是可选安装的,主要为了使scrapy能够支持https)

用easy_install pyOpenSSL安装的是pyOpenSSL-0.13版本,没安装成功,于是手动下载.011版本来进行安装。

[[email protected] opt]# wget http://launchpadlibrarian.net/58498441/pyOpenSSL-0.11.tar.gz -P /opt[[email protected] opt]# tar zxvf pyOpenSSL-0.11.tar.gz [[email protected]-websgs pyOpenSSL-0.11]# python2.7 setup.py install

pyOpenSSL:http://launchpadlibrarian.net/58498441/pyOpenSSL-0.11.tar.gz

8.安装scrapy

[[email protected] pyOpenSSL-0.11]# easy_install -U Scrapy

验证安装

复制代码
[[email protected] pyOpenSSL-0.11]# scrapyScrapy 0.16.4 - no active projectUsage:  scrapy <command> [options] [args]Available commands:  fetch         Fetch a URL using the Scrapy downloader  runspider     Run a self-contained spider (without creating a project)  settings      Get settings values  shell         Interactive scraping console  startproject  Create new project  version       Print Scrapy version  view          Open URL in browser, as seen by Scrapy  [ more ]      More commands available when run from project directoryUse "scrapy <command> -h" to see more info about a command
复制代码

scrapy:http://pypi.python.org/packages/source/S/Scrapy/Scrapy-0.14.4.tar.gz

总结:

pyOpenSSL单独安装的时候不成功,也可以先下载pyOpenSSL0.11进行安装,再使用easy_install -U Scrapy进行全程安装

?

Python安装lxml(编译安装其依赖的库)

依赖说明:

lxml是libxml2、libxslt的PythonBinding,依赖于libxml2和libxslt。libxslt依赖于libxml2。

由于我们的程序可能要分发到别的机器运行,所以要提取出一个可独立拷贝走的运行时环境,假设该目录为/home/liheyuan/env

1、安装libxml2

2、安装libxslt

3、安装lxml

依赖的库都搞定了,终于轮到Python的Binding了。

我们假设Python已经通过编译安装的方式,放到了同样的目录下:/home/liheyuan/env

最后看下效果:

错误提示,提示etree.so依赖错误!

由于so是我们自己build的,且不在系统默认环境变量路径内,所以我们需要把path加到系统环境变量(so)路径内,如下:

下次重新登陆Terminal就可以了!

?

六.MongoDB的安装


Linux下Mongodb安装和启动配置

1.下载安装包
wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.8.2.tgz
下载完成后解压缩压缩包
tar zxf mongodb-linux-i686-1.8.2.tgz
?
2. 安装准备
将mongodb移动到/usr/local/mongdb文件夹
mv mongodb-linux-i686-1.8.2 /usr/local/mongodb
?
创建数据库文件夹与日志文件
mkdir /usr/local/mongodb/data
touch /usr/local/mongodb/logs
?
======在下一步启动mongodb的时候,有可能提示要安装一些包,如果yum配置是最新最全的话,直接yum install ***(依赖包名) ?安装即可!?
3. 设置开机自启动
将mongodb启动项目追加入rc.local保证mongodb在服务器开机时启动?
echo "/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data –logpath=/usr/local/mongodb/logs –logappend ?--auth –port=27017" >> /etc/rc.local
?
4. 启动mongodb
cd到mongodb目录下的bin文件夹启动mongodb
?

./mongod --dbpath=/mnt/softs/mongodb/data --fork --logpath=/mnt/softs/mongodb/logs

//下面这个是需要权限的登录方式, 用户连接需要用户名和密码
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend ?--auth ?--port=27017 --fork
?
?
//这个是不需要密码的
/usr/local/server/mongodb/bin/mongod --dbpath=/usr/local/server/mongodb/data --logpath=/usr/local/server/mongodb/logs --logappend ?--port=27017 --fork
?
?
5. 参数解释: --dbpath 数据库路径(数据文件)
--logpath 日志文件路径
--master 指定为主机器
--slave 指定为从机器
--source 指定主机器的IP地址
--pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)。
--logappend 日志文件末尾添加
--port 启用端口号
--fork 在后台运行
--only 指定只复制哪一个数据库
--slavedelay 指从复制检测的时间间隔
--auth 是否需要验证权限登录(用户名和密码)
?
?
-h [ --help ] ? ? ? ? ? ? show this usage information
--version ? ? ? ? ? ? ? ? show version information
-f [ --config ] arg ? ? ? configuration file specifying additional options
--port arg ? ? ? ? ? ? ? ?specify port number
--bind_ip arg ? ? ? ? ? ? local ip address to bind listener - all local ips
? ? ? ? ? ? ? ? ? ? ? ? ? ?bound by default
-v [ --verbose ] ? ? ? ? ?be more verbose (include multiple times for more
? ? ? ? ? ? ? ? ? ? ? ? ? ?verbosity e.g. -vvvvv)
--dbpath arg (=/data/db/) directory for datafiles ? ?指定数据存放目录
--quiet ? ? ? ? ? ? ? ? ? quieter output ? 静默模式
--logpath arg ? ? ? ? ? ? file to send all output to instead of stdout ? 指定日志存放目录
--logappend ? ? ? ? ? ? ? appnd to logpath instead of over-writing 指定日志是以追加还是以覆盖的方式写入日志文件
--fork ? ? ? ? ? ? ? ? ? ?fork server process ? 以创建子进程的方式运行
--cpu ? ? ? ? ? ? ? ? ? ? periodically show cpu and iowait utilization 周期性的显示cpu和io的使用情况
--noauth ? ? ? ? ? ? ? ? ?run without security 无认证模式运行
--auth ? ? ? ? ? ? ? ? ? ?run with security 认证模式运行
--objcheck ? ? ? ? ? ? ? ?inspect client data for validity on receipt 检查客户端输入数据的有效性检查
--quota ? ? ? ? ? ? ? ? ? enable db quota management ? 开始数据库配额的管理
--quotaFiles arg ? ? ? ? ?number of files allower per db, requires --quota 规定每个数据库允许的文件数
--appsrvpath arg ? ? ? ? ?root directory for the babble app server?
--nocursors ? ? ? ? ? ? ? diagnostic/debugging option 调试诊断选项
--nohints ? ? ? ? ? ? ? ? ignore query hints 忽略查询命中率
--nohttpinterface ? ? ? ? disable http interface 关闭http接口,默认是28017
--noscripting ? ? ? ? ? ? disable scripting engine 关闭脚本引擎
--noprealloc ? ? ? ? ? ? ?disable data file preallocation 关闭数据库文件大小预分配
--smallfiles ? ? ? ? ? ? ?use a smaller default file size 使用较小的默认文件大小
--nssize arg (=16) ? ? ? ?.ns file size (in MB) for new databases 新数据库ns文件的默认大小
--diaglog arg ? ? ? ? ? ? 0=off 1=W 2=R 3=both 7=W+some reads 提供的方式,是只读,只写,还是读写都行,还是主要写+部分的读模式
--sysinfo ? ? ? ? ? ? ? ? print some diagnostic system information 打印系统诊断信息
--upgrade ? ? ? ? ? ? ? ? upgrade db if needed 如果需要就更新数据库
--repair ? ? ? ? ? ? ? ? ?run repair on all dbs 修复所有的数据库
--notablescan ? ? ? ? ? ? do not allow table scans 不运行表扫描
--syncdelay arg (=60) ? ? seconds between disk syncs (0 for never) 系统同步刷新磁盘的时间,默认是60s
?
Replication options:
--master ? ? ? ? ? ? ?master mode 主复制模式
--slave ? ? ? ? ? ? ? slave mode 从复制模式
--source arg ? ? ? ? ?when slave: specify master as <server:port> 当为从时,指定主的地址和端口
--only arg ? ? ? ? ? ?when slave: specify a single database to replicate 当为从时,指定需要从主复制的单一库
--pairwith arg ? ? ? ?address of server to pair with
--arbiter arg ? ? ? ? address of arbiter server 仲裁服务器,在主主中和pair中用到
--autoresync ? ? ? ? ?automatically resync if slave data is stale 自动同步从的数据
--oplogSize arg ? ? ? size limit (in MB) for op log 指定操作日志的大小
--opIdMem arg ? ? ? ? size limit (in bytes) for in memory storage of op ids指定存储操作日志的内存大小
?
Sharding options:
--configsvr ? ? ? ? ? declare this is a config db of a cluster 指定shard中的配置服务器
--shardsvr ? ? ? ? ? ?declare this is a shard db of a cluster 指定shard服务器
?
6. 进入数据库的CLI管理界面
cd到mongodb目录下的bin文件夹,执行命令./mongo
运行如下:
[[email protected] mongodb]# ./bin/mongo
MongoDB shell version: 1.8.2
connecting to: test
> use test;
switched to db test
?
若数据库出现如不能连上,则是一个data目录下的mongod.lock文件的问题,可以用如下的修复的命令,
mongod --repair
?
?
mongodb的操作:

MongoDB常用操作命令大全

成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作。输入help可以看到基本操作命令,只是MongoDB没有创建数据库的命令,但有类似的命令
?
<iframe id="cproIframe_u1892994_2" src="http://pos.baidu.com/acom?adn=3&amp;at=231&amp;aurl=&amp;cad=1&amp;ccd=24&amp;cec=GBK&amp;cfv=17&amp;ch=0&amp;col=zh-CN&amp;conBW=0&amp;conOP=1&amp;cpa=1&amp;dai=2&amp;dis=0&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DjrIw4FV4u2x_X9sRqeXwBZ9InLAZ4z0ubJsIUPKnax3ZYaKs-MLq7J8qOVId5Wqr%26wd%3D%26eqid%3D9291429100128f770000000555d549a5&amp;ltu=http%3A%2F%2Fwww.jb51.net%2Farticle%2F48217.htm&amp;lu_161=0&amp;lunum=6&amp;n=jb51_cpr&amp;pcs=1216x638&amp;pis=10000x10000&amp;ps=516x143&amp;psr=1280x800&amp;pss=1216x517&amp;qn=af505fb17bc2b339&amp;rad=&amp;rsi0=580&amp;rsi1=90&amp;rsi5=4&amp;rss0=%23FFFFFF&amp;rss1=%23F7FCFF&amp;rss2=%230000ff&amp;rss3=%23444444&amp;rss4=%23008000&amp;rss5=&amp;rss6=%23e10900&amp;rss7=&amp;scale=&amp;skin=tabcloud_skin_3&amp;stid=5&amp;td_id=1892994&amp;titFF=%E5%AE%8B%E4%BD%93&amp;titFS=12&amp;titTA=left&amp;tn=text_default_580_90&amp;tpr=1440041384412&amp;ts=1&amp;version=2.0&amp;xuanting=0&amp;dtm=BAIDU_DUP2_SETJSONADSLOT&amp;dc=2&amp;di=u1892994&amp;ti=MongoDB%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8_MongoDB_%E8%84%9A%E6%9C%AC%E4%B9%8B%E5%AE%B6&amp;tt=1440041384397.102.115.119" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" align="center,center" width="580" height="90"></iframe>

如:如果你想创建一个“myTest”的数据库,先运行use myTest命令,之后就做一些操作(如:db.createCollection('user')),这样就可以创建一个名叫“myTest”的数据库。

一、数据库常用命令
1、Help查看命令提示

复制代码代码如下:
help
db.help();
db.yourColl.help();
db.youColl.find().help();
rs.help();

2、切换/创建数据库
复制代码代码如下:
use yourDB; 当创建一个集合(table)的时候会自动创建当前数据库

3、查询所有数据库
复制代码代码如下:
show dbs;

4、删除当前使用数据库
复制代码代码如下:
db.dropDatabase();

5、从指定主机上克隆数据库
复制代码代码如下:
db.cloneDatabase(“127.0.0.1”); 将指定机器上的数据库的数据克隆到当前数据库

6、从指定的机器上复制指定数据库数据到某个数据库
复制代码代码如下:
db.copyDatabase("mydb", "temp", "127.0.0.1");将本机的mydb的数据复制到temp数据库中

7、修复当前数据库
复制代码代码如下:
db.repairDatabase();

8、查看当前使用的数据库
复制代码代码如下:
db.getName();
db; db和getName方法是一样的效果,都可以查询当前使用的数据库

9、显示当前db状态
复制代码代码如下:
db.stats();

10、当前db版本
复制代码代码如下:
db.version();

11、查看当前db的链接机器地址
复制代码代码如下:
db.getMongo();

?

二、Collection聚集集合
1、创建一个聚集集合(table)

复制代码代码如下:
db.createCollection(“collName”, {size: 20, capped: 5, max: 100});//创建成功会显示{“ok”:1}
//判断集合是否为定容量db.collName.isCapped();

2、得到指定名称的聚集集合(table)
复制代码代码如下:
db.getCollection("account");

3、得到当前db的所有聚集集合
复制代码代码如下:
db.getCollectionNames();

4、显示当前db所有聚集索引的状态
复制代码代码如下:
db.printCollectionStats();

三、用户相关?
1、添加一个用户
复制代码代码如下:
db.addUser("name");
db.addUser("userName", "pwd123", true); 添加用户、设置密码、是否只读

2、数据库认证、安全模式
复制代码代码如下:
db.auth("userName", "123123");

3、显示当前所有用户
复制代码代码如下:
show users;

4、删除用户
复制代码代码如下:
db.removeUser("userName");

四、聚集集合查询?
1、查询所有记录
复制代码代码如下:
db.userInfo.find();
相当于:select* from userInfo;

默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”
但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize= 50;这样每页就显示50条记录了。
2、查询去掉后的当前聚集集合中的某列的重复数据
复制代码代码如下:
db.userInfo.distinct("name");
会过滤掉name中的相同数据
相当于:select distict name from userInfo;

3、查询age = 22的记录
复制代码代码如下:
db.userInfo.find({"age": 22});
相当于: select * from userInfo where age = 22;

4、查询age > 22的记录
复制代码代码如下:
db.userInfo.find({age: {$gt: 22}});
相当于:select * from userInfo where age >22;

5、查询age < 22的记录
复制代码代码如下:
db.userInfo.find({age: {$lt: 22}});
相当于:select * from userInfo where age <22;

6、查询age >= 25的记录
复制代码代码如下:
db.userInfo.find({age: {$gte: 25}});
相当于:select * from userInfo where age >= 25;

7、查询age <= 25的记录
复制代码代码如下:
db.userInfo.find({age: {$lte: 25}});

8、查询age >= 23 并且 age <= 26
复制代码代码如下:
db.userInfo.find({age: {$gte: 23, $lte: 26}});

9、查询name中包含 mongo的数据
复制代码代码如下:
db.userInfo.find({name: /mongo/});
//相当于%%
[code]select * from userInfo where name like ‘%mongo%';

10、查询name中以mongo开头的
复制代码代码如下:
db.userInfo.find({name: /^mongo/});
select * from userInfo where name like ‘mongo%';

11、查询指定列name、age数据
复制代码代码如下:
db.userInfo.find({}, {name: 1, age: 1});
相当于:select name, age from userInfo;

当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。
12、查询指定列name、age数据, age > 25
复制代码代码如下:
db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
相当于:select name, age from userInfo where age >25;

13、按照年龄排序
复制代码代码如下:
升序:db.userInfo.find().sort({age: 1});
降序:db.userInfo.find().sort({age: -1});

14、查询name = zhangsan, age = 22的数据
复制代码代码如下:
db.userInfo.find({name: 'zhangsan', age: 22});
相当于:select * from userInfo where name = ‘zhangsan' and age = ‘22';

15、查询前5条数据
复制代码代码如下:
db.userInfo.find().limit(5);
相当于:selecttop 5 * from userInfo;

16、查询10条以后的数据
复制代码代码如下:
db.userInfo.find().skip(10);
相当于:select * from userInfo where id not in (
selecttop 10 * from userInfo
);

17、查询在5-10之间的数据
复制代码代码如下:
db.userInfo.find().limit(10).skip(5);

可用于分页,limit是pageSize,skip是第几页*pageSize
18、or与 查询
复制代码代码如下:
db.userInfo.find({$or: [{age: 22}, {age: 25}]});
相当于:select * from userInfo where age = 22 or age = 25;

19、查询第一条数据
复制代码代码如下:
db.userInfo.findOne();
相当于:selecttop 1 * from userInfo;
db.userInfo.find().limit(1);

20、查询某个结果集的记录条数
复制代码代码如下:
db.userInfo.find({age: {$gte: 25}}).count();
相当于:select count(*) from userInfo where age >= 20;

21、按照某列进行排序
复制代码代码如下:
db.userInfo.find({sex: {$exists: true}}).count();
相当于:select count(sex) from userInfo;

五、索引
1、创建索引
复制代码代码如下:
db.userInfo.ensureIndex({name: 1});
db.userInfo.ensureIndex({name: 1, ts: -1});

2、查询当前聚集集合所有索引
复制代码代码如下:
db.userInfo.getIndexes();

3、查看总索引记录大小
复制代码代码如下:
db.userInfo.totalIndexSize();

4、读取当前集合的所有index信息
复制代码代码如下:
db.users.reIndex();

5、删除指定索引
复制代码代码如下:
db.users.dropIndex("name_1");

6、删除所有索引索引
复制代码代码如下:
db.users.dropIndexes();

六、修改、添加、删除集合数据
1、添加
复制代码代码如下:
db.users.save({name: ‘zhangsan', age: 25, sex: true});

添加的数据的数据列,没有固定,根据添加的数据为准
2、修改
复制代码代码如下:
db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);
相当于:update users set name = ‘changeName' where age = 25;
db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
相当于:update users set age = age + 50 where name = ‘Lisi';
db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);
相当于:update users set age = age + 50, name = ‘hoho' where name = ‘Lisi';

3、删除
复制代码代码如下:
db.users.remove({age: 132});

4、查询修改删除
复制代码代码如下:
db.users.findAndModify({
??? query: {age: {$gte: 25}},?
??? sort: {age: -1},?
??? update: {$set: {name: 'a2'}, $inc: {age: 2}},
??? remove: true
});
db.runCommand({ findandmodify : "users",?
??? query: {age: {$gte: 25}},?
??? sort: {age: -1},?
??? update: {$set: {name: 'a2'}, $inc: {age: 2}},
??? remove: true
});

update 或 remove 其中一个是必须的参数; 其他参数可选。
参数??? 详解???? 默认值?
query??? 查询过滤条件??? {}?
sort??? 如果多个文档符合查询过滤条件,将以该参数指定的排列方式选择出排在首位的对象,该对象将被操作??? {}?
remove??? 若为true,被选中对象将在返回前被删除??? N/A?
update??? 一个 修改器对象
N/A?
new??? 若为true,将返回修改后的对象而不是原始对象。在删除操作中,该参数被忽略。??? false?
fields??? 参见Retrieving a Subset of Fields (1.5.0+)?
All fields?
upsert??? 创建新对象若查询结果为空。 示例 (1.5.4+)?
false?
七、语句块操作?
1、简单Hello World
复制代码代码如下:
print("Hello World!");

这种写法调用了print函数,和直接写入"Hello World!"的效果是一样的;
2、将一个对象转换成json
复制代码代码如下:
tojson(new Object());
tojson(new Object('a'));

3、循环添加数据
复制代码代码如下:
> for (var i = 0; i < 30; i++) {
... db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});
... };

这样就循环添加了30条数据,同样也可以省略括号的写法
复制代码代码如下:
> for (var i = 0; i < 30; i++) db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});

也是可以的,当你用db.users.find()查询的时候,显示多条数据而无法一页显示的情况下,可以用it查看下一页的信息;
4、find 游标查询
复制代码代码如下:
>var cursor = db.users.find();
> while (cursor.hasNext()) {?
??? printjson(cursor.next());?
}

这样就查询所有的users信息,同样可以这样写
复制代码代码如下:
var cursor = db.users.find();
while (cursor.hasNext()) { printjson(cursor.next); }

同样可以省略{}号
5、forEach迭代循环
复制代码代码如下:
db.users.find().forEach(printjson);

forEach中必须传递一个函数来处理每条迭代的数据信息
6、将find游标当数组处理
复制代码代码如下:
var cursor = db.users.find();
cursor[4];

取得下标索引为4的那条数据
既然可以当做数组处理,那么就可以获得它的长度:cursor.length();或者cursor.count();
那样我们也可以用循环显示数据
复制代码代码如下:
for (var i = 0, len = c.length(); i < len; i++) printjson(c[i]);

7、将find游标转换成数组
复制代码代码如下:
> var arr = db.users.find().toArray();
> printjson(arr[2]);

用toArray方法将其转换为数组
8、定制我们自己的查询结果
只显示age <= 28的并且只显示age这列数据
复制代码代码如下:
db.users.find({age: {$lte: 28}}, {age: 1}).forEach(printjson);
db.users.find({age: {$lte: 28}}, {age: true}).forEach(printjson);

排除age的列
复制代码代码如下:
db.users.find({age: {$lte: 28}}, {age: false}).forEach(printjson);

9、forEach传递函数显示信息
复制代码代码如下:
db.things.find({x:4}).forEach(function(x) {print(tojson(x));});

?

八、其他?
1、查询之前的错误信息

复制代码代码如下:
db.getPrevError();

2、清除错误记录
复制代码代码如下:
db.resetError();

查看聚集集合基本信息
1、查看帮助? db.yourColl.help();
2、查询当前集合的数据条数? db.yourColl.count();
3、查看数据空间大小 db.userInfo.dataSize();
4、得到当前聚集集合所在的db db.userInfo.getDB();
5、得到当前聚集的状态 db.userInfo.stats();
6、得到聚集集合总大小 db.userInfo.totalSize();
7、聚集集合储存空间大小 db.userInfo.storageSize();
8、Shard版本信息? db.userInfo.getShardVersion()
9、聚集集合重命名 db.userInfo.renameCollection("users"); 将userInfo重命名为users
10、删除当前聚集集合 db.userInfo.drop();

?

?

复制代码代码如下:
show dbs:显示数据库列表?
show collections:显示当前数据库中的集合(类似关系数据库中的表)?
show users:显示用户?
use <db name>:切换当前数据库,这和MS-SQL里面的意思一样?
db.help():显示数据库操作命令,里面有很多的命令?
db.foo.help():显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令?
db.foo.find():对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据)?
db.foo.find( { a : 1 } ):对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1

?

http://blog.csdn.net/wwwyuanliang10000/article/details/38661561?

?

?