十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
最近在做一个关于NOSQL注入的实验,需要搭建数据库是mongodb的数据库网站环境环境。但是本人对mongodb数据库了解甚少,所以在搭建的过程中遇到了很多问题。因为菜,所以学。不知道有没有童靴在搭建环境的时候是不是也遇到了很多问题。
这篇文章是在做完实验之后写的,所以当中遇到的问题也没有去找办法截图,所以只是在下面提几个记忆犹新的问题。如果有同学遇到同样的问题,希望可以帮助你解决。不要整天在搭建环境,并且还没有完成(我就是这样,嘲笑我吧!!!)
创新互联-专业网站定制、快速模板网站建设、高性价比屏山网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式屏山网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖屏山地区。费用合理售后完善,十载实体公司更值得信赖。
1、php版本的安装影响php的mongodb数据库的扩展
本次安装选择php5.6的版本
2、安装时的依赖包问题
3、安装顺序问题
4、安装后配置文件和启动方式的问题
5、马虎
linux:CentOS7
apache:2.4.6
MongoDB:3.2.10
php:5.6
php-5.6:http://cn2.php.net/downloads.php
mongodb-3.2.10:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.10.tgz
mongodb的php扩展:http://pecl.php.net/get/mongo-1.5.5.tgz
apache服务安装没有特别的要求,直接用yum源安装就可以。
解答点:(依赖问题)
注意的是,一定要安装httpd-devel,因为这个包和apxs命令相关,此命令用来加载php模块,当在安装php的时候会用到。这个就属于安装依赖、包的问题。没有这个后面编译安装后php,Apache服务是没有办法加载libphp5.so这个模块的。
为了避免有个别包需要安装而没有安装的事故发生,直接:
yum install httpd* -y
(1)将下载的源码上传到服务器,然后就行解压安装
(2)安装之前应先创建有关目录和文件
mkdir /data/mongodb/dbs -p
touch /data/mongodb/log
作用,第一个目录是用来后面存放数据库数据的,第二个文件是用来存放数据库日志的文件,后面都会用的到。
(3)将压缩包解压到指定目录
tar -xvf mongodb-linux-x86_64-rhel62-3.2.10.gz -C /usr/local
(4)为了使用命令的方便,将数据库的文件路径加入到环境变量中
vi .bash_prefile
使环境变量能够生效,需要执行一条命令:
source .bash_prefile
(4)为数据库创建配置文件,启动数据库
vi /etc/mongodb.conf
dbpath=/date/mongodb/dbs //数据文件地址
logpath=/data/mongodb/log //日志文件地址
port=27071 //端口号(默认27017)
fork=true //后台运行
journal=true //启用日志选项
启动数据库:
mongod -f /etc/mongodb.conf
解答点(数据库启动方式问题)
面启动方式出现的问题进行一下解答,mongodb数据库默认的端口是27017,进入数据库的时候可以直接输入命令mongo就可以,但是由于我的一时马虎,将配置文件中写成了27071所以用开始的方法是没办法启动的。当改变了端口,进入数据库的方法是:
mongo localhost:端口号
例如我这里:mongo localhost:27071
(1)将下载的源码上传到服务器
(2)解压
tar -zxvf php-5.6.39.tar.gz
(3)安装相关依赖:
yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel gcc
这里编译安装的时候会需要很多相关依赖,为了方便,避免产生错误,在网上搜集了一些需要的依赖,同时,编译安装需要gcc,可以看一下自己有没有这个编译工具,没有的话也需要安装。
(4)进入解压后的目录,编译安装
cd php-5.6.39
./configure --prefix=/usr/local/php --with-config-file-path=/etc --with-apxs2=/usr/bin/apxs
--prefix 指定了安装位置
--with-config-file-path 指定php.ini的位置
--with-apxs2 整合 apache,apxs功能是使用mod_so中的LoadModule指令,加载指定模块到 apache,要求 apache 要打开SO模块
这里apxs的命令根据自己个人情况路径而定,查看apxs文件路径方法:
which apxs
(5)安装
make && make install
cp php.ini-production /etc/php.ini
(6)同样的,设置环境变量
使环境变量生效:source .bash_prefile
安装完之后看一看在/etc/httpd/modules/目录下有没有libphp5.so,有的话说明模块安装的没问题,如果这里没有这个模块的话,在apache解析php的时候会出现错误。
(1)将扩展的源码上传服务器
(2)解压:tar -zxvf mongo-1.5.5.tgz
(3)进入解压后的目录,生成执行文件configure
执行命令:phpize
是出错的,有办法解决
解决错误方法:
wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
tar -zvxf m4-1.4.9.tar.gz
cd m4-1.4.9/
./configure && make && make installyum install autoconf.
重新执行phpize命令就ok了
(4)执行configure文件生成Makefile文件
./configure --enable-mongo=share --with-php-config=php-config
(5)安装
make && make install
到这里基本的安装是差不多已经完成了,但是环境还是不能使用,接下来就是对配置文件的修改。
(1)当安装完成扩展的时候,会出现这样的一句话,extension_dir=/usr/lib/php/extensions/debug-non-zts-20151012/
可能和我的不同,但是都是类似的,将这样的一句话复制下来,打开/etc/php.ini文件,添加进去,同时还要添加extension=mongo.so
这两个都是在启用mongodb的扩展。没有这个是没有办法对数据库操作的。
vi /etc/php.ini
追加:
extension_dir=/usr/lib/php/extensions/debug-non-zts-20151012/
extension=mongo.so
(2)打开apache的配置文件对其进行修改。
追加:
AddType application/x-httpd-php .php
AddType application/x-httpd-php .htm
AddType application/x-httpd-php .htmlDirectoryIndex index.html index.cgi index.php index.phtml index.php3
这些语句的位置在文件中已经给出,搜索AddType和DirectoryIndex就会找到
解释点:(php版本和扩展之间的问题)
有的人可能是直接利用的mongodb的yum源,然后执行pecl install momgodb的安装扩展,这个时候如果你的php是5.4或5.4以下的版本会直接报错,提示你说需要php5.5.99以上的版本。所以这里为了避免冲突,也是利用了php5.6的版本。
解释点:(安装顺序问题、马虎)
我们都知道lamp(linux+apa+MySQL+php)的安装顺序,就是安装amp的顺序安装的,这里apa+mongo+php也是一样,按照这样的顺序安装。我出现安装错误的原因在于,没有安装apa的时候就安装了php。我有个习惯,就是在做不了解的环境的时候,没安装一个服务就会创建一个快照,防止后面做错,还可以回来重新做。但是就是因为这个,当我返回快照的时候,我以为返回到了安装好Apache服务的快照上了,结果不想而知。
好了,到这里基本都已经解决了所有服务的安装,只要将服务都启动开就可以访问网站了,自己可以写个php网页进行测试。如果出现关于mongo class的错误,说明你的扩展没有弄好,要么去修改一下php.ini要么重新安装一下就好。
注意:在访问网站的时候一定记得关闭防火墙,和selinux。关闭方法:systemctl stop firewalld 和 setenforce 0
希望能够帮到那些如我一般错误一堆的人。