使用 Docker Compose 编排 Nginx、PHP 和数据库容器是部署 Typecho 最推荐的方式,适合拥有 VPS 控制权的用户,主要风险在于容器重启后数据持久化配置错误会导致文章丢失。
先说结论:容器化部署能隔离环境依赖,但必须正确挂载数据卷才能保障博客内容安全。
- 适合:拥有 Linux VPS 且希望简化环境配置的个人站长
- 先准备:域名解析记录、数据库 root 密码、Docker 环境
- 验收:通过浏览器访问安装向导并完成首篇文章发布
命令速用版
以下命令用于快速创建项目目录并启动服务,假设当前用户拥有 sudo 权限。
mkdir -p /opt/typecho && cd /opt/typecho
wget http://typecho.org/downloads/typecho-latest.zip
unzip typecho-latest.zip
mv typecho/* . && rm -rf typecho typecho-latest.zip
创建 docker-compose.yml 文件后,执行以下命令启动容器:
docker compose up -d
为什么会这样
容器化部署的核心价值在于环境一致性和迁移便利性,而非单纯的性能提升。
Typecho 依赖 PHP 运行环境和数据库服务,传统安装需要在宿主机配置 Nginx、PHP-FPM 和 MySQL,不同 Linux 发行版的软件源版本差异容易导致兼容性问题。Docker 将运行环境打包在镜像中,屏蔽了宿主机的系统差异。只要数据卷(Volume)正确挂载到宿主机目录,即使容器删除重建,博客文章和设置也不会丢失。
分步处理
按顺序执行以下步骤,确保每一步都有明确的检查点。
步骤 1:准备目录和源码
在 VPS 上创建独立目录存放博客数据,下载 Typecho 官方源码并解压。不要直接将源码放在容器内部而不挂载,否则容器删除后代码和上传的文件会丢失。
步骤 2:编写编排文件
创建 docker-compose.yml,定义三个服务:db(数据库)、php(运行环境)、nginx(Web 服务器)。确保 database 服务的数据卷挂载到宿主机 /opt/typecho/db_data,php 服务的代码卷挂载到 /opt/typecho。
步骤 3:配置文件权限
Typecho 需要写入 usr 目录用于上传附件和缓存。在启动容器前或启动后,确保宿主机挂载目录的权限允许容器内的 www-data 用户写入。常见操作是 chown -R 1000:1000 /opt/typecho,具体 UID 需参考所用 PHP 镜像的文档。
步骤 4:初始化安装
启动容器后,浏览器访问服务器 IP 或域名。Typecho 安装向导会检测数据库连接,填写 docker-compose.yml 中设置的数据库名、用户名和密码。数据库主机名填写服务名(如 db),而不是 localhost。
怎么验证是否生效
通过容器状态和页面表现双重验证。
执行 docker compose ps 检查所有容器状态是否为 Up。尝试访问 http://your-domain/admin,确认能跳转到 Typecho 后台登录页。发布一篇测试文章并上传图片,检查宿主机 /opt/typecho/usr/uploads 目录是否生成了对应文件,确认数据持久化生效。
常见坑
伪静态规则失效
Typecho 默认开启伪静态,Nginx 容器内需要配置 rewrite 规则。如果文章页面返回 404,检查 Nginx 配置是否包含 typecho 专用的 rewrite 规则,不要直接使用默认配置。
数据库连接失败
在安装向导中,数据库主机名必须填写 docker-compose.yml 中定义的数据库服务名称(例如 db),填写 localhost 会导致 PHP 容器无法连接数据库容器。
上传权限不足
如果后台上传图片报错,通常是 usr 目录权限问题。进入 PHP 容器执行 chown -R www-data:www-data /var/www/html/usr 修复,或调整宿主机挂载目录的属主。
常见问题
如何备份博客数据?
直接备份宿主机挂载目录即可。
数据主要存在于 /opt/typecho 目录(包含源码和上传文件)和 /opt/typecho/db_data(数据库文件)。停止容器后打包这两个目录,或定期导出 MySQL 数据为 SQL 文件。
如何升级 Typecho 版本?
替换源码目录并迁移配置文件。
下载新版源码解压覆盖除 usr 目录和 config.inc.php 之外的文件。覆盖后检查文件权限,访问后台通常会提示数据库升级,按提示操作即可。
容器化后如何配置 HTTPS?
建议在 Nginx 容器内配置证书或使用反向代理。
可以将证书文件挂载到 Nginx 容器并在配置文件中启用 443 端口,也可以在前端使用 Nginx Proxy Manager 等工具统一处理 SSL 证书,Typecho 后台设置中需将站点 URL 改为 https 开头。
参考来源
- Typecho 官方博客,下载页面,https://typecho.org
- Docker 官方文档,Compose 文件参考,https://docs.docker.com/compose/