159 lines
3.8 KiB
Markdown
159 lines
3.8 KiB
Markdown
# FTP 镜像配置
|
||
|
||
## 环境变量配置
|
||
|
||
### FTP_BASE_PATH
|
||
|
||
设置 FTP 数据的基础路径。
|
||
|
||
**默认值**: `/private/argus/ftp`
|
||
|
||
**用途**:
|
||
- 共享目录路径: `${FTP_BASE_PATH}/share` (用于版本发布)
|
||
- 配置文件存储路径: `/private/argus/etc/`
|
||
|
||
### DOMAIN
|
||
|
||
设置 FTP 服务的域名。
|
||
|
||
**默认值**: `ftp.metric.argus.com`
|
||
|
||
**用途**:
|
||
- 容器IP记录文件: `/private/argus/etc/${DOMAIN}`
|
||
|
||
### FTP_PASSWORD
|
||
|
||
设置 ftpuser 用户的密码。
|
||
|
||
**默认值**: `ZGClab1234!`
|
||
|
||
**用途**:
|
||
- ftpuser 用户的登录密码
|
||
|
||
## 使用示例
|
||
|
||
### 1. 使用默认配置
|
||
```bash
|
||
docker run -d \
|
||
--name ftp-server \
|
||
-p 21:21 \
|
||
-p 21100-21110:21100-21110 \
|
||
-v /host/ftp/data:/private/argus/ftp \
|
||
argus-metric-ftp:1.0.0
|
||
```
|
||
|
||
### 2. 自定义配置(运行时环境变量)
|
||
```bash
|
||
docker run -d \
|
||
--name ftp-server \
|
||
-p 21:21 \
|
||
-p 21100-21110:21100-21110 \
|
||
-e FTP_BASE_PATH=/custom/ftp/path \
|
||
-e DOMAIN=custom.ftp.domain.com \
|
||
-e FTP_PASSWORD=MySecurePassword123! \
|
||
-v /host/ftp/data:/custom/ftp/path \
|
||
argus-metric-ftp:1.0.0
|
||
```
|
||
|
||
## 目录结构
|
||
|
||
容器启动后会在 `${FTP_BASE_PATH}` 下创建以下目录结构:
|
||
|
||
```
|
||
${FTP_BASE_PATH}/
|
||
└── share/ # FTP根目录(直接挂载)
|
||
└── (用户上传的文件)
|
||
|
||
/private/argus/etc/
|
||
└── ${DOMAIN} # 容器IP记录文件
|
||
```
|
||
|
||
## vsftpd 配置说明
|
||
|
||
### 核心配置参数
|
||
|
||
根据README中的推荐配置,vsftpd.conf包含以下关键设置:
|
||
|
||
```bash
|
||
# 基本设置
|
||
local_enable=YES # 允许本地用户登录
|
||
write_enable=YES # 允许写操作(上传/删除/修改)
|
||
chroot_local_user=YES # 限制用户在自己目录中
|
||
allow_writeable_chroot=YES # 防止 chroot 错误(重要!)
|
||
|
||
# 被动模式配置
|
||
pasv_enable=YES # 启用被动模式
|
||
pasv_min_port=21100 # 被动模式最小端口
|
||
pasv_max_port=21110 # 被动模式最大端口
|
||
|
||
# 用户访问控制
|
||
userlist_enable=YES # 启用用户列表
|
||
userlist_file=/etc/vsftpd.userlist # 用户列表文件
|
||
userlist_deny=NO # 只允许列表中的用户登录
|
||
```
|
||
|
||
### 用户管理
|
||
|
||
#### 默认用户
|
||
- **用户名**: ftpuser
|
||
- **密码**: ZGClab1234! (可通过 FTP_PASSWORD 环境变量修改)
|
||
- **UID**: 2133 (与prometheus用户保持一致,可通过 FTP_UID 环境变量修改)
|
||
- **GID**: 2015 (与prometheus用户保持一致,可通过 FTP_GID 环境变量修改)
|
||
- **主目录**: ${FTP_BASE_PATH}/share (直接指向挂载目录)
|
||
- **Shell**: /bin/bash
|
||
- **用户列表**: 已添加到 `/etc/vsftpd.userlist`
|
||
|
||
#### 添加新用户
|
||
```bash
|
||
# 进入容器
|
||
docker exec -it ftp-server bash
|
||
|
||
# 添加新用户
|
||
useradd -d ${FTP_BASE_PATH}/share/newuser -s /bin/bash newuser
|
||
echo "newuser" >> /etc/vsftpd.userlist
|
||
passwd newuser
|
||
|
||
# 创建用户目录
|
||
mkdir -p ${FTP_BASE_PATH}/share/newuser
|
||
chown newuser:newuser ${FTP_BASE_PATH}/share/newuser
|
||
```
|
||
|
||
## 端口配置
|
||
|
||
- **21**: FTP 控制端口
|
||
- **20**: FTP 数据端口 (主动模式)
|
||
- **21100-21110**: 被动模式数据端口范围
|
||
|
||
### 日志文件位置
|
||
- **vsftpd 日志**: `/var/log/vsftpd/vsftpd.log`
|
||
- **supervisor 日志**: `/var/log/supervisor/`
|
||
- `supervisord.log`: supervisor 主日志
|
||
- `vsftpd.log`: vsftpd 标准输出
|
||
- `vsftpd_error.log`: vsftpd 错误输出
|
||
|
||
```bash
|
||
# 在宿主机上配置 logrotate
|
||
cat > /etc/logrotate.d/ftp-docker << EOF
|
||
/var/lib/docker/containers/*/ftp-server-*.log {
|
||
daily
|
||
rotate 7
|
||
compress
|
||
delaycompress
|
||
missingok
|
||
notifempty
|
||
copytruncate
|
||
}
|
||
EOF
|
||
```
|
||
|
||
### FTP连接测试
|
||
```bash
|
||
# 本地测试连接
|
||
ftp localhost
|
||
|
||
curl -fsS 'ftp://ftpuser:ZGClab1234!@177.177.70.200/setup.sh' -o setup.sh
|
||
|
||
# root用户直接执行,非root用户需要使用sudo
|
||
chmod +x setup.sh
|
||
bash setup.sh --server {$域名} --user ftpuser --password 'ZGClab1234!'
|
||
``` |