从宝塔迁移到 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.sql2. 还原 Typecho 文件
把旧博客的 usr/ 目录(包含主题、插件、上传的文件)直接覆盖到挂载目录 ./typecho_data/usr/ 中。
针对 PHP 容器中的文件权限问题,修复一下所有权(Typecho 镜像内部通常是 www-data 用户,UID 一般为 33):
chown -R 33:33 ./typecho_data3. 修改 config.inc.php
如果数据库连接地址有变,检查 ./typecho_data/config.inc.php 中的数据库配置:
- 数据库主机(Host)改为:
typecho-db - 数据库名、用户名、密码与
docker-compose.yml保持一致。
六、 在 1Panel 配置反向代理与 HTTPS
容器跑在本地的 8080 端口,通过 1Panel 自带的 OpenResty 做前端接入。
- 申请 SSL 证书:
在 1Panel “证书” 菜单中添加 ACME 账户,为你自己的博客域名申请 Let's Encrypt 免费证书。 新建反向代理站点:
- 进入 “网站” -> “创建网站”,类型选择 反向代理。
- 主域名:填你的 Typecho 博客域名。
- 代理地址:
http://127.0.0.1:8080。 - 开启 HTTPS:选择刚才申请好的证书,勾选 “HTTP 自动跳转 HTTPS”。
七、 体验反馈
改用 1Panel + Docker 部署 Typecho 之后,最直观的感受有三点:
- 网站备份变得贼简单:Typecho 本身就很轻量,现在整个博客的数据都在
/opt/typecho这个目录里。以后迁移服务器,直接拉走这个文件夹,在新机器上运行docker compose up -d就搞定了。 - 不用折腾 PHP 拓展:以前宝塔装 PHP 经常要单独勾选各种拓展(mbstring, pdo_mysql 等),现在直接用打好环境的 Typecho 官方/社区镜像,省心很多。
- 面板干净响应快:1Panel 的内存占用极低,整个服务器显得干爽多了。
