1. 安装docker(略过)
  2. 创建typecho文件夹

  1. 配置php

在typecho目录下新建php目录
mkdir php
在php目录创建Dockerfile
nano Dockerfile
输入

FROM php:7.3.29-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

在官方7.3.29镜像的基础上,添加了 PDO_MYSQL(如果使用 MySQL 作为 Typecho 的数据库,则需安装此扩展),并设置 buffer 为 4kb,即一个内存页。同时设置了时区为RPC


  1. 配置nginx

在typecho目录下新建nginx目录
mkdir nginx
在nginx目录下创建配置文件
nano default.conf
输入

server {
    listen 80 default_server;
    root /var/www/html;
    index index.php;

    access_log /var/log/nginx/typecho_access.log main;
    if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php$1 last;
    }
    location / {
        index index.html index.htm index.php;

        if (!-e $request_filename) {
            rewrite . /index.php last;
        }
    }

    location ~ \.php(.*)$ {
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
        fastcgi_param  PATH_INFO  $fastcgi_path_info;
        fastcgi_param  SCRIPT_NAME $fastcgi_script_name;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

默认监听端口不可修改,php端口默认9000,不指定域名,待会儿直接npm反代。


  1. 下载typecho源码
cd /root/data/docker/typecho/typecho

wget https://github.com/typecho/typecho/releases/download/v1.2.0/typecho.zip

apt install zip -y 

unzip typecho.zip

  1. 创建docker-compose文件
cd /root/data/docker_data/typecho

nano docker-compose.yml

输入内容如下

version: "3"

services:
  nginx:              #第一个nginx
    image: nginx
    ports:
      - "11090:80"    # 左边可以改成任意没使用的端口
    restart: always
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./typecho:/var/www/html        #在docker-compose目录下的typecho文件夹为网站目录
      - ./nginx:/etc/nginx/conf.d      #nginx配置文件目录
      - ./logs:/var/log/nginx          #nginx日志存放目录
    depends_on:                        #随后启动php
      - php                            
    networks:                          #配置容器连接的网络
      - web

  php:                                 #第一个php
    build: php
    restart: always
    expose:
      - "9000"                         #不暴露公网,故没有写9000:9000
    volumes:
      - ./typecho:/var/www/html        #在docker-compose目录下的typecho文件夹为网站目录
    environment:
      - TZ=Asia/Shanghai
    depends_on:
      - nginx_wiki
    networks:
      - web


  nginx_wiki:                      #第二个nginx
    image: nginx
    ports:
      - "11092:80"                 # 左边可以改成任意没使用的端口
    restart: always
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./typecho_wiki:/var/www/html
      - ./nginx_wiki:/etc/nginx/conf.d
      - ./logs:/var/log/nginx
    depends_on:
      - php_wiki
    networks:
      - web

  php_wiki:
    build: php_wiki
    restart: always
    expose:
      - "9000"                      # 不暴露公网,故没有写9000:9000
    volumes:
      - ./typecho_wiki:/var/www/html
    environment:
      - TZ=Asia/Shanghai
    depends_on:
      - mysql
    networks:
      - web


  mysql:
    # 镜像名
    image: mysql:8.0.30
    # 容器名(以后的控制都通过这个)
    container_name: mysql
    # 重启策略
    restart: always
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      # root 密码
      MYSQL_ROOT_PASSWORD: 123456
      # 初始化数据库(后续的初始化sql会在这个库执行)
      MYSQL_DATABASE: cccc
      # 初始化用户(不能是root 会报错, 后续需要给新用户赋予权限)
      MYSQL_USER: cccc
      # 用户密码
      MYSQL_PASSWORD: 123456
      # 映射端口
    ports:
      - 11091:3306
    volumes:
      # 数据挂载
      - ./mysql/data/:/var/lib/mysql/
      # 配置挂载
      - ./mysql/conf/:/etc/mysql/conf.d/
      # 初始化目录挂载
      - ./mysql/init/:/docker-entrypoint-initdb.d/
    command:
      # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    networks:
      - web



networks:
  web:

  1. npm反代,直接输入域名起飞