1.文件结构

├── opt
│   ├── web
│   │   ├── caddy
│       │   ├──
│       │   ├──
│       │   └── Caddyfile
│       │ 
│       ├── php
│       │   ├──
│       │   └── Dockerfile
│       │      
│       │   
│       ├── mysql
│       │     ├──
│       │     ├──
│       │     ├──
│       │     └── mysql.env
│       │ 
│       │ 
│       └── docker-compose.yml

2.Caddy

新建Caddyfile文件,粘贴如下内容

www.xxxxx.com {  
    # 网站根目录  
    root * /var/www/html/typecho  
  
    # 提供静态文件服务  
    file_server  
  
    # 代理 PHP 到 PHP-FPM  
    php_fastcgi localhost:9000  
  
    # 启用日志记录  
    log {  
        output file /var/log/caddy/www_xxxxx_com.log  
        format json  
    }  
  
    # 启用 Gzip 压缩  
    encode gzip  
  
    # 添加 HTTP 安全头部  
    header {  
        Strict-Transport-Security "max-age=31536000; includeSubDomains"  
    }  
}

3.PHP

新建Dockerfile文件,粘贴如下内容

FROM php:8.0.30-fpm  
RUN apt-get update \  
    && docker-php-ext-install pdo_mysql \  
    && echo "output_buffering = 4096" > /usr/local/etc/php/conf.d/php.ini \  
    && echo "date.timezone = PRC" >> /usr/local/etc/php/conf.d/php.ini
如果使用 MySQL 作为 Typecho 的数据库,则需安装pdo_mysql扩展,并设置 buffer 为 4kb,即一个内存页,同时设置了时区为RPC(中国)

4.Mysql

新建mysql.env文件,粘贴如下内容

MYSQL_ROOT_PASSWORD=rootpassword
MYSQL_DATABASE=www_xxxxx_com 
MYSQL_USER=user  
MYSQL_PASSWORD=password

5.Docker compose

新建docker-compose.yml文件,粘贴如下内容

services:  
  caddy:  
    container_name: caddy
    image: caddy  
    expose:  
      - "80"    # 声明容器的端口 
      - "443"    # 声明容器的端口 
    ports:  
      - "80:80"   # 端口映射  
      - "443:443"   # 端口映射  
    restart: unless-stopped  
    environment:  
      - TZ=Asia/Shanghai  
    volumes:  
      - /opt/web/php:/var/www/html  
      - /opt/web/caddy/caddy_data:/data  
      - /opt/web/caddy/log:/var/log/caddy  
      - /opt/web/caddy/Caddyfile:/etc/caddy/Caddyfile  
    depends_on:  
      - php  
    network_mode: "host"      
      
  php:  
    container_name: php-8.0.53  
    build: php            # Dockerfile文件位置  
    restart: unless-stopped  
    expose:  
      - "9000"    # 声明容器的端口  
    ports:  
      - "9000:9000"   # 端口映射  
    volumes:  
      - /opt/web/php:/var/www/html  
    environment:  
      - TZ=Asia/Shanghai  
    depends_on:  
      - mysql  
    network_mode: "host"  
  
  mysql:  
    container_name: mysql  
    image: mysql:5.7  
    restart: unless-stopped  
    environment:  
      - TZ=Asia/Shanghai  
    expose:  
      - "3306"    # 声明容器的端口  
    ports:  
      - "3306:3306"   # 端口映射  
    volumes:  
      - /opt/web/mysql/data:/var/lib/mysql  
      - /opt/web/mysql/logs:/var/log/mysql  
      - /opt/web/mysql/conf:/etc/mysql/conf.d  
    env_file:  
      - /opt/web/mysql/mysql.env  
    network_mode: "host"  
最后修改:2025 年 04 月 07 日 09 : 52 PM
我秦始皇,打钱,快点!