1Panel 一键部署 Typecho + 反向代理挂域名(新手版)

环境:1Panel v2(应用商店 Docker 版 Typecho)+ OpenResty + MySQL 8
文中域名统一写 blog.example.com,替换成你自己的。
适用人群:不想碰 PHP 环境、不想上传源码,能把站点跑起来就行。

先看全貌(30 秒)

1
2
3
① 装 Typecho(应用商店)  →  ② 建站挂域名 + HTTPS
↓
④ 收尾核对(2 处地址) ← ③ 跑安装向导

只有 4 步。跟"上传源码 + 配 PHP 运行环境"那条路比,这条少了 PHP 环境、少了文件权限、少了 nginx 伪静态——因为官方镜像里 Apache 全给你配好了。

唯一的坑在"地址"上:容器不知道你外面挂的是域名,会以为自己还叫 localhost,结果 CSS/JS 全 404,页面变成没样式的白板。第 ② 步和第 ④ 步都是围绕这件事。


开始前

项目要求
域名已 A 记录解析到服务器 IP;境内服务器需已备案
OpenResty应用商店里装好(1Panel 建站依赖它)
端口给 Typecho 留一个没被占用的,本文用 8089

① 装 Typecho

1Panel → 应用商店 → 搜 Typecho → 安装

安装界面能填的东西不多,重点看这几项(字段名各版本略有差异,认含义就行):

字段填什么为什么
名称typecho后面容器名会带这个
版本1.2.x / 1.3.x 的 php8-apache 镜像别选 php7 老版本
端口8089(自定义,别用 80/443)宿主机映射端口,反向代理就指它
外部访问地址https://blog.example.com⚠️ 千万别留 localhost,这个值会写进站点地址,填错就是白板页面
数据库选已有的 MySQL;没有就去装一个Typecho 不自带数据库

如果安装界面没有"数据库"这项,说明镜像内置了 SQLite,能跑但备份/迁移麻烦,建议还是接 MySQL:

  • 1Panel → 数据库 → 创建数据库:库名 typecho、用户 typecho、密码点「随机」复制下来、字符集 utf8mb4(漏了这步,中文和 emoji 会变问号)
安装时不要勾"端口外部访问"。Typecho 只需要被本机 OpenResty 访问,走回环即可。真要对公网开放那一下(比如排查问题),记得查完就关。

装完在 应用商店 → 已安装 里能看到 Typecho 卡片,状态「已启动」就对了。


② 建站挂域名 + 开 HTTPS

1Panel → 网站 → 创建网站,这里有两条路,效果一样:

路线 A:一键部署(推荐,少填两栏)

建站弹窗选「一键部署」→ 勾选刚才装的 typecho → 域名填 blog.example.com → 确认。
面板会自动把代理地址配好,不用你填端口。

路线 B:反向代理(一键部署里找不到 Typecho 时用)

建站弹窗选「反向代理」:

字段值
域名blog.example.com
代理地址http://127.0.0.1:8089(就是 ① 里填的端口)
写 127.0.0.1 而不是服务器公网 IP:走回环不经过网卡和防火墙,也少暴露一个入口。

建完立刻开 HTTPS

