惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
博客园 - 叶小钗
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美
Last Week in AI
Last Week in AI
罗磊的独立博客
量子位
Jina AI
Jina AI
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
IT之家
IT之家
美团技术团队
雷峰网
雷峰网
爱范儿
爱范儿
S
SegmentFault 最新的问题
小众软件
小众软件
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

Allen Hua 的网络博客

由于 Linux 桌面没有一个好用的天气程序就写了一个跨平台的CheckitoutWeather 给 caesium-image-compressor 图片压缩程序构建了 Linux AppImage v2.8.5 最新版 debian13(debian trixie)安装了nvidia闭源驱动后从x11切换到wayland的方法 山间摩旅追风,偶遇一场绚烂晚霞 最近使用debian系统的一些心得 机械革命无界14Pro笔记本debian forky成功驱动内置扬声器和麦克风 开发了一款openwrt插件:文本剪贴板 解决机械革命笔记本内屏高刷240Hz闪屏问题 使用 Java 写了一个局域网端口扫描器 - Allen Hua 的网络博客 openwrt使用外置根extroot机制扩展根分区大小 - Allen Hua 的网络博客 将机场ss节点批量转换成ss字符串链接批量添加到passwall - Allen Hua 的网络博客 给机械革命钛钽plus换屏:NY2换成NZ2 - Allen Hua 的网络博客 记录一次pve宿主机和上面的debian虚机无故down机事件 - Allen Hua 的网络博客 给图床部署cdn腾讯云的edgeone并排查Cache-Control max-age 3600的问题 - Allen Hua 的网络博客 从高山草甸到徽派古村:武功山反穿与皖浙赣自驾行记 - Allen Hua 的网络博客 增程器就是充电宝?别被忽悠了 - Allen Hua 的网络博客 浦口龙虎巷扫街,记录人间真实 博客图片压缩方案更新|AVIF|WebP|MozJPEG|标准JPEG Windows 电脑使用 Obs Studio 录制各个网站视频/桌面画面教程 为typecho博客添加latex支持 新能源汽车之纯电车使用交流慢充和直流快充的充电损耗对比 2025年3月更新全国5A景区名录 2025最新查看小米/红米手机电池健康度和循环次数方法 完美解决 seafile FILE_SERVER_ROOT 配置导致的内网外网不能同时访问和上传下载的问题 纯css实现typecho博客文章文字spoiler剧透效果 我对Typecho Facile主题的一些修改,图片懒加载优化,样式定制 2024年8月我的宜昌 - 重庆 - 川西小环线自驾旅行分享 2022年打卡南京市区人防工程纳凉点 2024年带着A7C2+腾龙28-200 再次来到红山森林动物园 入手a7c2第一个变焦镜头腾龙28-200体验分享
记录 typecho 1.2.0 升级到 1.3.0 过程
字数:3194 · 2026-04-25 · via Allen Hua 的网络博客
阅读量:891

主要过程

我的 typecho 是基于 docker compose 部署安装的。当前的 compose 文件如下

services:
  typecho:
    container_name: typecho
    image: joyqi/typecho:1.3.0-php7.4-apache
    restart: unless-stopped
    environment:
      TIMEZONE: Asia/Shanghai
      TYPECHO_DB_HOST: mysql-typecho
      TYPECHO_DB_USER: typecho
      TYPECHO_DB_PASSWORD: xxx
      TYPECHO_DB_DATABASE: typecho
      TYPECHO_SITE_URL: https://blog.xxx.com
      TYPECHO_USER_NAME: xxx
      TYPECHO_USER_PASSWORD: xxx
      TYPECHO_USER_MAIL: xxx
      MAX_POST_BODY: 100M
    networks:
        - typecho-net
    volumes:
        - ./typecho-data-1.3.0:/app
    ports:
        - 8090:80
    depends_on:
        - mysql

  mysql:
    container_name: mysql-typecho
    image: mysql:8.0.29
    restart: unless-stopped
    networks:
        - typecho-net
    volumes:
        - ./mysql-data:/var/lib/mysql
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: xxx
      MYSQL_DATABASE: xxx
      MYSQL_USER: xxx
      MYSQL_PASSWORD: xxx

