docker安装nginx+fastdfs(含java demo)

docker安装nginx+fastdfs(含java demo)

1、查看 fastdfs 镜像列表

命令:

docker search fastdfs

2、拉取镜像

命令:

docker pull delron/fastdfs

这个版本的镜像是比较全的,含有fastdfs以及nginx以及其相关的配置。

3、准备存储路径和配置文件路径

3.1、主机创建目录

主机创建 上传文件存储目录

命令:

mkdir -p /home/fastdfs/storage

主机创建 主要配置文件的存放目录

命令:

mkdir -p /home/fastdfs/conf

3.2、 从容器中复制出配置文件

1、启动fastdfs容器 tracker

命令:

docker run -d --network=host --name tracker -v /home/fastdfs/storage:/var/fdfs delron/fastdfs tracker

2、从容器中复制出 storage.conf 和 nginx.conf 文件

命令:

docker cp storage:/etc/fdfs/storage .conf /home/fastdfs/conf/
docker cp storage:/usr/local/nginx/conf/nginx.conf /home/fastdfs/conf/

3、修改配置文件

命令:

vi /home/fastdfs/conf/storage.conf

文件最后这个http.server_port 这个就是你要让fastdfs 里nginx代理文件的对应端口(默认是8888),记住这个端口

命令:

vi /home/fastdfs/conf/nginx.conf

此处端口就要和上一步 storage.conf中配置的端口保持一致

4、正式启动fastdfs

4.1、先停止先前临时启动的tracker

命令:

docker ps -a

命令:

docker kill tracker

docker rm tracker

4.2、正式启动 tracker

命令:

docker run -d --network=host --name tracker
-v /home/fastdfs/storage:/var/fdfs
-v /home/fastdfs/conf/storage.conf:/etc/fdfs/storage.conf:ro
-v /home/fastdfs/conf/nginx.conf:/usr/local/nginx/conf/nginx.conf:ro
delron/fastdfs tracker

说明:

– name tracker 表示给当前容器命名

第一个 -v 将主机的 /home/fastdfs/storage 目录映射到 容器的 /var/fdfs目录中,此目录用于存储文件

第二个 -v 将主机的 storage.conf 配置文件映射到容器中的 storage.conf,这样启动时就会读主机配置

第三个 -v 将主机nginx.conf 映射到容器中,启动nginx时会读主机配置文件

delron/fastdfs tracker 指定启动的镜像

4.3、正式启动storage

命令:

docker run -d --network=host --name storage
-v /home/fastdfs/storage:/var/fdfs
-v /home/fastdfs/conf/storage.conf:/etc/fdfs/storage.conf:ro
-v /home/fastdfs/conf/nginx.conf:/usr/local/nginx/conf/nginx.conf:ro
-e TRACKER_SERVER=192.168.102.10:22122 -e GROUP_NAME=group1 delron/fastdfs storage

说明:

–name storage 和 前 3个 -v 和上面一样的意思

-e TRACKER_SERVER=192.168.102.10:22122 表示fastdfs 用的端口和主机映射ip,此处把ip改成自己主机ip即可

4.4、服务停止

命令:

docker kill tracker

docker kill storage

docker rm tracker

docker rm storage

5、服务验证

5.1、命令验证

1、查看fastdfs 容器是否启动正常

命令:

docker ps

2、上传文件

1、上传一张文件到主机 /home/fastdfs/storage 目录下

2、进入storage 容器

命令:

docker exec -it storage bash

由于主机 /home/fastdfs/storage 目录映射到了 容器中的 /var/fdfs ,所以此处可以看到刚在主机中上传的test.jpg图片

3、上传此图片到fastdfs

命令:

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.jpg

出现 group1/M00/00/00/wKhmCmBFo7GAH1JhAAB7MT8bJfU514.jpg 就表示正常上传了

浏览器访问一下试试:

