前言
时隔五年,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
到服务器
Docker容器外恢复
命令行运行mysql -u root -p < back.sql
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