创建 nginx
站点配置文件
网站目录结构
.├── docker-compose.yml├── data # 网站源代码├── php│ └── Dockerfile # 构建PHP配置文件├── nginx # 用于存储nginx相关文件│ ├── logs # 日志文件│ └── conf # 配置文件│ └── default.conf└── mysql # 用于存储mysql相关文件 ├── data # 数据文件 ├── logs # 日志文件 └── conf # 配置文件
需要配置文件详细说明
-
PHP 容器配置文件
文件路径:
./php/Dockerfile
构建 PHP 容器,安装 PDO_MySQL 扩展并配置 PHP.ini:
FROM php:fpm# 更新包列表并安装 pdo_mysql 扩展RUN apt-get update && \apt-get install -y libpq-dev && \docker-php-ext-install pdo_mysql && \rm -rf /var/lib/apt/lists/*# 设置 PHP 配置RUN { \echo "output_buffering = 4096"; \echo "date.timezone = PRC"; \} > /usr/local/etc/php/conf.d/custom.ini -
Nginx 服务器配置
文件路径:
./nginx/conf/default.conf
Nginx 服务器配置文件,包括服务器监听、根目录设置、重写规则和 PHP 处理:
server {listen 80 default_server; # 监听 80 端口root /var/www/html; # 网站根目录index index.php index.html index.htm;access_log /var/log/nginx/typecho_access.log main; # 访问日志if (!-e $request_filename) {rewrite ^(.*)$ /index.php$1 last; # 重写 URL 到 index.php}location / {if (!-e $request_filename) {rewrite . /index.php last; # 如果文件不存在,重写到 index.php}}location ~ \.php(.*)$ {fastcgi_pass php:9000; # 转发 PHP 请求到 php-fpm 服务fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 设置脚本文件名参数include fastcgi_params; # 包含 fastcgi 参数}} -
Typecho 源代码部署
创建
./data
文件夹,并将 Typecho 源代码放入此文件夹。docker 容器不以 root 权限运行,无法访问文件,需要赋权
Terminal window chmod -R 777 data -
Docker Compose 配置
路径:
./docker-compose.yml
定义和启动多个服务的 Docker Compose 文件:
可自行更改
- nginx 中的端口,默认为
9757
- MySQL 中的 root 的密码 和 需要创建的数据库名称,默认都为
typecho
services: # 定义多个服务nginx: # 服务名称image: nginx # 使用的镜像ports: # 映射的端口- "9575:80" # 宿主机端口 9575 映射到容器端口 80restart: always # 容器重启策略volumes: # 映射文件- ./data:/var/www/html # 网站源代码- ./nginx/conf:/etc/nginx/conf.d # nginx 站点配置文件- ./nginx/logs:/var/log/nginx # nginx 日志文件depends_on: # 定义依赖关系- php # 依赖 php 服务networks: # 要加入的网络- typecho # 加入 typecho 网络php: # 服务名称build: ./php # 构建文件的目录restart: always # 容器重启策略volumes: # 映射文件- ./data:/var/www/html # 网站源代码depends_on: # 定义依赖关系- mysql # 依赖 mysql 服务networks: # 要加入的网络- typecho # 加入 typecho 网络mysql: # 服务名称image: mysql:5.7 # 指定 5.7 版本的 mysql 镜像restart: always # 容器重启策略volumes: # 要映射的文件- ./mysql/data:/var/lib/mysql # mysql 数据- ./mysql/logs:/var/log/mysql # mysql 日志- ./mysql/conf:/etc/mysql/conf.d # mysql 配置文件environment: # 环境变量MYSQL_ROOT_PASSWORD: typecho # MySQL root 用户的密码MYSQL_DATABASE: typecho # 创建的数据库名称networks: # 要加入的网络- typecho # 加入 typecho 网络networks: # 定义的内部网络typecho: # 网络名称 - nginx 中的端口,默认为
安装
启动
docker compose up -d
配置
如果修改过docker-compose.yml
-
数据库地址:
mysql
因为docker内部网络可以用过容器名访问 -
数据库用户名:
root
-
数据库密码:
typecho
-
数据库名:
typecho
-
启用数据库 SSL 服务端证书验证: 关闭
-
其他默认或随意
问题
恢复直接用 nginx+MySQL 搭建的网站
-
将原来的文件放入 data
-
进入 mysql 容器,导入数据库文件
-
在
docker-compose.yml
的环境变量中加入MYSQL_USER=typecho # 原有 MySQL 用户名MYSQL_PASSWORD=typecho # 原有 MySQL 用户密码 -
进入 mysql 容器,将数据库赋权给原用户
排版错误
config.inc.php
末尾加入
define('__TYPECHO_SECURE__',true);