Typecho Docker 部署指南(基于 PHP 8.2)

本文适用于在 Debian/Ubuntu 服务器上用 Docker 部署 Typecho 的场景。你会学到:PHP 8.2 FPM 容器编排、SQLite 零依赖数据库、Nginx 虚拟主机配置、Cloudflare IP 白名单加固,以及修改后台路径增强安全。

环境信息

  • 操作系统:Debian / Ubuntu
  • Web 服务器:Nginx
  • PHP 版本:8.2(Docker)
  • 数据库:SQLite(无需额外安装)

部署 PHP 8.2 容器

1. 创建工作目录

mkdir -p /opt/docker/php
cd /opt/docker/php

2. 编写 docker-compose.yml

vim docker-compose.yml
services:
  php:
    image: lih66511/php-8.2-fpm-typecho:1.0  # 替换为你的镜像名称
    container_name: php-8.2-fpm
    restart: unless-stopped
    volumes:
      - ./php/php.ini:/usr/local/etc/php/conf.d/custom.ini     # 自定义 PHP 配置
      - ./www.conf:/usr/local/etc/php-fpm.d/www.conf           # FPM 配置文件
      - /var/www/html/typecho:/var/www/html/typecho            # Typecho 代码目录
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "127.0.0.1:5050:9000"  # 将容器的 9000 端口映射到本地 5050 端口

3. 创建 www.conf(FPM 配置)

vim /opt/docker/php/www.conf
[www]
user = www-data
group = www-data
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

4. 启动容器

docker compose up -d

下载并部署 Typecho

cd /var/www/html
wget https://github.com/typecho/typecho/releases/latest/download/typecho.zip
unzip typecho.zip -d typecho
chown -R www-data:www-data /var/www/html/typecho
chmod -R 755 /var/www/html/typecho

配置 Nginx

1. 设置默认虚拟主机(拦截未授权访问)

vim /etc/nginx/conf.d/default.conf
server {
    listen 80 default_server;
    server_name _;
    include /etc/nginx/conf.d/cf-ip;
    deny all;
    return 404;
}

2. 配置 Typecho 虚拟主机

vim /etc/nginx/conf.d/typecho.conf
server {
    listen 80;
    server_name yourservername;  # 替换为你的域名

    root /var/www/html/typecho;
    index index.php index.html index.htm;

    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;
    }
}

3. 允许 Cloudflare IP

vim /etc/nginx/conf.d/cf-ip
# Cloudflare 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;

# Cloudflare 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

如需手动创建数据库文件及权限:

touch /var/www/html/typecho/usr/database.db
chown www-data:www-data /var/www/html/typecho/usr/database.db

修改后台路径(增强安全)

打开配置文件:

vim /var/www/html/typecho/config.inc.php

添加或修改如下内容:

<?php
define('__TYPECHO_ADMIN_DIR__', '/your-new-admin-path/');

重命名后台目录:

mv /var/www/html/typecho/admin /var/www/html/typecho/your-new-admin-path

验证与自查

  1. docker compose ps 中 php 容器状态为 running
  2. nginx -t 配置检查通过,nginx -s reload 生效
  3. 浏览器访问 http://yourdomain.com 能进入 Typecho 安装向导并完成 SQLite 安装
  4. 使用新后台路径能登录,旧路径 admin 返回 404

常见问题排查

问题解决方法
403 权限错误确保 Typecho 目录权限正确:chown -R www-data:www-data /var/www/html/typecho
PHP 页面不解析检查 Nginx 中 fastcgi_pass 设置是否为 127.0.0.1:5050
数据库无法写入检查 usr/database.db 文件权限是否正确

参考