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.jsonlogo.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,你应该能看到:

  1. 页面正常加载,不再转圈。

  2. 左上角的鸭子已经变成了你自己的 Logo。

  3. 所有文字和链接都是你自定义的内容。


6. 后续维护

  • 修改文字链接:编辑 platform-config.json,保存后刷新网页即可生效(无需重启)。

  • 修改左上角 Logo:将新的图片上传并覆盖目录下的 logo.png,然后执行 docker compose restart 重启容器。

消息盒子

# 暂无消息 #

只显示最新10条未读和已读信息