Skip to content

Docker Compose 部署 FastFTP

FastFTP 是一种高性能的 FTP 服务器解决方案,结合 Docker Compose 可以轻松实现快速部署和管理。以下是详细的部署方案和优化配置。

1. 基础部署配置

1.1 项目目录结构

创建标准的目录结构来管理 FastFTP 配置和数据文件:

fastftp-compose/
├── docker-compose.yml
├── data/          # 存储FTP文件
└── config/        # 配置文件目录

1.2 基础 docker-compose.yml 配置

使用stilliard/pure-ftpd镜像的基础配置方案:

yaml
version: "3.8"
services:
  fastftp:
    image: stilliard/pure-ftpd:latest
    container_name: fastftp-server
    ports:
      - "21:21" # FTP控制端口
      - "30000-30009:30000-30009" # PASV模式端口范围
    volumes:
      - ./data:/home/ftpusers
      - ./config:/etc/pure-ftpd
    environment:
      - FTP_USER_NAME=ftpuser
      - FTP_USER_PASS=ftppassword
      - FTP_USER_HOME=/home/ftpusers
    restart: unless-stopped

这个配置会:

  • 使用最新版 Pure-FTPd 镜像
  • 映射 21(控制)和 30000-30009(PASV)端口范围
  • 设置用户账号密码
  • 挂载数据目录和配置目录

2. 生产环境优化配置

2.1 完整生产环境配置

yaml
version: "3.8"
services:
  fastftp:
    image: stilliard/pure-ftpd
    deploy:
      resources:
        limits:
          cpus: "0.5"
          memory: 512M
    healthcheck:
      test: ["CMD", "nc", "-z", "localhost", "21"]
      interval: 30s
      timeout: 10s
      retries: 3
    environment:
      - PUBLICHOST=yourdomain.com
      - TLS_CERT_FILE=/etc/ssl/private/pure-ftpd.pem
      - TLS_KEY_FILE=/etc/ssl/private/pure-ftpd.pem
    volumes:
      - ./ssl:/etc/ssl/private
      - ftpdata:/home/ftpusers
      - ./config/pure-ftpd.conf:/etc/pure-ftpd/conf

volumes:
  ftpdata:
    driver: local
    driver_opts:
      type: none
      device: ./data
      o: bind

关键优化点:

  • 资源限制防止过度消耗系统资源
  • 健康检查确保服务可用性
  • TLS 证书配置实现加密传输
  • 持久化卷确保数据安全

2.2 多用户配置

通过环境变量文件.env管理多用户:

FTP_USERS=user1:password1:1000:1000:/home/ftpusers/user1 user2:password2:1001:1001:/home/ftpusers/user2
FTP_PASSIVE_PORTS=40000:40009

然后在 docker-compose.yml 中引用:

yaml
environment:
  - FTP_USERS=${FTP_USERS}
  - FTP_PASSIVE_PORTS=${FTP_PASSIVE_PORTS}

3. 安全加固方案

3.1 TLS 加密配置

  1. 生成自签名证书:
bash
mkdir -p ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout ssl/pure-ftpd.pem -out ssl/pure-ftpd.pem
  1. 在 docker-compose.yml 中添加:
yaml
environment:
  - TLS=1
  - TLS_CIPHERS="HIGH"
volumes:
  - ./ssl:/etc/ssl/private

3.2 网络隔离

yaml
networks:
  ftp-net:
    driver: bridge
    internal: true

限制 FTP 服务只能在内部网络访问,通过反向代理对外暴露

4. 高级功能实现

4.1 与 Nginx 集成

yaml
services:
  fastftp:
    networks:
      - internal

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    networks:
      - internal
      - external

networks:
  internal:
    internal: true
  external:
    driver: bridge

Nginx 配置反向代理 FTP 控制连接

4.2 监控与日志

yaml
logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "3"

services:
  filebeat:
    image: elastic/filebeat:latest
    volumes:
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
    depends_on:
      - fastftp

5. 常用命令参考

命令描述
docker-compose up -d启动服务(后台模式)
docker-compose down停止并移除容器
docker-compose logs -f fastftp查看 FTP 日志
docker-compose exec fastftp pure-pw list列出 FTP 用户
docker-compose restart fastftp重启 FTP 服务

6. 故障排查

  1. 连接超时

    • 检查防火墙设置是否开放 21 和被动端口范围
    • 验证网络配置是否正确
  2. 认证失败

    • 确认用户名密码是否正确
    • 检查用户主目录权限
  3. 被动模式问题

    • 确保 PASV 端口范围正确映射
    • 检查 PUBLICHOST 环境变量是否设置正确

通过以上配置,您可以轻松部署一个高性能、安全的 FastFTP 服务,适用于各种文件传输场景。根据实际需求调整配置参数,可以获得最佳的性能和安全性平衡。