如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
[!CAUTION] 此镜像为特定使用场景创建。我们不计划扩展该项目的功能,仅因客户项目中需要处理遗留集成而创建,供可能有类似需求的用户使用。
该Docker镜像提供可定制的ProFTPD服务器,支持MySQL认证和TLS加密。
| Docker镜像 | 大小 |
|---|---|
| https://hub.docker.com/r/serversideup/proftpd |
该镜像基于ubuntu:24.04构建,提供稳定且最新的ProFTPD运行环境。
以下环境变量可用于自定义ProFTPD服务器:
| 变量 | 描述 | 默认值 |
|---|---|---|
FTP_DEBUG_LEVEL | 设置ProFTPD调试级别 | 0 |
FTP_LOG_LEVEL | 设置ProFTPD系统日志级别 | warn |
FTP_MASQUERADE_ADDRESS | 被动模式连接的IP地址或主机名 | - |
FTP_PASSIVE_PORT_RANGE_START | 被动端口范围起始值 | 60000 |
FTP_PASSIVE_PORT_RANGE_END | 被动端口范围结束值 | 60100 |
FTP_SQL_USERS_TABLE | 用于用户认证的MySQL表名 | ftpusers |
FTP_TLS_CERTIFICATE_FILE | SSL证书文件路径 | /etc/ssl/ftp/proftpd.crt |
FTP_TLS_CERTIFICATE_KEY_FILE | SSL证书密钥文件路径 | /etc/ssl/ftp/proftpd.key |
FTP_TLS_REQUIRED | 是否要求TLS | off |
FTP_TLS_WAIT_FOR_CERTIFICATE | 是否等待SSL证书生成(适用于使用Let's Encrypt等工具生成证书的场景) | false |
FTP_TLS_WAIT_TIMEOUT | 等待SSL证书生成的超时时间(秒) | 60 |
MYSQL_DATABASE | MySQL数据库名 | ftpdb |
MYSQL_HOST | MySQL主机地址 | mysql |
MYSQL_PASSWORD | MySQL密码 | ftppassword |
MYSQL_PORT | MySQL端口 | 3306 |
MYSQL_USER | MySQL用户名 | ftpuser |
镜像构建过程中使用以下构建参数:
| 构建参数 | 描述 | 值 |
|---|---|---|
FTP_USER | ProFTPD运行用户 | proftpd_user |
FTP_GROUP | ProFTPD运行组 | nogroup |
FTP_SSL_CERTS_DIR | SSL证书目录 | /etc/ssl/ftp |
FTP_USERS_DIR | 用户主目录基础路径 | /var/ftp/users |
若需将Let's Encrypt与ProFTPD + CloudFlare + MySQL认证结合使用,可搭配我们的另一个镜像https://github.com/serversideup/docker-certbot-dns-cloudflare%EF%BC%8C%E4%BB%A5%E8%87%AA%E5%8A%A8%E7%94%9F%E6%88%90SSL%E8%AF%81%E4%B9%A6%E5%B9%B6%E4%B8%8EProFTPD%E5%AE%B9%E5%99%A8%E5%85%B1%E4%BA%AB%E3%80%82
以下是使用ProFTPD镜像配合Let's Encrypt的完整示例配置,只需设置符合您环境的变量即可:
ymlservices: certbot: image: serversideup/certbot-dns-cloudflare:latest volumes: - certbot_data:/etc/letsencrypt environment: CLOUDFLARE_API_TOKEN: "${CERTBOT_CLOUDFLARE_API_TOKEN}" CERTBOT_EMAIL: "${CERTBOT_EMAIL}" CERTBOT_DOMAINS: "${FTP_SERVER}" CERTBOT_KEY_TYPE: "rsa" PUID: "999" PGID: "999" ftp: volumes: - ftp_data:/var/ftp/users - ftp_logs:/var/log/proftpd - certbot_data:/etc/letsencrypt environment: FTP_DEBUG_LEVEL: "0" # 0-10(10为最详细) FTP_LOG_LEVEL: "info" # debug, info, warn, error FTP_MASQUERADE_ADDRESS: "${FTP_SERVER}" FTP_PASSIVE_PORT_RANGE_START: "60000" FTP_PASSIVE_PORT_RANGE_END: "60049" FTP_SQL_USERS_TABLE: "users" FTP_TLS_CERTIFICATE_FILE: "/etc/letsencrypt/live/${FTP_SERVER}/fullchain.pem" FTP_TLS_CERTIFICATE_KEY_FILE: "/etc/letsencrypt/live/${FTP_SERVER}/privkey.pem" FTP_TLS_REQUIRED: "on" FTP_TLS_WAIT_FOR_CERTIFICATE: "true" MYSQL_DATABASE: "${FTPUSER_DATABASE}" MYSQL_HOST: "${FTPUSER_HOST}" MYSQL_PASSWORD: "${FTPUSER_PASSWORD}" MYSQL_PORT: "${FTPUSER_PORT}" MYSQL_USER: "${FTPUSER_USERNAME}" depends_on: - certbot ports: - target: 21 published: 21 protocol: tcp mode: host - target: 990 published: 990 protocol: tcp mode: host - target: 60000 published: 60000 protocol: tcp mode: host - target: 60001 published: 60001 protocol: tcp mode: host - target: 60002 published: 60002 protocol: tcp mode: host volumes: ftp_logs: ftp_data: certbot_data:
请确保将MySQL连接详情替换为您自己的配置。
镜像中包含ProFTPD配置文件(proftpd.conf),其主要设置如下:
您可根据需求修改proftpd.conf文件以进一步自定义ProFTPD服务器。
proftpd.conf配置。暴露以下端口:
| 端口 | 服务 |
|---|---|
| 21 | FTP |
| 990 | FTPS(基于TLS的FTP) |
| 60000-60100 | 被动端口范围 |
若使用Kubernetes等编排工具,需确保容器和主机上均开放相关端口。
例如,在Docker Swarm中,需在docker-compose文件中使用长格式的ports指令:
ymlservices: ftp: image: serversideup/proftpd ports: - target: 21 published: 21 protocol: tcp mode: host - target: 990 published: 990 protocol: tcp mode: host - target: 60000 published: 60000 protocol: tcp mode: host - target: 60001 published: 60001 protocol: tcp mode: host - target: 60002 published: 60002 protocol: tcp mode: host
遗憾的是,Docker Swarm不支持在长格式中指定已发布端口范围,因此需逐个指定端口。请确保开放FTP_PASSIVE_PORT_RANGE_START和FTP_PASSIVE_PORT_RANGE_END环境变量定义范围内的所有端口。
可使用MySQL或MariaDB。在数据库中创建以下表:
sqlCREATE TABLE ftpusers ( id INT AUTO_INCREMENT PRIMARY KEY, -- 自增主键 username VARCHAR(255) NOT NULL, -- 用户名,最大长度255字符 password VARCHAR(255) NOT NULL, -- 密码,最大长度255字符 uid INT NOT NULL, -- 用户ID,整数类型 gid INT NOT NULL, -- 组ID,整数类型 homedir VARCHAR(255) NOT NULL, -- 主目录路径,最大长度255字符 shell VARCHAR(255) NOT NULL -- Shell,最大长度255字符 );
然后使用以下SQL添加用户:
sqlINSERT INTO ftpusers (username, password, uid, gid, homedir, shell) VALUES ( 'testuser', CONCAT('{sha256}', TO_BASE64(UNHEX(SHA2('mypassword', 256)))), 2001, 2001, '/var/ftp/users/testuser', '/bin/false' );
作为开源项目,我们致力于开发过程的透明度和协作。非常感谢社区成员提供的任何贡献,无论是修复错误、提出功能、改进文档还是传播项目,您的参与都将增强项目实力。
需要入门帮助?加入我们的***社区,我们将为您提供支持!
我们所有的软件都是免费开源的。这些成果离不开赞助商的资金支持。
https://github.com/***/serversideup
青铜赞助商
目前暂无青铜赞助商。https://github.com/***/serversideup个人支持者
https://github.com/GeekDougle https://github.com/JQuilty https://github.com/MaltMethodDev我们是Dan和Jay——一个热爱开源产品的两人团队。我们创建了Server Side Up来分享我们所学的知识。
Dan Pastori | Jay Rogers |
|---|---|
https://github.com/danpastori | https://github.com/jaydrogers |
如果您喜欢这个项目,一定要查看我们的其他项目。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。




来自真实用户的反馈,见证轩辕镜像的优质服务