我的个人博客搭建全记录(Docker + WordPress + Argon)

我的个人博客搭建全记录(Docker + WordPress + Argon)

日志

  • 2026-08-08:修复文章 Markdown 渲染问题(安装 WP Githuber MD 插件);正文标题改为自动编号。
  • 2026-08-07:文章创建。记录博客从零搭建的完整过程(Docker + WordPress + Argon + SQLite + Redis)。

从零开始,搭建一个属于自己的技术博客。记录完整的部署架构、环境配置与踩坑过程,供后续参考。


为什么搭博客

一直想要一个属于自己的独立博客。对比了各种方案(Hexo、Hugo、Typecho、WordPress),最终选择了 WordPress + Argon 主题

  • WordPress:生态最成熟,插件丰富,后台管理方便,写文章体验好
  • Argon 主题:轻盈、简洁、颜值高,自带说说、留言板、时间轴等实用功能
  • 可定制性强:支持自定义 HTML/CSS/JS,能做出很个性化的效果

参考了网上"阿雷的小窝"(blog.leihub.cn)的博客风格,决定以它为范本进行搭建和美化。

整体架构

服务器是一台 Ubuntu 24.04 的云主机(1核2G),采用 Docker 容器化部署

                    ┌─────────────────────────────┐
                    │        Nginx (宿主机)        │
                    │  HTTPS 443 + SSL 证书        │
                    └──────────┬──────────────────┘
                               │ 反代 127.0.0.1:8082
                    ┌──────────▼──────────────────┐
                    │   blog-wordpress 容器        │
                    │   WordPress 6.x + PHP 8.3   │
                    │   + Argon 主题               │
                    │   + SQLite 数据库 (无 MySQL) │
                    └──────────┬──────────────────┘
                               │ 内部网络
                    ┌──────────▼──────────────────┐
                    │   blog-redis 容器            │
                    │   Redis 7 (对象缓存)         │
                    └─────────────────────────────┘

架构要点

组件 说明
反向代理 宿主机 Nginx,TLS 1.2/1.3,Let's Encrypt 证书
WordPress 官方 wordpress:php8.3-apache 镜像
数据库 SQLite(通过 SQLite Database Integration 插件),无需 MySQL,省内存
缓存 Redis 7(WordPress Object Cache),加速页面
端口 WordPress 只绑定 127.0.0.1:8082,不直接暴露公网

💡 为什么用 SQLite? 1核2G 的小内存服务器,跑 MySQL 比较吃力。SQLite 方案零数据库进程,配合 Redis 缓存,性能完全够用,还省内存。

部署步骤

目录结构

/opt/blog/
├── docker-compose.yml              # 容器编排
├── Dockerfile                      # WordPress 镜像定制
├── wp-data/                        # WordPress 数据卷(持久化)
├── wp-content-override/            # SQLite drop-in + 插件
│   ├── db.php
│   └── plugins/sqlite-database-integration/
└── scripts/                        # 运维脚本

Dockerfile

FROM wordpress:php8.3-apache