networks:
  typecho-net:
  • 使用 docker compose up -d 后台启动
  • 使用 docker compose down 删除网络、容器
  • 注意是 docker compose,不是老旧的 docker-compose
  • 如果有将上述 compose 文件命名的比较特殊,比如叫做 typecho.yml,运行 docker compose 命令时需加上 -f typecho.yml

这里我踩了几个坑,因为我有几个 typecho 环境:

1.3.0版本建议使用这个镜像 joyqi/typecho:1.3.0-php7.4-apachejoyqi/typecho:1.3.0-php8.2-apache这个镜像由于 php 版本过高,有运行时兼容性问题,甚至 blog 系统无法正常工作。

1.2.1版本可以使用 joyqi/typecho:1.2.1-php8.0-apache 这个镜像,我的实测是OK的。

1.2.0版本可以使用 joyqi/typecho:1.2.0-php7.4-apache 这个镜像,我的实测是OK的。

typecho 系统运行之后关键的用户数据在 usr/ 目录下,我之前只挂载了这个目录,但是和 usr/ 目录同级的还有 config.inc.php.htaccess 等关键文件,其中config.inc.php可以在新版本安装之后重新走一遍安装流程生成。所以我上面的 compose 文件,我将挂载的容器内目录改成了 /app(即./typecho-data-1.3.0:/app),原本只挂载了/app/usr,这样数据更全,更新系统更安全。

因为我开启了系统地址重写功能,所以容器内的 /etc/apache2/apache2.conf 文件也需要备份一下,在新环境里直接将此文件覆盖过去即可。

所以对于我的这种环境部署,更新typecho版本需要备份的关键数据有:

  1. 容器内 usr/ 目录,这是用户目录,所有的插件,主题,上传的文件都在这里
  2. .htaccess 文件,一般在容器内 /app/.htaccess
  3. /etc/apache2/apache2.conf 文件,备份它,新环境运行起来之后进入容器,使用这个文件替换原本的 apache2.conf 文件

好了,关键就是这三份文件,如果你在寻找 typecho 博客更新的一些文章,或者遇到什么更新困难,错误之类的问题,你需要考虑到你是不是用的 joyqi/typecho:1.3.0-php7.4-apache 这种镜像!!!这个镜像包含了 typecho php 服务和 apache2 服务!!!数据库服务是单独部署的。但有些镜像可能没有 apache2 web server 服务。

官方教程

再来说说官方的 upgrade 教程:https://docs.typecho.org/upgrade ,文中提到,更新 typecho 其实只需要升级这些文件,使用新版本的这些文件替换进去就行了。但因为我们是通过 docker 部署的,建议更新镜像 tag,作者除了维护这些文件,还有 php 运行时环境,可能还涉及到安全:比如镜像内基础镜像的更新、内核的更新。

/admin/
/var/
/index.php
/install.php

其他细碎问题

最后再说一点杂碎的可能被忽略的问题

  • 如果你进入到了 /install.php 页面,点击之后没有反应,你需要考虑到你当前本地挂载的目录是否正确,比如更新了镜像版本之后,你依然使用原本的本地目录,但是挂载到了容器中的 /app 下(你原本挂载到容器中的 /app/usr),所以会造成安装失败
  • 要关注容器内 /app 是否有写入权限。所有者最好是 www-data,权限最好是 755,可以直接在宿主机修改权限和拥有者
  • 新环境运行好之后可以将备份的 usr 目录完全替换新环境的 usr 目录,确保文件所有者和权限正确
  • 安装界面选择了正确的数据库驱动后,对应的数据库主机(也就是 host),可以直接填写 mysql 容器的名称,同一个 compose stack 下运行的服务相互之间可以通过容器名称找到彼此
  • 数据库挂载不要动,不论你是挂载到 volume 的,还是当前文件夹下的某个子文件夹,对应的容器内目录仍然是 /var/lib/mysql,数据库镜像tag也不需要更新
  • 修改了容器内 apache2 的配置,比如 .htaccess 或者 /etc/apache2/apache2.conf 文件,建议通过 docker compose restart 重启 stack 整个服务

大功告成!