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"