Nginx+GridFS存储图片方案----环境搭建及踩坑记录

目录

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值