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 加密配置
- 生成自签名证书:
bash
mkdir -p ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout ssl/pure-ftpd.pem -out ssl/pure-ftpd.pem
- 在 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. 故障排查
连接超时:
- 检查防火墙设置是否开放 21 和被动端口范围
- 验证网络配置是否正确
认证失败:
- 确认用户名密码是否正确
- 检查用户主目录权限
被动模式问题:
- 确保 PASV 端口范围正确映射
- 检查 PUBLICHOST 环境变量是否设置正确
通过以上配置,您可以轻松部署一个高性能、安全的 FastFTP 服务,适用于各种文件传输场景。根据实际需求调整配置参数,可以获得最佳的性能和安全性平衡。