我的个人博客搭建全记录(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),但功能完全够用。
- 主题 GitHub:solstice23/argon-theme
- 官方文档:Argon Theme Docs
安装方式: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 自带的留言板模板(开启评论后自动显示表单),归档页按时间轴展示全部文章。
本文同步记录于「博客开发」标签,持续更新中。