前言

最近入手了阿里云的 ECS 服务器,ICP 备案也通过了,决定把博客迁移到阿里云的服务器上,本文记录迁移 Typecho 的过程。

操作环境:
原服务器 Typecho 开启了 HTTPS 和 伪静态去 index.php
原服务器和新服务器配置环境相同:
OS:CentOS Linux release 7.7
Apache:2.4.6
MySQL:14.14 Distrib 5.7.29
PHP:7.2.27 (cli)


备份原服务器数据

备份 Typecho 文件
我的原服务器上的 Typecho 文件是在/var/www/html目录下

cd /var/www
tar -zcvf backup.tar.gz html

打包后得到backup.tar.gz文件

备份数据库

mysqldump -uroot -p --all-databases > sqlfile.sql

会提示输入密码,输入MySQL 管理员密码后得到 sqlfile.sql 文件
文件生成在执行上述命令时所在的路径中

最后保存上述两个备份文件到本地,可用 Xftp 下载。

配置新服务器

安装 Apache

yum install httpd        # 安装httpd服务
systemctl start httpd    # 启动httpd服务
systemctl status httpd   # 查看httpd服务状态
systemctl enable httpd

安装 PHP

rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm 
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum install -y php72w  php72w-mysql php72w-gd php72w-ldap php72w-odbc php72w-pear php72w-xml php72w-xmlrpc php72w-mbstring php72w-snmp php72w-soap curl curl-devel

安装 MySQL

wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
rpm -ivh mysql57-community-release-el7-8.noarch.rpm
yum repolist enabled |grep mysql
yum install mysql-community-server
systemctl start mysqld
systemctl status mysqld
systemctl enable mysqld

安装完毕后数据库会生成默认密码,不用修改

导入原服务器数据

backup.tar.gzsqlfile.sql 这两个文件上传到新服务器

导入数据库

获取当前数据库默认密码

grep 'temporary password' /var/log/mysqld.log

导入数据库,在sqlfile.sql所在文件路径下执行以下命令,会要求输入密码,输入当前数据库的默认密码即可

mysql -uroot -p <sqlfile.sql

导入数据库后,当前数据库的 root 密码会变成原服务器数据库的 root 密码,原因是备份数据库时备份了整个数据库

导入 Typecho 文件

backup.tar.gz文件所在路径下执行以下命令解压此文件到/var/www

tar -zxvf backup.tar.gz -C /var/www

此时访问博客会出现错误,提示


重启服务器可解决此问题

问题解决

此时会出现可以访问网站,但是无法加载头像、无法打开文章的问题,由以下两个原因导致

  • 原服务器 Typecho 开启了 HTTPS 访问,而新服务器没有开启
  • 原服务器设置了地址重写以实现伪静态,而新服务器没有设置

开启 HTTPS

安装 openssl 和 ssl 模块

sudo yum install -y openssl
sudo yum install -y mod_ssl

在原服务器上备份打包 SSL 证书文件,并以相同路径放置在新服务器上。
备份原服务器上/etc/httpd/conf.d路径下的ssl.conf文件
用上述ssl.conf文件按替换掉新服务器上/etc/httpd/conf.d路径下的ssl.conf文件
重启 Apache

service httpd restart

此时就可以通过 HTTPS 访问

也可以重新编辑新服务器上的 ssl.conf 文件,这里替换是为了省事

开启 Typecho 伪静态

编辑 Apache 配置文件httpd.conf

vim /etc/httpd/conf/httpd.conf

找到以下配置段,并把其中的AllowOverride None改为AllowOverride All

<Directory "/var/www/html">
  *
  *
  *
</Directory>

新建 .htaccess 文件

vim /var/www/html/.htaccess

添加如下内容

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>

重启 Apache

service httpd restart

此时就可以正常访问博客了。

最好在打包 Typecho 文件时添加指令,同时打包隐藏文件,就不必新建 .htaccess 文件

Last modification:May 12th, 2020 at 12:15 pm