Docker 搭建 Duckfolio 个人主页及避坑指南
Duckfolio 是一款极简的高颜值个人主页程序。本文记录了使用 Docker 部署的全过程,并重点解决了 “自定义 Logo 不生效” 和 “外网无法访问” 这两个常见痛点。
1. 环境准备
确保你的服务器(Debian/Ubuntu 等)已经安装好了 Docker 和 Docker Compose。
创建项目文件夹:
Bash
mkdir -p /root/duckfolio
cd /root/duckfolio
2. 准备资源与配置文件
第一步:准备自定义 Logo(解决 Logo 改不了的问题)
Duckfolio 的配置文件中有时 logo 字段会失效,最稳妥的方法是直接替换容器内的图片文件。
请先把你的头像图片下载到项目目录,并重命名为 logo.png:
Bash
# 替换下面的链接为你自己的图片地址
wget -O logo.png https://你的图片链接.jpg
(确保此时目录下有一个名为 logo.png 的文件)
第二步:创建内容配置文件
创建 platform-config.json 来定义你的昵称、简介和社交链接。
Bash
nano platform-config.json
参考模板(可直接复制修改):
JSON
{
"profile": {
"name": "你的昵称",
"bio": "这里写个人简介...",
"avatar": "https://你的头像链接.jpg"
},
"socialLinks": [
{
"id": "github",
"platform": "GitHub",
"url": "https://github.com/你的ID",
"icon": "FaGithub"
},
{
"id": "blog",
"platform": "Blog",
"url": "https://你的博客地址.com",
"icon": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"></line><path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"></path></svg>"
},
{
"id": "email",
"platform": "Email",
"url": "mailto:你的邮箱@example.com",
"icon": "FaEnvelope"
}
],
"websiteLinks": [
{
"id": "links",
"title": "更多链接",
"url": "#",
"description": "点击右上角查看"
}
]
}
技巧: 如果你想让博客图标显示在首页(头像下方),需要像上面代码一样,把它加到
socialLinks里,并填入 SVG 图标代码。
3. 编写 Docker Compose 配置(关键步骤)
创建 docker-compose.yml 文件。我们将把刚才准备好的 platform-config.json 和 logo.png 挂载进去。
Bash
nano docker-compose.yml
填入以下内容:
YAML
version: '3'
services:
duckfolio:
image: yorlg/duckfolio:latest
container_name: duckfolio
ports:
- "3008:3000" # 外部访问端口为 3008
volumes:
- ./platform-config.json:/app/public/platform-config.json
- ./logo.png:/app/public/logo.png # 【关键】强行覆盖左上角的鸭子图标
restart: always
4. 解决“外网无法访问”的网络大坑
这是很多人部署后遇到的最大问题:容器启动了,内网能通,外网打不开。
请务必执行以下两步操作:
A. 云端防火墙放行
登录你的云服务器控制台(阿里云 / 腾讯云 / 狐蒂云等),在安全组 / 防火墙设置中,放行 TCP 3008 端口。
B. 开启 Linux IP 转发 (必做!)
如果防火墙开了还是不通,说明 Linux 内核拦截了发往 Docker 的流量。
Bash
# 1. 开启内核转发功能
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf && sysctl -p
# 2. 重启 Docker 网络服务 (注意:会短暂重启所有容器)
systemctl restart docker
5. 启动服务
一切准备就绪,启动容器:
Bash
docker compose up -d
现在访问 http://你的IP:3008,你应该能看到:
页面正常加载,不再转圈。
左上角的鸭子已经变成了你自己的 Logo。
所有文字和链接都是你自定义的内容。
6. 后续维护
修改文字链接:编辑
platform-config.json,保存后刷新网页即可生效(无需重启)。修改左上角 Logo:将新的图片上传并覆盖目录下的
logo.png,然后执行docker compose restart重启容器。




