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

  1. 只允许特定的 sni 或者 host 访问特定的服务,其他未知 sni 或者 host 直接返回404.
  2. 只允许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]

验证与自查

  1. docker compose ps 中 php 容器状态为 running
  2. nginx -t 通过,浏览器访问 http://yourdomain.com 能进入安装向导并完成 SQLite 安装
  3. 使用新后台路径能登录,旧路径 admin 返回 404
  4. 非 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 数据库和上传内容)

参考