创建fastdfs_nginx容器及nginx配置
拉取镜像,创建容器
# 拉取镜像
sudo docker pull ubuntu:18.04
# 创建容器,创建容器时必须使用image:tag,标签不可缺少
sudo docker run -itd --network=host --name fastdfs_nginx -v /home/moluo/store_path/:/home/store_path ubuntu:18.04
进入容器,修改源
sudo docker exec -it fastdfs_nginx bash
cp /etc/apt/sources.list /etc/apt/sources.list.bak # 备份
exit # 退出容器
# 直接当前操作系统里面的源文件复制到容器内部(容器中没有vi/vim)
sudo docker cp /etc/apt/sources.list fastdfs_nginx:/etc/apt/sources.list
我的操作系统的apt源使用了阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
下载编译安装nginx
# 进入容器安装nginx
sudo docker exec -it fastdfs_nginx bash
# 更新源
apt-get update
# 安装nginx相关依赖
apt-get install build-essential libtool
apt-get install libpcre3 libpcre3-dev
apt-get install zlib1g-dev
apt-get install openssl
下载nginx
# 到官网下载nginx源码包
# 如果容器内部没有wget命令,则安装命令: apt-get install wget
cd /
wget http://nginx.org/download/nginx-1.15.9.tar.gz
tar -zxvf nginx-1.15.9.tar.gz
# 下载fastdfs-nginx-module
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz
tar -zxvf V1.20.tar.gz fastdfs-nginx-module-1.20
下载编译安装libfastcommon
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz
tar -zxvf V1.0.43.tar.gz libfastcommon-1.0.43
cd libfastcommon-1.0.43
./make.sh
./make.sh install
下载编译安装fastdfs
wget https://github.com/happyfish100/fastdfs/archive/V5.04.tar.gz
tar -zxvf V5.04.tar.gz fastdfs-5.04
cd fastdfs-5.04
./make.sh
./make.sh install
编译安装nginx
cd /nginx-1.15.9
./configure --add-module=../fastdfs-nginx-module-1.20/src/
make
make install
nginx出现错误解决
1.make命令编译报错
# /usr/local/include/fastdfs/fdfs_define.h:15:27: 致命错误:common_define.h:没有那个文件或目录
解决方法:修改文件 /fastdfs-nginx-module-1.20/src/config
第6,15行
apt install vim
vim /fastdfs-nginx-module-1.20/src/config
:set nu
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
2.错误提示:
'FDFSHTTPParams' has no member named 'support_multi_range'
解决方案:打开报错的文件 /fastdfs-nginx-module-1.20/src/common.c
的1245行
vim /fastdfs-nginx-module-1.20/src/common.c
:set nu
:1245
原来代码为
(pContext->range_count > 1 && !g_http_params.support_multi_range))
修改为
(pContext->range_count > 1 ))
再重新执行刚才nginx的编译 make && make install
3.错误提示
In file included from ../fastdfs-nginx-module-1.20/src//common.c:26:0,
from ../fastdfs-nginx-module-1.20/src//ngx_http_fastdfs_module.c:6:
/usr/include/fastdfs/fdfs_define.h:15:10: fatal error: common_define.h: No such file or directory
拷贝common_define.h到相应目录
cp /usr/include/fastcommon/common_define.h /fastdfs-nginx-module-1.20/src/
修改完错误后继续编译 make && make install
修改nginx相关配置
cp -r /fastdfs-5.04/conf/* /etc/fdfs/
cp /fastdfs-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs
# 修改ngxinx 配置文件
vim /usr/local/nginx/conf/nginx.conf
server {
# 1.修改端口
listen 8888;
server_name localhost;
# charset koi8-r;
# access_log logs/host.access.log main;
# 2.路径识别
location ~/group([0-9])/M00 {
# root /var/fdfs/storage_path;
ngx_fastdfs_module;
}
启动nginx
# 启动nginx
/usr/local/nginx/sbin/nginx
# 启动以后,退出容器
exit
nginx启动错误
# 如果nginx启动出现错误
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libfdfsclient.so: cannot open shared object file: No such file or directory
# 查找libfdfsclient.so
find / -name libfdfsclient.so
/usr/lib64/libfdfsclient.so
/fastdfs-5.04/client/libfdfsclient.so
# 发现/usr/lib目录中没有libfdfsclient.so
cp /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
# 请确保/usr/lib和/usr/lib64中都有libfastcommon.so和libfdfsclient.so目录,如果没有的话,相互拷贝过来
# 重启nginx
/usr/local/nginx/sbin/nginx -s reload
nginx已经启动,但无法获取资源,nginx运行时只有master进程没有work进程
# 查看日志
vim /usr/local/nginx/logs/error.log
# 错误
[2020-01-10 16:06:47] ERROR - file: client_func.c, line: 112, conf file "/etc/fdfs/mod_fastdfs.conf", host "tracker" is invalid
2020/01/10 16:06:47 [alert] 55#0: worker process 74 exited with fatal code 2 and cannot be respawned
2020/01/10 16:18:06 [notice] 107#0: signal process started
# 修改/etc/fdfs/mod_fastdfs.conf 第40、62行
vim /etc/fdfs/mod_fastdfs.conf
:set nu
tracker_server=192.168.11.46:22122 # 改为自己的ip
store_path0=/home/store_path
再修改配置
# 修改storage.conf
vim /etc/fdfs/storage.conf
base_path=/home/store_path
store_path0=/home/store_path
tracker_server=192.168.11.46:22122 # 改为自己的ip
http.server_port=8888
# 修改tracker.conf
vim /etc/fdfs/tracker.conf
base_path=/home/tracker_data
# 修改mod_fastdfs.conf(前面已修改则不用修改了)
vim /etc/fdfs/mod_fastdfs.conf
tracker_server=192.168.11.46:22122 # 改为自己的ip
store_path0=/home/store_path
url_have_group_name = true # 请求路径是否携带组信息
将nginx重启后将会有master和work两个进程,此时如果tracker和storage都启动了的话,即可通过浏览器访问nginx代理的资源