http://192.168.102.10:9999/group1/M00/00/00/wKhmCmBFo7GAH1JhAAB7MT8bJfU514.jpg

图片可以访问,表示很正常。

说明:

此处的ip就是你的主机ip,端口就是上面nginx中配置的那个端口

7、java demo实现文件上传和下载

7.1、pom依赖

<dependency>    
<groupId>org.csource</groupId>   
<artifactId>fastdfs-client-java</artifactId>   
<version>1.27</version>
</dependency>

7,2、配置文件

在resource目录下放置 fdfs_client.conf 文件

内容如下

connect_timeout = 2
network_timeout = 30
charset = UTF-8
http.tracker_http_port = 9999
http.anti_steal_token = no
#http.secret_key = FastDFS1234567890
tracker_server =192.168.102.10:22122

说明:

其中最主要的是

tracker_server =192.168.102.10:22122

配置成 fastdfs 服务器所在ip和端口即可

7.3、代码

package com.hhf.www;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.UUID;

import org.apache.commons.io.IOUtils;
import org.csource.common.MyException;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.FileInfo;
import org.csource.fastdfs.StorageClient;
import org.csource.fastdfs.StorageServer;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;


public class TestFastDfs {

public static String conf_filename = "C:\\develop\\project\\Gitee-Project\\spring-cloud\\forum\\src\\main\\resources\\fdfs_client.conf";
//public String local_filename = "D:\\stsworkspace\\fastdfs-demo\\src\\main\\resources\\fdfs_client.conf";

public static String local_filename = "C:\\develop\\project\\Gitee-Project\\spring-cloud\\forum\\src\\main\\resources\\static\\img\\1.JPG";
public static String path = "C:\\develop\\project\\Gitee-Project\\spring-cloud\\forum\\src\\main\\resources\\static\\img\\";

public static void main(String[] args) {
  testUpload();
//   testDownload();
}


public static void testUpload() {

  try {
      ClientGlobal.init(conf_filename);

      TrackerClient tracker = new TrackerClient();
      TrackerServer trackerServer = tracker.getConnection();
      StorageServer storageServer = null;

      StorageClient storageClient = new StorageClient(trackerServer, storageServer);
//          NameValuePair nvp = new NameValuePair("age", "18");
      NameValuePair nvp [] = new NameValuePair[]{
              new NameValuePair("age", "18"),
              new NameValuePair("sex", "male")
      };
      String fileIds[] = storageClient.upload_file(local_filename, "png", nvp);

      System.out.println(fileIds.length);
      System.out.println("组名:" + fileIds[0]);
      System.out.println("路径: " + fileIds[1]);
      String url = "http://192.168.102.10:9999/"+fileIds[0]+"/"+fileIds[1];
      System.out.println(url);

  } catch (FileNotFoundException e) {
      e.printStackTrace();
  } catch (IOException e) {
      e.printStackTrace();
  } catch (MyException e) {
      e.printStackTrace();
  }
}


public static void testDownload() {
  try {

      ClientGlobal.init(conf_filename);

      TrackerClient tracker = new TrackerClient();
      TrackerServer trackerServer = tracker.getConnection();
      StorageServer storageServer = null;

      StorageClient storageClient = new StorageClient(trackerServer, storageServer);
      byte[] b = storageClient.download_file("group1", "M00/00/00/wKhmCmBFh_iAFRiSAEN7SXQ-0OI536.png");
      System.out.println(b);
      IOUtils.write(b, new FileOutputStream(path+"\\"+UUID.randomUUID().toString()+".png"));
  } catch (Exception e) {
      e.printStackTrace();
  }
}


public void testGetFileInfo(){
  try {
      ClientGlobal.init(conf_filename);

      TrackerClient tracker = new TrackerClient();
      TrackerServer trackerServer = tracker.getConnection();
      StorageServer storageServer = null;

      StorageClient storageClient = new StorageClient(trackerServer, storageServer);
      FileInfo fi = storageClient.get_file_info("group1", "M00/00/00/wKgRcFV_08OAK_KCAAAA5fm_sy874.conf");
      System.out.println(fi.getSourceIpAddr());
      System.out.println(fi.getFileSize());
      System.out.println(fi.getCreateTimestamp());
      System.out.println(fi.getCrc32());
  } catch (Exception e) {
      e.printStackTrace();
  }
}


public void testGetFileMate(){
  try {
      ClientGlobal.init(conf_filename);

      TrackerClient tracker = new TrackerClient();
      TrackerServer trackerServer = tracker.getConnection();
      StorageServer storageServer = null;

      StorageClient storageClient = new StorageClient(trackerServer,
              storageServer);
      NameValuePair nvps [] = storageClient.get_metadata("group1", "M00/00/00/wKgRcFV_08OAK_KCAAAA5fm_sy874.conf");
      for(NameValuePair nvp : nvps){
          System.out.println(nvp.getName() + ":" + nvp.getValue());
      }
  } catch (Exception e) {
      e.printStackTrace();
  }
}


public void testDelete(){
  try {
      ClientGlobal.init(conf_filename);

      TrackerClient tracker = new TrackerClient();
      TrackerServer trackerServer = tracker.getConnection();
      StorageServer storageServer = null;

      StorageClient storageClient = new StorageClient(trackerServer,
              storageServer);
      int i = storageClient.delete_file("group1", "M00/00/00/wKgRcFV_08OAK_KCAAAA5fm_sy874.conf");
      System.out.println( i==0 ? "删除成功" : "删除失败:"+i);
  } catch (Exception e) {
      e.printStackTrace();
  }
}
}