网站 → 你的站点 → HTTPS → 打开开关 → 选证书(没有就点 Let's Encrypt 申请)→ 打开强制 HTTPS。

顺序有讲究:先挂域名和 HTTPS,再跑安装向导。因为 Typecho 会把"你访问它时用的地址"写进数据库当站点地址——你从 https://域名 进去装,它记的就是对的;装完再改,得动好几个地方。

反向代理的请求头(默认就有,确认一下)

进 网站 → 你的站点 → 配置文件,代理那一段应该有这几行:

1
2
3
4
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;

Host 和 X-Forwarded-Proto 是最关键的两个——少了它们,Typecho 生成出来的链接会变成 http://localhost/...,后台保存设置后还会自己跳丢。

改完配置记得两步都跑(只跑 -t 不生效,这是最常见的"明明改了没变化"):

1
2
docker exec 1Panel-openresty-xxxx openresty -t
docker exec 1Panel-openresty-xxxx openresty -s reload

容器名在 容器 列表里看,形如 1Panel-openresty-cGcF。


③ 跑安装向导

浏览器打开 https://blog.example.com,会自动跳到安装页。

数据库那一步最容易卡,照这样填:

字段填什么
数据库地址MySQL 的容器名,如 1Panel-mysql-8x7f;忘了去 1Panel 数据库详情页看「连接信息」
端口3306
用户名 / 密码 / 库名① 里建的 typecho / 你复制的密码 / typecho
为什么填容器名?Typecho 和 MySQL 都在 1panel-network 这个 Docker 网络里,容器之间直接用名字互找。填 localhost 指的是 Typecho 容器自己,那儿没有数据库。
填容器名还连不上,就退一步填宿主机内网 IP(不是公网 IP)。

往下设置管理员:

  • 用户名别用 admin——爆破脚本第一个猜的就是它
  • 密码 12 位以上,字母 + 数字 + 符号

看到「安装成功」,进下一步收尾。


④ 收尾核对(2 分钟,重点看两个地址)

4.1 后台站点地址

后台 → 设置 → 基本设置 → 站点地址,必须是:

1
https://blog.example.com

如果是 http://localhost 或 http://IP:8089,立刻改。这个值决定了前台所有链接、CSS、图片地址怎么拼——这一项错,全站就是白板。

4.2 容器参数里的外部访问地址

1Panel → 应用商店 → 已安装 → Typecho → 参数,检查"外部访问地址"这类字段是不是 https://blog.example.com。

改完点确认,容器会自动重启,等 10 秒再刷页面。

4.3 顺手的几件小事

  • [ ] 删安装文件:文件在容器目录里,进 容器 → 编排 → typecho → 目录,把 install.php 删掉(或改名为 .bak)。留着等于挂了个「随时重装覆盖你数据」的入口。
  • [ ] 改管理员名:后台 → 用户,把账号名换掉。
  • [ ] 确认后台能进:https://blog.example.com/admin/,能进就说明整条链路通了。

关于伪静态:这条路线不用配

这是源码路线和 Docker 路线最大的差别,很多人在这里白折腾:

Docker 版 Typecho 跑的是 Apache,自带的 .htaccess 已经处理了地址重写。所以你不需要去 1Panel 的「伪静态」里选 typecho 模板——nginx 只是把请求原样转给容器,重写是在容器里完成的。

你只需要:后台 → 设置 → 永久链接 → 勾上「地址重写」→ 保存。

链接会从 /index.php/archives/1/ 变成 /archives/1/。

如果勾了之后文章全 404:把「地址重写」先取消保存、再勾上保存一次,Typecho 会重新刷写重写规则。这招在迁移服务器后特别好使。

附录 A:主题和插件放哪

Docker 版不能直接往网站根目录拖文件了,走这条路:

容器 → 编排 → typecho → 目录 → 进 data/usr/:

目录放什么
usr/themes/主题(解压后的文件夹直接扔进来)
usr/plugins/插件
usr/uploads/你上传的图片

放完回后台 → 控制台 / 外观,就能看到新主题和插件了。


附录 B:安全两条

  1. 别让 IP:8089 能从公网打开
    这个入口完全绕过 nginx、HTTPS 和所有鉴权规则。先确认反代走的是回环:

    1
    grep -rn "proxy_pass" /opt/1panel/www/sites/blog.example.com/proxy/

    看到 127.0.0.1:8089 就放心去云厂商安全组删掉 8089 入方向规则——安全组只管外网进来的流量,本机回环不走它,站点照样能开。

  2. 后台套一层统一登录
    如果已经上了 Authelia 之类的鉴权,要把 /admin 和 /action/login 也纳进去。只保护首页等于留后门:别人直接敲后台地址照样能对着密码框试。

附录 C:备份(数据丢一次就懂)

数据在两个地方,只备一个等于没备:

内容位置
文章、评论、设置、主题配置MySQL 数据库 typecho
主题文件、插件、上传的图片容器目录下的 data/usr/

1Panel → 计划任务,建两条:备份数据库(每天,留 7 份)、备份 Typecho 应用目录(每周,留 4 份)。


附录 D:报错对照表

现象原因处理
页面能开但没有样式,白底黑字站点地址是 localhost按 ④ 的两处地址都改成域名
样式正常但点文章 404后台没勾「地址重写」勾上保存;还不行就取消再勾一次
安装页连不上数据库地址填了 localhost填 MySQL 容器名或宿主机内网 IP
报 caching_sha2_passwordMySQL 8 认证插件较新1Panel 数据库里把该用户认证方式改为 mysql_native_password
502 Bad Gateway端口填错,或容器没起来核对 ① 的端口与反代里的端口;看容器状态
后台点保存后跳到 localhost反代缺 Host / X-Forwarded-Proto补请求头,-t + -s reload
上传图片失败usr/uploads 不可写容器目录里给该目录放宽权限,或检查属主
上传主题提示文件过大PHP 上传上限太小应用 → 参数里调 upload_max_filesize、post_max_size 到 32M,重建容器
中文、emoji 变问号建库时字符集不是 utf8mb4只能导出重导,建库时别手快

附录 E:什么时候该换源码路线

一键部署适合"写好文章就完事"。如果你后面想:

  • 频繁改主题源码、调试 PHP
  • 装需要改系统文件的插件
  • 用 Nginx 侧做缓存/防盗链/CDN 回源细节调整

那源码 + PHP 运行环境那条路更顺手。但先把这条跑通——知道域名、反代、站点地址三者怎么对应,再换路线就不会抓瞎。