go配置redis、nginx&fastdfs教程
一、go环境搭建
-
在官网下载对应版本的go压缩包,解压在对应目录,我这里把他解压到了/home/目录下
-
在bashrc文件下配置环境变量:
sudo vim ~/.bashrc source ~/.bashrc -
在末尾添加如下语句:
export GOROOT=$HOME/go # Go 安装路径 export GOPATH=$HOME/go_projects # 项目目录(包含 src/bin/pkg) export PATH=$GOROOT/bin:$GOPATH/bin:$PATHGOROOT是go的文件包目录,GOPATH是go项目的工作目录,PATH是go项目工作目录的包
其中go项目目录下包含:src、pkg、bin三个目录,项目都在src包下
-
配置go模块代理
go env -w GOPROXY=https://goproxy.cn,direct
二、redis环境搭建
step1:下载
sudo apt update
sudo apt install build-essential tcl
step2:解压安装
wget https://download.redis.io/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
make -j$(nproc) # 编译(-j 使用多核加速)
sudo make install # 安装到系统路径(默认 /usr/local/bin)
step3:复制,放到usr/local/redis⽬录下
sudo mkdir /etc/redis
sudo cp redis.conf /etc/redis/redis.conf
step4:创建服务文件
sudo vim /etc/systemd/system/redis.service
添加以下内容:
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
Restart=always
User=redis
Group=redis
[Install]
WantedBy=multi-user.target
step5:创建redis用户并设置权限
sudo adduser --system --group --no-create-home redis
sudo chown -R redis:redis /etc/redis
sudo chmod 644 /etc/redis/redis.conf
step6:修改相关配置
sudo vim /etc/redis/redis.conf # 根据实际路径调整
将dir修改为:/var/lib/redis
logfile修改为:logfile "/var/log/redis/redis-server.log"
注释掉其中的bind 127.0.0.1:--1选项即可,目的是监听全部
设置保护模式为no(内网的时候使用):protected-mode no
创建目录获取权限:
sudo mkdir -p /var/lib/redis
sudo chown -R redis:redis /var/lib/redis
sudo chmod 755 /var/lib/redis
sudo mkdir -p /var/log/redis
sudo chown -R redis:redis /var/log/redis
sudo chmod 755 /var/log/redis
step7:启动服务并设置开机自启
sudo systemctl daemon-reload
sudo systemctl start redis
sudo systemctl enable redis
step8:验证安装
redis-server --version
step9:测试连接
redis-cli ping
三、FastDFS&Nginx配置安装
1. 环境准备
1.1 创建目录结构
# 用户主目录下创建组件目录
mkdir /home/xingyu/FastDFS_Nginx
# 创建 FastDFS 数据存储目录(需要提前创建目录)
mkdir -p /home/xingyu/fastdfs/{tracker,storage}
1.2 首先更新工具
sudo apt update
2. FastDFS安装
2.1 安装FastDFS依赖包
- 解压缩libfastcommon-master.zip
- 进入到libfastcommon-master的目录中
- 执行./make.sh
- 执行sudo ./make.sh install
2.2 安装FastDFS
- 解压缩fastdfs-master.zip
- 进入到 fastdfs-master目录中
- 执行 ./make.sh
- 执行 sudo ./make.sh install
2.3 配置跟踪服务器tracker
-
sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf -
在/home/itcast/目录中创建目录 fastdfs/tracker
mkdir -p /home/itcast/fastdfs/tracker -
编辑/etc/fdfs/tracker.conf配置文件
sudo vim /etc/fdfs/tracker.conf
修改 :base_path=/home/itcast/fastdfs/tracker
2.4 配置存储服务器storage
-
sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf -
在/home/itcast/fastdfs/ 目录中创建目录 storage
mkdir –p /home/itcast/fastdfs/storage -
编辑/etc/fdfs/storage.conf配置文件
sudo vim /etc/fdfs/storage.conf修改内容:
base_path=/home/itcast/fastdfs/storage store_path0=/home/itcast/fastdfs/storage tracker_server=自己ubuntu虚拟机的ip地址:22122
2.5 启动tracker和storage
进入到/etc/fdfs/下面执行以下两条指令
sudo fdfs_trackerd /etc/fdfs/tracker.conf
sudo fdfs_storaged /etc/fdfs/storage.conf
2.6 测试是否安装成功(上传文件才能创建文件夹)
-
sudo cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf -
编辑/etc/fdfs/client.conf配置文件
sudo vim /etc/fdfs/client.conf修改内容如下:
base_path=/home/itcast/fastdfs/tracker tracker_server=自己ubuntu虚拟机的ip地址:22122 -
上传文件测试(fastDHT)
sudo fdfs_upload_file /etc/fdfs/client.conf 要上传的图片文件如果返回类似**group1/M00/00/00/rBIK6VcaP0aARXXvAAHrUgHEviQ394.jpg **的文件id则说明文件上传成功
2.7 配置fastdfs-nginx-module、Pcre等相关依赖
-
解压缩 fastdfs-nginx-module-master.zip
-
安装库
sudo apt install libpcre3 libpcre3-dev zlib1g-dev libssl-dev -
注意:新版本的nginx需要依赖libserverframe,因此需要预先装好libserverframe
3.1 解压缩 libserverframe.zip
3.2 进入到 libserverframe 目录中
3.3 执行 ./make.sh
3.4 执行 sudo ./make.sh install
2.8 安装并配置nginx
-
解压缩 nginx-1.8.1.tar.gz、进入nginx-1.8.1目录中执行
sudo ./configure --prefix=/usr/local/nginx/ --add-module=fastdfs-nginx-module-master解压后的目录的绝对路径/src注意:如未安装其他库,这时候会报一个错,说没有PCRE库、Zlib库、OpenSSL库等
需要安装后、然后进入nginx-1.8.1目录中,再次执行以下代码
sudo ./configure --prefix=/usr/local/nginx/ --add-module=fastdfs-nginx-module-master解压后的目录的绝对路径/src这时候还会报一个错(错误还真多),错误原因是因为nginx编译的时候把警告当错误处理,事实上这个警告并不影响(程序员忽略警告):
解决方法:
找到objs目录下的Makefile
vim Makefile
删掉里面的-Werror(如果没有修改权限,修改一下这个文件的权限,
chmod 777 Makefile)然后回到nginx-1.8.1目录中
执行完成后执行sudo make
执行sudo make install
-
sudo cp fastdfs-nginx-module-master解压后的目录中src下mod_fastdfs.conf /etc/fdfs/mod_fastdfs.conf
sudo cp mod_fastdfs.conf的地址 /etc/fdfs/mod_fastdfs.conf -
sudo vim /etc/fdfs/mod_fastdfs.conf修改内容如下:
connect_timeout=10 tracker_server=自己ubuntu虚拟机的ip地址:22122 url_have_group_name=true store_path0=/home/xingyu/fastdfs/storage -
sudo cp 解压缩的fastdfs-master目录中的conf中的http.conf /etc/fdfs/http.conf
sudo cp fastdfs-master目录中的conf中的http.conf /etc/fdfs/http.conf -
sudo cp 解压缩的fastdfs-master目录中conf的mime.types /etc/fdfs/mime.types
sudo cp fastdfs-master目录中conf的mime.types /etc/fdfs/mime.types -
sudo vim /usr/local/nginx/conf/nginx.conf在http部分中添加配置信息如下,注意不是修改,直接添加:
server { listen 8888; server_name localhost; location ~/group[0-9]/ { ngx_fastdfs_module; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } -
启动nginx
sudo /usr/local/nginx/sbin/nginx查看nginx是否运行:ps aux | grep nginx,显示应该有三个进程,一个为nginx:master procerss ./nginx,第二个为nginx:worker process,第三个为--color=auto nginx(第三个不管,结束进程也只需要杀死前两个)
-
若第二个进程缺失,在浏览器下输入http://自己的ip地址:8888/上传成功的图片地址,并未显示图片,则问题可能出现在/home/xingyu目录不允许访问,需要加入其他用户可访问的权限
# 检查tracker权限,storage权限, ls -ld /home/xingyu/fastdfs/tracker /home/xingyu/fastdfs/storage # 若没有执行权限,则修改如下 sudo chmod -R 755 /home/xingyu/fastdfs/tracker sudo chmod -R 755 /home/xingyu/fastdfs/storage # 检查父目录权限,至关重要(需至少包含 `x` 执行权限) ls -ld /home/xingyu /home/xingyu/fastdfs # 开放父目录权限(允许其他用户进入) sudo chmod o+x /home/xingyu sudo chmod o+x /home/xingyu/fastdfs -
注意:也需要确保00目录下的所有图片均可执行和访问,若权限不够则修改权限如下
sudo chmod -R 755 /home/xingyu/fastdfs/storage/data
3. go操作上传文件
需要导入github中fdfs_client包
go get -u -v github.com/keonjeo/fdfs_client
导入之后,指定配置文件生成客户端对象:
client,_:=fdfs_client.NewFdfsClient("/etc/fdfs/client.conf")
接着就可以通过client对象执行文件上传,上传有两种方法,一种是通过文件名,一种是通过字节流
-
通过文件名上传**UploadByFilename **,参数是文件名(必须通过文件名能找到要上传的文件),返回值是fastDFS定义的一个结构体,包含组名和文件ID两部分内容
fdfsresponse,err := client.UploadByFilename("flieName") -
通过字节流上传UploadByBuffer,参数是字节数组和文件后缀,返回值和通过文件名上传一样
fdfsresponse,err := client.UploadByBuffer(fileBuffer,ext)
整体代码示例:
//先导包
import "github.com/keonjeo/fdfs_client"
//通过GetFile获取文件信息
f,h,err := this.GetFile(filePath)
defer f.Close()
//然后对上传的文件进行格式和大小判断
//1.判断文件格式
ext := path.Ext(h.Filename)
if ext != ".jpg" && ext != ".png"&&ext != ".jpeg"{
beego.Info("上传文件格式不正确")
return ""
}
//2.文件大小
if h.Size>5000000{
beego.Info("文件太大,不允许上传")
return ""
}
//3.上传文件
//先获取一个[]byte
fileBuffer := make([]byte,h.Size)
//把文件数据读入到fileBuffer中
f.Read(fileBuffer)
//获取client对象
client := fdfs_client.NewFdfsClient("/etc/fdfs/client.conf")
//上传
fdfsResponse,_:=client.UploadByBuffer(fileBuffer,ext[1:])
//返回文件ID,如
return fdfsResponse.RemoteFileId

浙公网安备 33010602011771号