控制台执行,打印如下

至此完毕!

注:此文档里没写 关于防火墙之类的配置,如果你自己比较玩的比较溜就自己配置防火墙,如果不会且只是安装测试,可以先关了防火墙调通了再开。

Docker是一个开源的应用容器引擎,它允许开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。使用Docker可以更方便地安装和运行Nginx、Redis、PHP和MySQL等服务。 以下是使用Docker安装Nginx、Redis、PHP和MySQL的基本步骤: 1. 安装Docker环境: 首先需要在你的系统上安装Docker。根据你使用的操作系统,安装步骤可能会有所不同。例如,在Ubuntu上,你可以使用以下命令安装Docker: ``` sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io ``` 2. 拉取所需的Docker镜像: Docker Hub上有很多官方或非官方的镜像,可以直接拉取使用。你可以使用以下命令来拉取Nginx、Redis、PHP和MySQL的镜像: ``` docker pull nginx docker pull redis docker pull php docker pull mysql ``` 3. 运行容器: 接下来,你可以运行这些镜像作为容器。这里是一个简单的例子来启动这些服务的容器: ``` # 启动MySQL容器 docker run --name mysql -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql # 启动PHP容器,其中需要将Nginx和PHP容器进行网络桥接 docker run --name php -v /path/to/your/php/files:/var/www/html -d php:7.4-fpm # 启动Redis容器 docker run --name redis -d redis # 启动Nginx容器,并将Nginx端口映射到宿主机的端口,同时桥接到PHP容器的网络 docker run --name nginx --link php:php --link mysql:mysql -p 80:80 -d nginx ``` 请注意,这里只是一个基础的启动命令示例,实际情况可能需要配置更复杂的网络和数据卷映射。 4. 配置Nginx和PHP(如果需要): 如果需要对Nginx和PHP进行自定义配置,你可以创建自己的配置文件,并在运行容器时通过挂载卷的方式将配置文件放入容器中。 5. 连接和测试: 一旦容器运行起来,你可以通过访问宿主机的IP地址来测试Nginx是否正常工作,同时通过PHP代码来测试PHP和MySQL的连接是否正常。 请注意,具体的安装和配置可能因版本和需求而异,因此需要根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值