Typecho 部署(Docker 部署 PHP 8.2)
本文适用于在 Debian/Ubuntu 服务器上用 Docker 部署 Typecho 的场景。你会学到:PHP 8.2 FPM 容器编排与端口映射、Nginx 虚拟主机与 Cloudflare IP 白名单配置、SQLite 安装向导,以及修改默认后台登录路径。
环境信息
- 操作系统:Debian / Ubuntu
- Web服务器:Nginx
- PHP版本:8.2 docker
- 数据库:SQLite(无需安装)
安装 php8.2
mkdir -p /opt/docker/php
cd /opt/docker/php
vim docker-compose.yml
services:
# PHP-FPM 服务
php:
image: lih66511/php-8.2-fpm-typecho:1.0 # 替换为你的镜像名
container_name: php-8.2-fpm
restart: unless-stopped
volumes:
# 挂载Typecho代码目录
- ./php/php.ini:/usr/local/etc/php/conf.d/custom.ini # 自定义PHP配置
- ./www.conf:/usr/local/etc/php-fpm.d/www.conf
- /var/www/html/typecho:/var/www/html/typecho
environment:
- TZ=Asia/Shanghai # 设置时区
ports:
- "127.0.0.1:5050:9000"
vim /opr/docker/php/www.conf
[www]
; 定义运行 PHP-FPM 的用户和组(通常为 www-data 或 nobody)
user = www-data
group = www-data
; 监听端口(确保和 docker-compose.yaml 的端口映射一致)
listen = 9090
; 其他必要配置(如进程管理)
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
启动容器:
docker compose up -d
下载并解压 Typecho
cd /var/www/html
sudo wget https://github.com/typecho/typecho/releases/latest/download/typecho.zip
sudo unzip typecho.zip -d typecho
sudo chown -R www-data:www-data /var/www/html/typecho
sudo chmod -R 755 /var/www/html/typecho
配置 Nginx
- 只允许特定的
sni或者host访问特定的服务,其他未知sni或者host直接返回404. - 只允许
cloudflare的 ip 访问80端口
默认虚拟主机
vim /etc/nginx/conf.d/default.conf
# 默认 server,匹配所有未定义的 Host
server {
listen 80 default_server;
server_name _; # 匹配任意 Host
include /etc/nginx/conf.d/cf-ip;
deny all;
return 404;
}
Typecho 虚拟主机
vim /etc/nginx/conf.d/typecho.conf
server {
listen 80;
server_name yourservername;
root /var/www/html/typecho;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:5050;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Cloudflare IP 白名单
vim /etc/nginx/conf.d/cf-ip
# 允许 Cloudflare 的 IP 地址访问
# 定义允许的 IPv4 地址范围
allow 173.245.48.0/20;
allow 103.21.244.0/22;
allow 103.22.200.0/22;
allow 103.31.4.0/22;
allow 141.101.64.0/18;
allow 108.162.192.0/18;
allow 190.93.240.0/20;
allow 188.114.96.0/20;
allow 197.234.240.0/22;
allow 198.41.128.0/17;
allow 162.158.0.0/15;
allow 104.16.0.0/13;
allow 104.24.0.0/14;
allow 172.64.0.0/13;
allow 131.0.72.0/22;
# 定义允许的 IPv6 地址范围
allow 2400:cb00::/32;
allow 2606:4700::/32;
allow 2803:f800::/32;
allow 2405:b500::/32;
allow 2405:8100::/32;
allow 2a06:98c0::/29;
allow 2c0f:f248::/32;
Cloudflare 的 IP 段会更新,建议定期从 Cloudflare 官方 IP 列表 核对。
启动 Typecho 安装向导(使用 SQLite)
浏览器访问:
http://yourdomain.com
选择数据库类型为 SQLite,默认数据库路径:
/var/www/typecho/usr/database.db
如果需要可手动创建空数据库文件并设置权限:
sudo touch /var/www/html/typecho/usr/database.db
sudo chown www-data:www-data /var/www/html/typecho/usr/database.db
更改默认后台登录路径
更改 define('__TYPECHO_ADMIN_DIR__', '/Changed Path/');
vim /var/www/html/typecho/config.inc.php
<?php
// admin directory (relative path)
define('__TYPECHO_ADMIN_DIR__', '/YOUR Changed Path/');
mv admin [OUR Changed Path]
验证与自查
docker compose ps中 php 容器状态为runningnginx -t通过,浏览器访问http://yourdomain.com能进入安装向导并完成 SQLite 安装- 使用新后台路径能登录,旧路径
admin返回 404 - 非 Cloudflare IP 直连 80 端口被拒绝,未知 Host 返回 404
常见问题处理
| 问题 | 解决方法 |
|---|---|
| 403 权限错误 | 检查 typecho 目录是否可写;chown -R www-data:www-data/var/www/html/typecho |
| PHP 页面不执行 | 确认 Nginx 的 fastcgi_pass 设置正确(127.0.0.1:5050) |
| 数据库写入失败 | 检查 typecho 目录是否可写;chown -R www-data:www-data/var/www/html/typecho |
后续建议(可选)
- 启用 HTTPS(推荐使用 Let’s Encrypt)
- 使用 CDN 或缓存插件提升性能
- 定期备份
usr/文件夹(包含 SQLite 数据库和上传内容)