docker部署typecho+mysql

本篇文章记录docker部署typecho的过程,并将typecho容器和mysql容器进行链接。

一、部署mysql容器

1
docker run --name=mysql -d -p 10812:3306  -v /mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password mysql:5.7

主要参数说明:

  • --name=mysql: 容器名
  • -p 10812:3306: 将主机的10812端口映射到mysql容器的3306端口
  • -v /mysql:/var/lib/mysql: 将容器的/var/lib/mysql文件夹与主机的/mysql文件夹建立映射关系
  • -e MYSQL_ROOT_PASSWORD=password: 设置MYSQL数据库的root用户密码为password,此处按需填写自己的密码

接下来的步骤是创建typecho数据库

再输入以下命令进入mysql容器命令行窗口.

1
docker exec -it mysql bash

输入以下命令进入mysql命令行模式

1
mysql -u root -p

接下来输入之前设置的root密码。

此时已经进入了mysql命令行模式,输入以下命令创建typecho数据库。

1
create database typecho;

设置完毕后,输入exit退出Mysql命令行,再输入exit退出容器命令行,回到主机命令行。

二、部署typecho容器

这里使用的镜像为80x86/typecho

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

主要参数说明:

  • -v /srv/http/typecho:/data: 将容器的/data文件夹与主机的/srv/http/typecho文件夹建立映射关系

    此时在主机上的typecho站点目录为/srv/http/typecho。

  • -p 90:80: 将主机的90端口映射到容器的80端口

  • --link mysql:db: 将mysql容器与typecho容器链接。


至此,两个容器已经创建完成,接下来访问站点进行typecho初始化的过程

注:如果服务器开启了防火墙,需要先将90端口打开(因为上述操作已经将主机的90端口映射到容器的80端口),假设此时服务器ip为222.222.222.222。

访问地址 http://222.222.222.222:90, 即可进入typecho安装页面。

如果选择mysql数据库引擎,填写的数据库地址应为db,注意是db!,端口依然是3306。

因为–link mysql:db这个参数将mysql容器地址映射为typecho容器中的db。如果你进入typecho容器中,使用ping db命令发现db地址为一个内网ip,两个容器在同一个局域网内。

三、博客迁移

数据库备份主要包含两个部分,一个是typecho站点目录,另一个是数据库内容。

备份站点目录

1
zip -r typecho.zip /srv/http/typecho

备份后生成了一个typecho压缩包。

备份数据库内容

依次输入以下命令:

1
2
docker exec -it mysql bash  # 进入mysql容器命令行
mysqldump -u root -p typecho > sqlfile.sql # 将typecho数据库内容被分为sql文件

完成以上步骤就做好了备份,分别为typecho.zip文件和sqlfile.sql文件。

下面介绍如何恢复数据,假设我们按照前文部署typecho流程进行迁移。

首先按照按照流程部署一下mysql容器和typecho容器,注意此时不要初始化typecho站点。

恢复站点目录内容

1
2
3
4
5
# 进入/srv/http/typecho目录
cd /srv/http/typecho
# 将typecho文件上传到该目录后,解压文件
unzip typecho.zip
ls #查看解压是否正确,正常显示的是typecho站点目录,如果显示了typecho文件夹,注意将文件夹内容移出来。

恢复数据库内容

1
2
3
4
5
6
7
8
cd /mysql #进入文件夹后,将sqlfile.sql上传到该文件夹
docker exec -it mysql bash #进入容器
mysql -u root -p # 登录数据库并输入密码
create database typecho; #创建数据库
exit #退出mysql操作
cd /var/lib/mysql
mysql -u root -p typecho < sqlfile.sql #将数据库内容导入
exit #退出

:如果修改了之前数据库的密码,需要修改typecho站点目录下的config.inc.php文件。

修改上面的密码。

四、typecho更换域名

第一步需要登录mysql。

1
2
docker exec -it mysql bash #进入容器
mysql -u root -p typecho #输入密码,登录mysql的typecho数据库

执行以下命令,操作数据库内容。

注意:以下 SQL 语句使用默认表前缀 typecho_,操作数据库前建议备份。

1
2
3
4
5
6
7
8
9
10
11
12
# 修改网站设置里的域名:
UPDATE typecho_options SET value = 'https://blog.kervia.ml' WHERE typecho_options.name = 'siteUrl' AND typecho_options.user =0;

# 替换文章的域名
UPDATE typecho_contents SET text = REPLACE(text,'https;','新域名');

# 将管理员的个人网站进行替换
UPDATE typecho_users SET url = REPLACE(url,'原域名','新域名');

# 替换评论中的域名
UPDATE typecho_comments SET `url` = REPLACE(`url`,'原域名','新域名');
UPDATE typecho_comments`SET `text` = REPLACE(`text`,'原域名','新域名');