2023年2月26,本文配置镜像相对过时,Typecho已经更新至1.2版本,想用最新版本,可参考【利用docker-compose轻松实现Docker搭建Typecho博客】

一、文件目录:

Traefik2 配置文件一律继承 前面的配置,docker-compose 文件目录如下:

Traefik2 快速搭建 Typecho 步骤

1.1 创建目录:

mkdir typecho1 : 创建 typecho1 目录为项目根目录,存放docker-compose.yml文件

mkdir tp-db-data
mkdir typecho

以上两文件夹可自行创建,也可由docker-compose自动创建

touch docker-compose.yml 创建 docker-compose 文件

1.2 Typecho 的docker-compose配置文件:

旧配置,带labels,已被弃用
version: '3.7'

services:
  db:
    image: mysql:5.7
    container_name: typecho-db-1
    volumes:
      - ./tp-db-data:/var/lib/mysql
    networks:
      - default
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: spuerrootpass
      MYSQL_DATABASE: typecho
      MYSQL_USER: typecho
      MYSQL_PASSWORD: typechodbpass

  typecho:
    depends_on:
      - db
    image: 80x86/typecho:latest
    container_name: typecho-blog-1
    environment:
      PHP_TZ: Asia/Shanghai
      PHP_MAX_EXECUTION_TIME: 600
    volumes:
      - ./typecho:/data
    networks:
      - proxy
      - default
    restart: always
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=proxy"
      - "traefik.http.routers.typecho-secure.entrypoints=websecure"
      - "traefik.http.routers.typecho-secure.rule=Host(`blog.yourdomain.com`)"
      - "traefik.http.routers.typecho-secure.service=typecho-service"
      - "traefik.http.services.typecho-service.loadbalancer.server.port=80"

volumes:
  tp-db-data:
    name: tp-db-data
  typecho:
    name: typecho  
networks:
  proxy:
    external: true

新配置如下,去掉labels,改在 dynamic.yml 中 统一控制。

dynamic.yml位置:

/root/traefik2/data/configurations
version: '3.7'

services:
  db:
    image: mysql:5.7
    container_name: typecho-db2
    volumes:
      - ./tp-db-data:/var/lib/mysql
    networks:
      - default
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: spuerrootpass
      MYSQL_DATABASE: typecho
      MYSQL_USER: typecho
      MYSQL_PASSWORD: typechodbpass
      
  typecho:
    depends_on:
      - db
    image: 80x86/typecho:latest
    container_name: typecho-blog2
    environment:
      PHP_TZ: Asia/Shanghai
      PHP_MAX_EXECUTION_TIME: 600
    volumes:
      # normal sites
      - ./nginx:/etc/nginx/sites-enabled
      - ./typecho:/data
      - type: tmpfs
        target: /tmp
    networks:
      - proxy
      - default
    restart: always

volumes:
  tp-db-data:
    name: tp-db-data
  typecho:
    name: typecho  
networks:
  proxy:
    external: true

1.2.1 配置文件解释

  1. 选用最热的 typecho镜像:80x86/typecho:latest, 镜像自带Typecho 安装程序,Php 和 Nginx,配置已设置好
  2. 需要给 typecho镜像建一个数据库
  • db部分:

    镜像选用 mysql:5.7,挂载到 typecho1/tp-db-data文件夹下, networks 选择default, 不让typecho以外的容器接触。

  • typecho部分

    镜像选用 80x86/typecho:latest,配置要求根据镜像使用示例来改:

    镜像数据挂载 在 typecho1/typecho文件夹下,且networks 选择default,proxy,能让Traefik与容器可以交互。

    原示例【80x86/typecho:latest】

    docker run -d \
    --name=typecho-blog \
    --restart always \
    --mount type=tmpfs,destination=/tmp \
    -v /srv/http/typecho:/data \
    -e PHP_TZ=Asia/Shanghai \
    -e PHP_MAX_EXECUTION_TIME=600 \
    -p 90:80 \
    80x86/typecho:latest

