205 lines
4.3 KiB
Markdown
205 lines
4.3 KiB
Markdown
# FTP Server
|
||
|
||
基于 Go 语言开发的轻量级 FTP 服务器,带 Web 管理面板,**跨平台支持 Windows / Linux / macOS**。
|
||
|
||
## 功能特性
|
||
|
||
### FTP 服务
|
||
- 完整的 FTP 协议支持(RFC 959)
|
||
- 主动模式(PORT)和被动模式(PASV)
|
||
- 文件上传 / 下载(STOR / RETR)
|
||
- 目录浏览、创建、删除(LIST / MKD / RMD)
|
||
- 文件删除、重命名(DELE / RNFR / RNTO)
|
||
- 每用户独立的 HomeDir 和权限控制(只读 / 可写)
|
||
|
||
### Web 管理面板
|
||
- 管理员登录认证(Token 机制,24h 自动过期)
|
||
- 仪表盘 — 服务器状态实时概览
|
||
- 用户管理 — 添加 / 编辑 / 删除 FTP 用户
|
||
- 系统设置 — 修改 FTP 端口、Web 端口、管理员密码
|
||
|
||
## 快速开始
|
||
|
||
### 编译
|
||
|
||
确保已安装 Go 1.21+,然后执行:
|
||
|
||
```bash
|
||
# 编译为当前平台
|
||
go build -o ftp-server ./cmd/
|
||
|
||
# 交叉编译 - Windows (64位)
|
||
GOOS=windows GOARCH=amd64 go build -o ftp-server.exe ./cmd/
|
||
|
||
# 交叉编译 - Linux (64位)
|
||
GOOS=linux GOARCH=amd64 go build -o ftp-server ./cmd/
|
||
|
||
# 交叉编译 - macOS
|
||
GOOS=darwin GOARCH=amd64 go build -o ftp-server ./cmd/
|
||
```
|
||
|
||
### 运行
|
||
|
||
**Windows:**
|
||
|
||
```bash
|
||
# 使用默认配置启动
|
||
.\ftp-server.exe
|
||
|
||
# 指定配置文件
|
||
.\ftp-server.exe -config myconfig.json
|
||
```
|
||
|
||
**Linux / macOS:**
|
||
|
||
```bash
|
||
# 使用默认配置启动
|
||
./ftp-server
|
||
|
||
# 指定配置文件
|
||
./ftp-server -config myconfig.json
|
||
|
||
# 后台运行
|
||
nohup ./ftp-server > ftp-server.log 2>&1 &
|
||
```
|
||
|
||
首次运行会自动生成 `config.json` 配置文件和 `ftp_root` 根目录。
|
||
|
||
### 访问
|
||
|
||
| 服务 | 地址 |
|
||
|------|------|
|
||
| Web 管理面板 | http://localhost:8080 |
|
||
| FTP 服务 | localhost:2121 |
|
||
|
||
### 默认账号
|
||
|
||
| 服务 | 用户名 | 密码 |
|
||
|------|--------|------|
|
||
| Web 管理面板 | `admin` | `admin123` |
|
||
| FTP 默认用户 | `ftpuser` | `ftp123` |
|
||
|
||
> 请在首次登录后立即修改默认密码。
|
||
|
||
## Linux Systemd 服务(可选)
|
||
|
||
在 Linux 上可以配置为 systemd 服务,实现开机自启:
|
||
|
||
```bash
|
||
# 创建服务文件
|
||
sudo nano /etc/systemd/system/ftp-server.service
|
||
```
|
||
|
||
写入以下内容(按实际路径修改):
|
||
|
||
```ini
|
||
[Unit]
|
||
Description=FTP Server
|
||
After=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
User=root
|
||
WorkingDirectory=/opt/ftp-server
|
||
ExecStart=/opt/ftp-server/ftp-server -config /opt/ftp-server/config.json
|
||
Restart=on-failure
|
||
RestartSec=5
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
|
||
启动并设置开机自启:
|
||
|
||
```bash
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl start ftp-server
|
||
sudo systemctl enable ftp-server
|
||
|
||
# 查看状态
|
||
sudo systemctl status ftp-server
|
||
|
||
# 查看日志
|
||
sudo journalctl -u ftp-server -f
|
||
```
|
||
|
||
## 配置说明
|
||
|
||
配置文件为 `config.json`,结构如下:
|
||
|
||
```json
|
||
{
|
||
"ftp": {
|
||
"host": "0.0.0.0",
|
||
"port": 2121,
|
||
"passivePortMin": 50000,
|
||
"passivePortMax": 50100,
|
||
"rootDir": "./ftp_root"
|
||
},
|
||
"web": {
|
||
"host": "0.0.0.0",
|
||
"port": 8080
|
||
},
|
||
"admin": {
|
||
"username": "admin",
|
||
"password": "admin123"
|
||
},
|
||
"ftpUsers": [
|
||
{
|
||
"username": "ftpuser",
|
||
"password": "ftp123",
|
||
"homeDir": "./ftp_root",
|
||
"write": true
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
| 字段 | 说明 |
|
||
|------|------|
|
||
| `ftp.host` | FTP 监听地址 |
|
||
| `ftp.port` | FTP 端口(默认 2121,避免需要管理员权限) |
|
||
| `ftp.passivePortMin/Max` | 被动模式端口范围 |
|
||
| `ftp.rootDir` | FTP 根目录 |
|
||
| `web.host` | Web 面板监听地址 |
|
||
| `web.port` | Web 面板端口 |
|
||
| `admin.username/password` | 管理员凭据 |
|
||
| `ftpUsers` | FTP 用户列表 |
|
||
| `ftpUsers[].homeDir` | 用户主目录 |
|
||
| `ftpUsers[].write` | 是否允许写入 |
|
||
|
||
## FTP 客户端连接
|
||
|
||
推荐使用 [FileZilla](https://filezilla-project.org/) 连接:
|
||
|
||
```
|
||
主机: localhost
|
||
端口: 2121
|
||
用户名: ftpuser
|
||
密码: ftp123
|
||
```
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
FTP-server/
|
||
├── cmd/main.go # 主程序入口
|
||
├── config/config.go # 配置管理模块
|
||
├── ftp/server.go # FTP 服务核心
|
||
├── web/server.go # Web 管理面板后端 API
|
||
├── static/embed.go # 前端 HTML 页面(内嵌)
|
||
├── go.mod # Go 模块定义
|
||
└── config.json # 运行时配置(自动生成)
|
||
```
|
||
|
||
## 技术栈
|
||
|
||
- **Go** — 无需运行时依赖,单文件部署,跨平台支持
|
||
- **标准库 net/http** — Web 管理面板
|
||
- **标准库 net** — FTP 协议实现
|
||
- **内嵌 HTML/CSS/JS** — 无需额外前端文件
|
||
|
||
## 许可证
|
||
|
||
MIT License
|