前言
事情起源于在B站发布技术专栏不是很方便,就想着能自己搭建一个博客,方便记录一些自己的文章。
在明确了目标之后,就在网上找了一些方案,最后确定使用Typecho的方案搭建自己的博客,GitHubPage作为备份的网站。
这么选择主要是因为我喜欢使用obsdian做笔记,而Typecho和GitHubPage都可以直接用MD语法写博客,转换成本不高。并且Typecho的系统占用也不高,可以使用本地数据库SQLite,很符合我对自己博客的定义:轻量。基于Java的Halo本身对资源消耗太大,毕竟Java开发的,还要加上一个mysql数据库,刚运行就需要800M的内存。基于PHP的WordPass又太臃肿了,而且不能使用SQLite这种本地数据库。最后选择下来发现了Typecho这个博客软件。
安装docker及docker-compose
这个安装过程请参考docker官方教程
- **docker安装教程:Install | Docker Docs
- docker compose安装教程:Docker Compose | Docker Docs
安装Typecho
创建typecho数据目录
登录服务器并执行以下命令
mkdir typecho && cd typecho && mkdir data && chmod -R 777 data
创建docker-compose.yaml文件
执行命令nano docker-compose.yaml 将以下文件内容复制到命令窗口
version: '3.7'
services:
typecho:
image: joyqi/typecho:nightly-php8.2-apache
container_name: typecho-server
restart: always
environment:
- TYPECHO_SITE_URL=https://your-domain.com # 网站网址
- TIMEZONE=Asia/Shanghai # 时区
- TYPECHO_DB_ADAPTER=SQLite # 选择SQLite数据
- TYPECHO_DB_DATABASE=/app/data # SQLite的数据目录
- TYPECHO_USER_NAME=admin # 管理员用户名
- TYPECHO_USER_PASSWORD=admmin123456 # 管理员密码
- [email protected] # 管理员邮箱
ports:
- 30081:80 # typecho的对外访问目录
volumes:
- ./typecho:/app/usr # 你的 Typecho 数据目录
- ./data:/app/data # SQLite的数据目录
⚠️注意⚠️:把上面复制的内容修改为你自己的内容
修改完成后按Ctrl+X按键,在提示框输入Y,之后在敲回车保存文件。



docker-compose如何配置环境变量请参考如下表格
| 环境变量 | 默认值 | 描述 |
|---|---|---|
| TIMEZONE | UTC | 服务器时区,例如:Asia/Shanghai |
| MEMORY_LIMIT | 无 | PHP 内存限制,例如:100M |
| MAX_POST_BODY | 无 | 最大 POST 请求体大小,例如:50M |
| TYPECHO_INSTALL | 0 | 设置为 1 时自动运行安装脚本 |
| TYPECHO_DB_ADAPTER | Pdo_Mysql | Typecho 数据库驱动,可选值:Pdo_Mysql, Pdo_SQLite, Pdo_Pgsql, Mysqli, SQLite, Pgsql |
| TYPECHO_DB_HOST | localhost | 数据库服务器地址,仅适用于 MySQL 和 PostgreSQL 驱动 |
| TYPECHO_DB_PORT | 3306(MySQL)或 5432(PostgreSQL) | 数据库服务器端口,仅适用于 MySQL 和 PostgreSQL 驱动 |
| TYPECHO_DB_USER | 无 | 数据库用户名,仅适用于 MySQL 和 PostgreSQL 驱动 |
| TYPECHO_DB_PASSWORD | 无 | 数据库密码,仅适用于 MySQL 和 PostgreSQL 驱动 |
| TYPECHO_DB_FILE | 无 | SQLite 数据库文件存储路径,仅适用于 SQLite 驱动 |
| TYPECHO_DB_DATABASE | 无 | 数据库名称,仅适用于 MySQL 和 PostgreSQL 驱动 |
| TYPECHO_DB_PREFIX | typecho_ | 所有表的前缀 |
| TYPECHO_DB_ENGINE | InnoDB | MySQL 数据库引擎,仅适用于 MySQL 驱动 |
| TYPECHO_DB_CHARSET | utf8(PostgreSQL)或 utf8mb4(MySQL) | 数据库字符集,仅适用于 MySQL 和 PostgreSQL 驱动 |
| TYPECHO_DB_NEXT | none | 当数据库中已有应用表时执行的操作: none:什么都不做,直接退出 keep:保留这些表,跳过初始化步骤 force:删除这些表,重新初始化数据 |
| TYPECHO_SITE_URL | 无 | 网站 URL,例如:https://your-domain.com |
| TYPECHO_USER_NAME | typecho | 创建的管理员用户名 |
| TYPECHO_USER_PASSWORD | 随机 8 位字符串 | 创建的管理员密码 |
| TYPECHO_USER_MAIL | [email protected] | 创建的管理员邮箱地址 |
部署
在命令行执行以下命令:
docker compose up -d
如果使用的是普通用户请记得在前面加上sudo:
sudo docker compose up -d

如果要停止应用的运行,先在命令行cd到安装目录,然后执行以下命令:
docker compose down
配置Typecho
开放访问
有两种方式开放访问,一种是通过端口访问,一种是通过服务器的反向代理
注意反向代理的方式设需要使用你设置的网站网址访问
通过端口访问
- 如果安装了宝塔等管理面板需要先在面板中开放端口,这里打开
30081端口 - 在服务器提供商的控制面板中打开对应的端口,这里打开
30081端口 - 如果系统自带了防火墙,请在系统防火墙放行访问端口

通过反代反问
👉通过宝塔等面板设置反代
在面板的网站设置里面设置反向代理到 localhost:30081
👉通过NPM设置反代

🔺点击主界面的“代理服务”。

🔺添加代理服务。

🔺然后在这里:
- 域名:域名就是我们反代使用的域名,需要说明的是,这个域名首先在运营商那里做好DNS解析(比喻腾讯云或者阿里云,解析包括普通解析与泛解析),然后把域名在我们服务器上做好DNS解析。
- 协议:默认
http即可。 - 转发主机/IP:这个直接填入本地地址即可。
- 转发端口:服务端的内网端口,可以是某个Docker容器的端口,看你自己的需求了。
👉通过Caddy反代
1⃣编辑caddy配置文件
➡️执行命令nano /etc/caddy/Caddyfile
➡️添加反代内容
your-domain.com {
reverse_proxy localhost:30081
}
⚠注意:your-domain.com是你的网站地址

2⃣保存并启用反代
- 按
Ctrl+X➡️ 选择Y➡️ 回车保存 - 执行
systemctl reload caddy重新加载配置,使反代生效。参考:保持Caddy运行 — Caddy v2中文文档
配置网站




结语
至此typecho安装就完毕了,使用的过程我就不赘述了,大家可以在网上去找自己喜欢的主题,也可以用默认的。
安装的过程中要注意,使用sqlite数据的时候,存放数据文件的文件夹需要有777权限,我这里在创建目录的时候就给予了权限。