# 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!'
```