1.2.2 部署要修改的地方

新配置

基本也与旧配置一样,修改db数据即可:

Traefik2 快速搭建 Typecho 步骤

1.3 配置Traefik的动态配置文件dynamic.yml

1.3.1 增加 routers

 routers:
    # Roter3:  typecho-2
    typecho-2:
      entryPoints:
        - "websecure"
      service: typecho-service2
      rule: "Host(`youdomain.com`)"

1.3.2 增加 services

  services:
    # service2:  typecho-2-service
    typecho-service2:
      loadBalancer:
        servers:
        -  url: "http://172.18.0.5"

查找容器url,用docker inspect --format='{{.NetworkSettings.Networks.proxy.IPAddress}}' typecho-blog2 命令。

命令更详细解释,可跳转:https://www.zctou.com/2055.html#cl-7

1.4 创建nginx的 config文件

位置:/root/typecho2/nginx

创建文件

cd /root/typecho2/nginx
touch default

在新建的default中,输入下面的内容:

server {
  listen   80; ## listen for ipv4; this line is default and implied
  listen   [::]:80 default ipv6only=on; ## listen for ipv6

  root /app;
  index index.php index.html index.htm;

  location ~ .*\.php(\/.*)*$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    try_files $uri /index.php =404;
    fastcgi_pass unix:/var/run/php7-fpm.sock;
    # Mitigate https://httpoxy.org/ vulnerabilities
      fastcgi_param HTTP_PROXY "";
    fastcgi_index index.php;
    include fastcgi.conf;
    fastcgi_connect_timeout 300;
    fastcgi_read_timeout 600;
    fastcgi_send_timeout 300;
    fastcgi_buffer_size 128k;
    fastcgi_buffers   4 128k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
  }

    #unless the request is for a valid file (image, js, css, etc.), send to bootstrap
    if (!-e $request_filename)
    {
        rewrite ^(.*)$ /index.php$1 last;
        break;
    }

    location / {
          index  index.php
          try_files $uri $uri/ /index.php?$query_string;
    }

  location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc|ttf|ttc|otf|eot|woff)$ {
    try_files $uri /index.php?$query_string;
    expires max;
    access_log off;
    log_not_found off;
    add_header Pragma public;
    add_header Cache-Control "public, must-revalidate, proxy-revalidate";
  }

  location ~* \.(?:css|js)$ {
    try_files $uri /index.php?$query_string;
    expires 1y;
    add_header Cache-Control "public";
  }

  # deny access to . files, for security
  location ~* (?:^|/)\. {
    access_log off;
    log_not_found off;
    deny all;
  }

  location ~* (?:\.(?:bak|config|db|sql|fla|psd|ini|log|sh|inc|swp|dist)|~)$ {
    deny all;
    access_log off;
    log_not_found off;
  }

}

1.5 启动docker-compose

准备好所有文件,一键部署: docker-compose up -d 即可。

二、踩过的坑

2.1 新站只能加一个volumes映射

全新站,一开始只能加这个映射,加其他映射会报错。

volumes:
   - ./typecho:/data

./typecho 要加上./,不加的话文件目录会被 加载到 /var/lib/docker/volumes目录下

2.2 不能连接数据库错误

如果你卡在“对不起, 无法连接数据库, 请先检查数据库配置再继续进行安装”位置。网上提供的修复方向有两个

2.2.1 检查权限

权限的问题,把typecho CMS的根目录,权限改0755为0777即可。但这个Typecho image不存在这种错误。

2.2.2 检查数据库填写数据

数据库数据填写错误方面,通常是3个。

  • pdo驱动,本文用的 mysql;
  • 数据库地址:本镜像要填 db:33067
  • 用户名用数据库名,注意 区分

    Traefik2 快速搭建 Typecho 步骤