记一次Docker-Compose部署Typecho

@Pelom  July 25, 2022

前言

时隔五年,Typecho于今年愚人节更新了其1.2.0版本
版本改进中提到:“对容器化的更好支持”,容器化意味着更易于的部署、维护和迁移
正好想用Docker部署一些项目,索性就将整个服务器重装为Docker系统了

步骤

备份数据库

此部分为从原系统中迁移,若新部署可以跳过

由于Typecho自带的数据库备份和恢复十分难用,推荐利用数据库工具手动备份,下面介绍在命令行中备份和恢复的方法

MySQL常用命令

命令操作
mysql -u root -p以root用户登入MySQL,且隐式输入密码
exit/ctrl+D退出MySQL
show databases;显示数据库列表
create database name;创建名为name的数据库
drop database name;删除名为name的数据库
use name;选择名为name的数据库
tables;显示选择数据库中的表
rename table name to newname;将名为name的表重命名为newname

注意所有MySQL命令最后都有分号

备份

命令行运行

mysqldump -u root -p --all-databases > back.sql

然后下载备份文件back.sql到本地

恢复

上传备份文件back.sql到服务器

  1. Docker容器外恢复
    命令行运行

    mysql -u root -p < back.sql
  2. Docker容器内恢复
    命令行运行

    docker cp back.sql mysql:/var
    docker exec -it mysql /bin/bash
    mysql -u root -p < /var/back.sql

需要注意迁移前后在Typecho安装界面填写的数据库名是否相同,若不同则需要重命名数据库
MySQL本身并没有重命名数据库的命令,可以通过依次重命名数据库中所有表的方式实现
数据库名与表名之间由.连接,例如,在进入MySQL后

rename table database.table to newdatabase.table;

基础配置

安装Docker

可以直接选择带有Docker的系统镜像,或是参考教程安装
此处使用系统为CentOS 7.9

安装Docker-Compose

安装官方在Github发布的最新版本

curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose

赋予用户文件执行权限

chmod +x /usr/local/bin/docker-compose

修改Docker配置

创建/etc/docker/daemon.json,并写入

{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "20m",
        "max-file": "3"
    },
    "ipv6": true,
    "fixed-cidr-v6": "fd00:dead:beef:c0::/80",
    "experimental":true,
    "ip6tables":true
}

以上配置会增加一段自定义内网IPv6地址,开启容器的IPv6功能,以及限制日志文件大小,防止Docker日志塞满硬盘
然后重启Docker服务

systemctl restart docker

项目构成

创建typecho文件夹作为项目根目录
Typecho依赖PHP和MySQL,并选择Nginx作为其服务器

MySQL

根目录下创建mysql.env,写入MySQL的环境变量

MYSQL_ROOT_PASSWORD=root_pass
MYSQL_DATABASE=typecho
MYSQL_USER=username
MYSQL_PASSWORD=password

PHP

基础镜像选择php-fpm,为了使PHP连接MySQL,需要安装PDO_MYSQL扩展
typecho/php目录下创建Dockerfile,写入镜像构建信息

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

Nginx

Nginx转发php请求到PHP解释器,并配置rewrite规则以便Typecho开启地址重写
typecho/nginx目录下创建default.conf,写入Nginx配置信息

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;
    }
}

Typecho

下载官方在Github发布的最新版本并解压到typecho/typecho目录

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

容器编排

项目根目录下创建docker-compose.yml,写入

version: "3"

services:
  nginx:
    image: nginx
    ports:
    - "80:80"
    restart: always
    environment:
    - TZ=Asia/Shanghai
    volumes:
    - ./typecho:/var/www/html
    - ./nginx:/etc/nginx/conf.d
    - ./logs:/var/log/nginx
    depends_on:
    - php
    networks:
    - web

  php:
    build: php
    restart: always
    expose:
    - "9000"
    volumes:
    - ./typecho:/var/www/html
    environment:
    - TZ=Asia/Shanghai
    depends_on:
    - mysql
    networks:
    - web

  mysql:
    image: mysql:5.7
    restart: always
    environment:
    - TZ=Asia/Shanghai
    expose:
    - "3306"
    volumes:
    - ./mysql/data:/var/lib/mysql
    - ./mysql/logs:/var/log/mysql
    - ./mysql/conf:/etc/mysql/conf.d
    env_file:
    - mysql.env
    networks:
    - web

networks:
  web:

Typecho安装

项目根目录下,命令行运行

docker-compose up -d

容器构建完成后,访问本机80端口,按照导引进行安装
需要注意的是,在安装界面的数据库地址一项,应该填mysql,即docker-compose.yml文件中的服务名

项目操作

运行

项目根目录下,命令行运行

docker-compose up -d

其中参数-d表示后台运行

停止

项目根目录下,命令行运行

docker-compose stop

可通过以下命令再启动

docker-compose start

更新

要拉取最新的依赖镜像,在项目根目录下,命令行运行

docker-compose pull
docker-compose up -d

卸载

项目根目录下,命令行运行

docker-compose down

会同时删除创建的容器

迁移

移动整个项目文件夹至新环境,随后在项目根目录下,命令行运行

docker-compose up -d

引用


添加新评论