一个支持文件上传和优雅退出的简单HTTP文件服务器,专为容器化部署优化。
/tmp 用于上传期间的数据切片积攒和组合,等到 100% 完成核对后再安全转移至目标 upload 文件夹。SIGTERM/SIGINT 信号完美捕停的逻辑之外,在内核底层新增拦截并跳出由于浏览器主动强行断开导致的 b"" (0字节)死循环等待,及完美静默拦截 WinError 10053 断联警告。/health 与 /version 供运维监控。# 使用默认配置
python server.py
# 指定端口和目录
python server.py --port 8080 --directory ./uploads --log-level DEBUG
# 绑定特定地址
python server.py --bind 127.0.0.1 --port 8080
# 构建镜像
docker build -t fileserver:latest .
# 运行容器
docker run -d \
--name fileserver \
-p 8000:8000 \
-v $(pwd)/uploads:/data \
-e LOG_LEVEL=INFO \
fileserver:latest
# 停止容器(优雅退出)
docker stop -t 30 fileserver
# 复制环境变量模板
cp .env.example .env
# 编辑 .env 文件配置参数
# PORT=8000
# LOG_LEVEL=INFO
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务(优雅退出)
docker-compose down
| 变量 | 说明 | 默认值 |
|---|---|---|
HOST | 绑定地址 | 0.0.0.0 |
PORT | 服务端口 | 8000 |
LOG_LEVEL | 日志级别 | INFO |
SERVE_DIRECTORY | 服务目录 | /data |
| 参数 | 说明 | 默认值 |
|---|---|---|
--bind, -b | 绑定地址 | 环境变量或空字符串 |
--port | 服务端口 | 环境变量或8000 |
--directory, -d | 服务目录 | 当前目录 |
--log-level | 日志级别 | INFO |
GET / - 目录列表GET /filename - 下载文件POST / - 上传文件GET /health - 健康检查
{
"status": "healthy",
"timestamp": "2024-01-15T10:30:00.000000",
"version": "2.0.0"
}
GET /version - 版本信息
{
"version": "2.0.0",
"python": "3.11.0",
"server": "SimpleHTTPWithUpload/2.0.0"
}
服务器实现了完善的优雅退出机制,防止重复触发关闭:
_shutdown_called 标志确保关闭只执行一次_shutdown_lock 锁保护关闭状态SIGTERM - Docker 默认停止信号SIGINT - Ctrl+C 中断SIGQUIT - 退出信号(如果可用)当接收到关闭信号时:
_shutdown_called,如果已在关闭中则处理重复信号如果在关闭过程中再次收到信号:
.
├── server.py # 主程序执行文件
├── static/ # 样式 (style.css) 与前端引擎 (script.js)
├── templates/ # 目录索引及上传结果 HTML 模板
├── tmp/ # 文件上传临时缓存池 (运行时自动构建)
├── Dockerfile # Docker 构建引擎指令
├── docker-compose.yml # Docker 组合与起停配置
├── docker-entrypoint.sh # 容器初始化及环境起调入口
├── .dockerignore # Docker 打包剔除规则
├── .env.example # 容器环境变量示范文件
└── README.md # 项目使用手册与更新纪要
原始代码基于 bones7456 的 gist,遵循原始许可证。
欢迎提交 Issue 和 Pull Request 来改进这个项目。
Content type
Image
Digest
sha256:509531640…
Size
46.2 MB
Last updated
6 months ago
docker pull hescc/file-server