argus/src/metric/ftp/build/README.md

159 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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