使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

使用 Docker 部署 FTP 和 Nginx 通过 HTTP 访问 FTP 里的文件,这是一个常见的需求,通常用于将存储在 FTP 服务器上的文件通过 Web 方式提供访问。以下是如何操作的详细步骤:

1. 部署 FTP 服务器 (vsftpd)

我们使用 fauria/vsftpd 镜像,因为它配置简单且常用。

  • 创建存储目录: 在宿主机上创建一个目录用于 FTP 存储文件。

    mkdir -p /path/to/ftp/data
    

    /path/to/ftp/data 替换为你希望使用的实际路径。

  • 运行 vsftpd 容器:

    docker run -d -p 21:21 -p 20:20 -p 21100-21110:21100-21110 \
        -v /path/to/ftp/data:/home/vsftpd \
        -e FTP_USER=ftpuser -e FTP_PASS=ftppass \
        -e PASV_ENABLE=YES -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 \
        --name ftpserver fauria/vsftpd
    
    • -p 21:21 -p 20:20: 映射 FTP 的控制端口 (21) 和数据端口 (20)。
    • -p 21100-21110:21100-21110: 映射被动模式的端口范围。被动模式对于 Docker 环境很重要。
    • -v /path/to/ftp/data:/home/vsftpd: 将宿主机目录挂载到容器内的 FTP 用户目录。
    • -e FTP_USER=ftpuser -e FTP_PASS=ftppass: 设置 FTP 用户名和密码。请务必修改为你自己的用户名和密码。
    • -e PASV_ENABLE=YES -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110: 启用被动模式并指定端口范围,这对于在 Docker 容器中使用 FTP 非常重要。
    • --name ftpserver: 为容器命名。
  • 验证 FTP 连接: 使用 FTP 客户端(如 FileZilla)连接到你的服务器。

2. 部署 Nginx

  • 创建 Nginx 配置文件: 创建一个名为 nginx.conf 的文件,内容如下:

    user  root; # 用户使用root,否则没有权限访问FTP用户上传的文件
    worker_processes  auto;
    
    error_log  /var/log/nginx/error.log notice;
    pid        /var/run/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        keepalive_timeout  65;
    
        #gzip  on;
    
        #include /etc/nginx/conf.d/*.conf;  # 注释掉这句,否则里面的默认配置会覆配置盖下面的server配置
            server {
                    listen       80;
                    listen  [::]:80;
                    server_name  localhost; # 修改为你的域名或 IP 地址
    
                    location / {
                            root   /ftp/data; # Nginx 访问的根目录,稍后会通过挂载 FTP 数据目录实现
                            index  index.html index.htm;
                    }
    
                    error_page   500 502 503 504  /50x.html;
                    location = /50x.html {
                            root   /ftp/data;
                    }
            }
    }
    
    
  • 运行 Nginx 容器:

    Bash

    docker run -d -p 80:80 \
        -v /path/to/ftp/data:/ftp/data \
        -v $(pwd)/nginx.conf:/etc/nginx/conf.d/default.conf \
        --name webserver nginx:latest
    
    • -p 80:80: 映射 Nginx 的 80 端口。
    • -v /path/to/ftp/data:/ftp/data: 关键步骤! 将 FTP 数据目录挂载到 Nginx 容器内的 /ftp/data 目录。这样 Nginx 就可以访问 FTP 上的文件了。
    • -v $(pwd)/nginx.conf:/etc/nginx/conf.d/default.conf: 将我们创建的 Nginx 配置文件挂载到容器内。
    • --name webserver: 为容器命名。
    • nginx:latest: 使用最新的 Nginx 镜像。

3. 访问 FTP 文件

现在,你可以通过浏览器访问服务器的 IP 地址 (例如 http://your_server_ip) 来浏览 FTP 上的文件。Nginx 将会提供一个文件列表,你可以点击链接下载文件。

使用 Docker Compose (推荐)

使用 Docker Compose 可以更方便地管理多个容器。创建一个名为 docker-compose.yml 的文件,内容如下:

version: "3.9"
services:
  ftpserver:
    image: fauria/vsftpd
    ports:
      - "21:21"
      - "20:20"
      - "21100-21110:21100-21110"
    volumes:
      - ./ftpdata:/home/vsftpd # 注意使用相对路径
    environment:
      - FTP_USER=ftpuser
      - FTP_PASS=ftppass
      - PASV_ENABLE=YES
      - PASV_MIN_PORT=21100
      - PASV_MAX_PORT=21110
    restart: always

  webserver:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./ftpdata:/ftp/data # 共享同一个数据卷
      - ./nginx.conf:/etc/nginx/nginx.conf # 挂载配置文件
    depends_on:
      - ftpserver # 依赖于 ftpserver 启动
    restart: always
volumes:
 ftpdata: #定义数据卷

在该文件所在目录下运行 docker-compose up -d 即可同时启动 FTP 和 Nginx 容器。

关键点和注意事项:

  • 被动模式 (PASV): 在 Docker 环境中,FTP 客户端通常需要使用被动模式。确保正确配置被动模式的端口范围。
  • 数据卷: 使用数据卷来共享 FTP 和 Nginx 容器之间的文件。这是实现此功能的关键。
  • 安全性: 上述配置只是一个基本的示例。在生产环境中,你需要考虑安全性问题,例如使用 SFTP 而不是 FTP,配置防火墙,限制访问权限等。
  • 端口映射: 确保宿主机上没有其他服务占用这些端口。
  • 文件权限: 确保 FTP 容器和 Nginx 容器都具有访问共享目录的正确权限。

希望以上步骤能够帮助你成功搭建 FTP 和 Nginx 服务,并通过 HTTP 访问 FTP 上的文件。使用 Docker Compose 可以大大简化部署和管理过程,强烈推荐使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

博刻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值