从宝塔迁移到 1Panel:基于 Docker 重新部署 Typecho 博客记录

之前博客一直放在宝塔面板里跑,最近趁着拉理服务器环境,彻底把宝塔给删了,切到了开源的 1Panel,并顺便把 Typecho 博客改成了全 Docker 化部署。这篇文章记录一下迁移原因和具体的折腾过程。


请输入图片描述

一、 为啥要把宝塔换掉?

宝塔确实低门槛,但用久了几个痛点很明显:

  • 环境太乱:宝塔会在系统里装一堆编译好的软件和各种后台脚本,把原生的包管理器搞得很杂乱。
  • Docker 支持边缘化:宝塔的 Docker 功能更像个外挂插件,核心逻辑还是倾向于把 Nginx/MySQL/PHP 直接装在宿主机上。
  • 隐私与绑定:强制绑定手机号,加上时不时出的安全漏洞,心里总觉得不踏实。

1Panel 的逻辑就很干净——以 Docker 为核心,所有应用都通过容器隔离。面板本身开源,基于 Go + Vue3,资源占用很低。


二、 卸载宝塔与数据备份

提示:如果有条件直接重装系统是最好的。如果不方便重装,按以下步骤清理。

1. 备份 Typecho 数据

在旧宝塔面板或命令行里备份两样东西:

  • 网站文件:主要是 usr/ 目录(里面包含了主题 themes、插件 plugins 和上传的媒体资源 uploads)。
  • 数据库:导出的 .sql 文件。

2. 卸载宝塔

终端运行宝塔官方卸载脚本:

wget http://download.bt.cn/install/bt-uninstall.sh
sh bt-uninstall.sh

选择 1 清除宝塔面板及运行环境。


三、 安装 1Panel

执行 1Panel 官方一键安装脚本:

bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"

按提示设置服务端口、安全入口和初始账号密码,安装完成后在浏览器登录 1Panel。


四、 用 Docker Compose 部署 Typecho

Typecho 需要 PHP-FPM + Nginx(或自带 Nginx 的 PHP 镜像)加 MySQL/SQLite 环境。这里采用经典的 Typecho (PHP-FPM+Nginx) + MySQL 8.0 方案。

1. 创建配置文件

在服务器上新建一个目录(如 /opt/typecho),并创建 docker-compose.yml

version: '3.8'

services:
  typecho-db:
    image: mysql:8.0
    container_name: typecho-db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: YourStrongRootPassword
      MYSQL_DATABASE: typecho_db
      MYSQL_USER: typecho_user
      MYSQL_PASSWORD: YourStrongUserPassword
    volumes:
      - ./db_data:/var/lib/mysql
    networks:
      - typecho-net

  typecho-app:
    image: joyqi/typecho:nightly-php8.1-fpm
    container_name: typecho-app
    restart: always
    ports:
      - "127.0.0.1:8080:80"
    volumes:
      - ./typecho_data:/var/www/html
    environment:
      - TYPECHO_DB_HOST=typecho-db
      - TYPECHO_DB_USER=typecho_user
      - TYPECHO_DB_PASSWORD=YourStrongUserPassword
      - TYPECHO_DB_DATABASE=typecho_db
    depends_on:
      - typecho-db
    networks:
      - typecho-net

networks:
  typecho-net:
    driver: bridge

在 1Panel 的 “容器” -> “编排” 中导入这个配置并点击 “启动”


五、 数据还原与权限处理

1. 还原数据库

把备份的 .sql 文件传到服务器,通过命令行导入到 MySQL 容器:

docker exec -i typecho-db mysql -utypecho_user -pYourStrongUserPassword typecho_db < backup.sql

2. 还原 Typecho 文件

把旧博客的 usr/ 目录(包含主题、插件、上传的文件)直接覆盖到挂载目录 ./typecho_data/usr/ 中。

针对 PHP 容器中的文件权限问题,修复一下所有权(Typecho 镜像内部通常是 www-data 用户,UID 一般为 33):

chown -R 33:33 ./typecho_data

3. 修改 config.inc.php

如果数据库连接地址有变,检查 ./typecho_data/config.inc.php 中的数据库配置:

  • 数据库主机(Host)改为:typecho-db
  • 数据库名、用户名、密码与 docker-compose.yml保持一致。

六、 在 1Panel 配置反向代理与 HTTPS

容器跑在本地的 8080 端口,通过 1Panel 自带的 OpenResty 做前端接入。

  1. 申请 SSL 证书
    在 1Panel “证书” 菜单中添加 ACME 账户,为你自己的博客域名申请 Let's Encrypt 免费证书。
  2. 新建反向代理站点

    • 进入 “网站” -> “创建网站”,类型选择 反向代理
    • 主域名:填你的 Typecho 博客域名。
    • 代理地址http://127.0.0.1:8080
    • 开启 HTTPS:选择刚才申请好的证书,勾选 “HTTP 自动跳转 HTTPS”

七、 体验反馈

改用 1Panel + Docker 部署 Typecho 之后,最直观的感受有三点:

  1. 网站备份变得贼简单:Typecho 本身就很轻量,现在整个博客的数据都在 /opt/typecho 这个目录里。以后迁移服务器,直接拉走这个文件夹,在新机器上运行 docker compose up -d 就搞定了。
  2. 不用折腾 PHP 拓展:以前宝塔装 PHP 经常要单独勾选各种拓展(mbstring, pdo_mysql 等),现在直接用打好环境的 Typecho 官方/社区镜像,省心很多。
  3. 面板干净响应快:1Panel 的内存占用极低,整个服务器显得干爽多了。
最后修改:2026 年 07 月 23 日
如果觉得我的文章对你有用,请随意赞赏