# 安装 PHP Redis 扩展(供 Redis Object Cache 插件使用)
RUN set -eux; \
    apt-get update; \
    apt-get install -y --no-install-recommends libzstd-dev; \
    pecl install redis; \
    docker-php-ext-enable redis; \
    apt-get clean; \
    rm -rf /var/lib/apt/lists/*

# 复制 SQLite 插件
COPY sqlite-database-integration /var/www/html/wp-content/plugins/sqlite-database-integration

# 安装数据库 drop-in(SQLite 核心)
RUN cp /var/www/html/wp-content/plugins/sqlite-database-integration/db.copy /var/www/html/wp-content/db.php

RUN chown -R www-data:www-data /var/www/html/wp-content
RUN mkdir -p /var/www/html/wp-content/database && chown www-data:www-data /var/www/html/wp-content/database

docker-compose.yml

services:
  wordpress:
    build: .
    image: blog-wordpress:latest
    container_name: blog-wordpress
    restart: unless-stopped
    ports:
      - "127.0.0.1:8082:80"   # 只绑定本机回环,由 nginx 反代
    depends_on:
      - redis
    environment:
      WORDPRESS_DB_HOST: "localhost"
      WORDPRESS_DB_USER: "wordpress"
      WORDPRESS_DB_PASSWORD: "wordpress"
      WORDPRESS_DB_NAME: "wordpress"
      WORDPRESS_CONFIG_EXTRA: |
        define('WP_DEBUG', true);
        define('WP_MEMORY_LIMIT', '128M');
        define('WP_MAX_MEMORY_LIMIT', '256M');
        define('FS_METHOD', 'direct');
        define('WP_REDIS_HOST', 'redis');
        define('WP_REDIS_PORT', 6379);
    volumes:
      - ./wp-data:/var/www/html
      - ./wp-content-override/db.php:/var/www/html/wp-content/db.php
      - ./wp-content-override/plugins/sqlite-database-integration:/var/www/html/wp-content/plugins/sqlite-database-integration
    mem_limit: 384m
    cpus: 1.0

  redis:
    image: redis:7-alpine
    container_name: blog-redis
    restart: unless-stopped
    command: redis-server --maxmemory 64mb --maxmemory-policy allkeys-lru
    mem_limit: 96m
    cpus: 0.5

Nginx 反向代理 + SSL

server {
    listen 443 ssl http2;
    server_name blog.mogreach.cloud;

    ssl_certificate /etc/letsencrypt/live/blog.mogreach.cloud/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/blog.mogreach.cloud/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;

    client_max_body_size 64M;

    location / {
        proxy_pass http://127.0.0.1:8082;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

SSL 证书使用 certbot 申请 Let's Encrypt 免费证书:

certbot certonly --webroot -w /var/www/certbot -d blog.mogreach.cloud

启动

cd /opt/blog
docker compose up -d --build

访问 https://blog.mogreach.cloud 进入 WordPress 安装向导,设置站点名称、管理员账号即可。

安装 Argon 主题

Argon 是一款轻盈、简洁的 WordPress 主题,虽然官方已停止更新(最终版 1.3.5),但功能完全够用。

安装方式:WordPress 后台 → 外观 → 主题 → 安装主题 → 上传主题压缩包 → 启用。

Argon 主题自带功能非常丰富:

功能 说明
说说 类似微博的短内容发布(/shuoshuo/
留言板 独立留言页面模板(/msgboard/
时间轴归档 按时间线展示所有文章(/archives/
左侧栏 Tab 文章目录 / 站点概览 / 功能 多 Tab 切换
站点统计 文章数、分类数、标签数自动统计
评论增强 Markdown、表情、点赞、UA 显示、QQ 头像等

博客首页

部署完成后,通过浏览器访问 https://blog.mogreach.cloud 即可看到博客首页:Argon 主题的 banner + 左侧栏 + 文章列表。

环境验证

部署完成后做一轮完整验证:

# 容器状态
docker ps --filter "name=blog" --format "{{.Names}} → {{.Status}}"
# blog-wordpress   Up (healthy)
# blog-redis       Up

# 页面响应
curl -s -o /dev/null -w "%{http_code}" https://blog.mogreach.cloud/
# 200

# 数据库文件
ls -la /var/www/html/wp-content/database/.ht.sqlite

性能表现(1核2G 小服务器):

页面耗时 0.081 秒 | 查询 13 次 | 内存 6.86 MB

页脚效果

页脚展示了备案号、版权、运行时间徽章,以及实时的页面耗时/查询数/内存占用。

踩坑记录

SQLite 数据库位置

SQLite 数据库文件在 /var/www/html/wp-content/database/.ht.sqlite,是隐藏文件。备份 WordPress 一定要带上这个目录,否则数据全丢。

修改配置后要清 Redis 缓存

直接改数据库(wp_options 表)后,页面可能不生效——因为 Redis 缓存了。需要:

docker exec blog-redis redis-cli FLUSHALL

选项写入用 UPSERT

直接操作 SQLite 时,UPDATE 不存在的行会静默失败。写配置脚本时要用"先查存在性,再决定 INSERT 还是 UPDATE"的方式。

内存限制

1核2G 的机器跑 WordPress + Redis,内存会比较紧张。给容器设置了 mem_limit,WordPress 内存上限 128M,Redis 只分 64M,实测运行稳定。

后续计划

  • [x] 博客搭建与部署
  • [x] 主题安装
  • [x] 页面创建(说说/留言板/归档)
  • [x] 顶部导航菜单
  • [x] 留言板评论功能
  • [ ] 写第一篇正式文章
  • [ ] 配置邮件 SMTP(评论通知)
  • [ ] 接入统计工具(已装 WP Statistics,待完善)

留言板页面

归档页面

留言板使用 Argon 自带的留言板模板(开启评论后自动显示表单),归档页按时间轴展示全部文章。


本文同步记录于「博客开发」标签,持续更新中。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