目录
1、安装依赖
2、下载安装包
mongodb下载安装
启动mongdb
mongofiles上传文件
nginx+gridfs源码下载
下载nginx
编译安装nginx
3、配置nginx-gridfs
Welcome to nginx!
4、通过url查看图片
附:
安装包:
我的环境是CentOS 7.6,网上有很多的相关的资料,有些文章有一些年头了,现在还照着走可能会有一些误区,这里记录下我最近的安装使用过程及遇到的问题。
使用nginx+gridfs的目的,主要是为了用mongdb存图片,并用url去访问图片。
1、安装依赖
a) yum install gcc-c++
b) yum install -y pcre pcre-devel
c) yum install -y zlib zlib-devel
d) yum install -y openssl openssl-devel
e) yum install -y git
第一步基本不会有什么问题
2、下载安装包
mongodb下载安装:
上官网下载https://www.mongodb.com/try/download/community
选择版本号、操作系统、安装包类型,这里选择tgz,然后点击Download下载。或者点击Download右边的Copy Link,使用命令用刚刚复制的下载链接下载:wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.4.24.tgz
踩坑记录:
可能很多人跟我一样习惯性地会选择最新的版本(mongdb截至目前最新版本4.4.2),但是这里不要选择高版本,原因后面会讲,本人使用3.0.15版本亲测可用。
解压:
tar -zxvf mongodb-linux-x86_64-rhel70-3.4.24.tgz
mkdir /usr/local/mongodb
mv mongodb-linux-x86_64-rhel70-3.4.24/* /usr/local/mongodb
MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加到 PATH 路径中:
export PATH=<mongodb-install-directory>/bin:$PATH
<mongodb-install-directory> 为你 MongoDB 的安装路径。如本文的 /usr/local/mongodb 。
export PATH=/usr/local/mongodb/bin:$PATH
创建数据库目录
默认情况下 MongoDB 启动后会初始化以下两个目录:
- 数据存储目录:/var/lib/mongodb
- 日志文件目录:/var/log/mongodb
我们在启动前可以先创建这两个目录并设置当前用户有读写权限:
sudo mkdir -p /var/lib/mongo
sudo mkdir -p /var/log/mongodb
sudo chown `whoami` /var/lib/mongo # 设置权限
sudo chown `whoami` /var/log/mongodb # 设置权限
创建配置文件:vim /etc/mongodb.conf
添加一下内容:
bind_ip = 0.0.0.0
httpinterface = true
注:默认端口是27017,这个不用改;
踩坑记录:
bind_ip即绑定的ip,默认为localhost绑定
默认情况下,MongoDB在启动时bindIp将set设置为 127.0.0.1,该绑定到localhost网络接口。这意味着mongod只能接受来自同一计算机上运行的客户端的连接。除非将此值设置为有效的网络接口,否则远程客户端将无法连接到mongod,并且mongod不能初始化副本集。
官方解释:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat-tarball/
可以通过命令netstat -anp|grep mongod查看运行中mongodb绑定的ip及端口
启动mongdb:
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log -f /etc/mongodb.conf --fork
到这一步后,mongodb就启动了
ps aux|grep mongo可以看到相关进程。
此时浏览器输入:http://127.0.0.1:27017 应该出现如下提示:
说明mongodb的http服务及27017端口可以访问。
踩坑记录:
(1)看到网上有文章对这句:It looks like you are trying to access MongoDB over HTTP on the native driver port.的解释是mongodb安装有错误,并在下面给了解决方案。那篇文章给我带到沟里去了,恰恰相反,这句提示表示27017端口能正常访问。可以继续进行下一步!
(2)若不编辑上述的/etc/mongodb.conf配置文件,则可能提示404或者其它错误。该配置文件不会自动生成,需要手动创建,且启动时通过-f参数指定文件路径。
(3)高版本的mongodb是不能识别配置文件里httpinterface选项的,会在运行时报错: Error parsing INI config file: unrecognised option 'httpinterface'。
(4)在已经安装了mongodb的情况下再次安装其它版本,启动mongodb,出现启动失败
查看日志/var/log/mongodb/mongod.log:有如下报错“WiredTiger error (-31802)”.
解决办法:删除/var/lib/mongodb/下所有文件,重新启动mongodb
mongofiles上传文件:
/usr/local/mongodb/bin/mongofiles put --db pics photo.jpg --type jpg
参数--db pics是数据库名,如果不存在则会创建。这样a.jpg图片上传成功了。
踩坑记录:
最开始安装4.4.22版本的mongodb,在解压出来的bin目录下找不到mongofiles文件,查看官方手册得知,4.4版本之后,mongofiles不再集成到mongodb安装包里,而是独立分发。
到这里已经成功一半了。
nginx+gridfs源码下载:
项目的git地址是:https://github.com/mdirolf/nginx-gridfs
下载:git https://github.com/mdirolf/nginx-gridfs.git
下载之后需要下载mongo-c-driver
cd nginx-gridfs
git checkout v0.8 #指定v0.8版本
git submodule init
git submodule update
执行上面步骤会开始下载mongo-c-driver,或者单独下载mongo-c-driver,在将内容解压后拷贝到nginx-gridfs/mongo-c-driver。
我用的nginx-gridfs是v0.8版本,mongo-c-driver用的是v0.3.1版本。
下载nginx
wget http://nginx.org/download/nginx-1.0.1.tar.gz
tar –zxvf nginx-1.0.1.tar.gz
cd nginx-1.0.1
编译安装nginx
指定nginx-gridfs目录与nginx联合编译
./configure --prefix=/usr/local/nginx --with-openssl=/usr/include/openssl --with-http_stub_status_module --add-module=../nginx-gridfs
注意--add-module参数,后面填nginx-gridfs的路径。
make && make install
踩坑记录:
我一开始用最新的版本1.19.4,尝试多次不能通过url查看图片,便降低版本,1.0.1版本亲测可用。
低版本的make时可能会报错:../nginx-gridfs/ngx_http_gridfs_module.c:684:16: error: variable ‘chunksize’ set but not used
这个错误不影响使用,解决办法:在上一步./configure后面多加一个参数--with-cc-opt=-Wno-error,重新执行上面的编译安装过程。
3、配置nginx-gridfs
vim /usr/local/nginx/conf/nginx.conf
location /pics/ {
gridfs pics
field=filename
type=string;
mongo 127.0.0.1:27017;
}
gridfs:nginx识别插件的关键字
pics:db名
保存然后重启nginx服务:
关闭nginx服务:
ps aux| grep nginx
kill掉nginx进程的pid
启动nginx服务:
启动nginx:
/usr/local/nginx/sbin/nginx
在浏览器输入: http://192.168.1.111/
当你看到下面的字母就说明nginx启动成功了。
Welcome to nginx!
4、通过url查看图片
现在就可以通过url来访问图片了:http://10.68.12.93/pics/a.jpg
踩坑记录:
看到网上很多文章写的是要通过27017端口去查看图片,即http://10.68.12.93:27017/pics/a.jpg
这里也是给我带沟里去了,实际浏览器是和nginx服务通信的,nginx和mongodb的http服务通信,所以这里无需加上27017端口,反而加上了就获取不到图片了,而是浏览器直接和mongodb的http服务通信,通过netstat -ntp |grep 27017可以证实这一点。
附:
重启mongodb:
# mongo admin
>db.shutdownServer()
>exit
踩坑记录:
直接kill pid的方法不合适,这样在下次启动时很大概率启动失败,查看日志后可以看到,需要删除/var/lib/mongodb目录下的.lock文件然后即可重新启动,所以不推荐直接kill进程。
安装包:
最后附上我所用到的安装包:
mongodb-linux-x86_64-rhel70-3.0.15.tgz
nginx-gridfs.tgz //里面包含有mongo-c-driver-v0.3.1版本的源码
nginx-1.0.1.tar.gz