我從2013年起,使用wordpress搭建了本身的我的博客,四年的時間寫了將近50篇文章,記錄了本身在平常開發中遇到的一些問題和解決辦法,同時作了幾個系列的技術分享。雖然博文數量不算不少,但每一篇文章都花了不少的心思在寫,最近也一直在思考把寫博客堅持下去並保持博客頻繁更新的問題。php
wordpress是phper最喜歡的博客系統,也是全世界範圍內很是流行的CMS管理系統,它的優勢是更新迭代頻繁,功能強大,有至關多的主題和插件可用。可是很差的地方就是前端渲染比較慢,再加上後臺引用了一些被牆的cdn和avatar庫,若是很差好配置一番,在後臺寫文章體驗會至關很差。近些年,hexo漸漸崛起,基於其markdown的寫做方式和靜態發佈的特性,成了大部分愛寫博客程序員的最愛。基於這幾點考慮,我便有了把博客從wordpress遷移到hexo的想法。下面的內容記錄了本次的遷移過程。有一樣需求的朋友能夠做爲參考,從wordpress棄坑,投入hexo的懷抱吧~前端
之前在wordpress寫的文章,裏面包含的圖片都是使用wordpress的多媒體添加的,因此圖片的訪問連接基本上都是相似http://idoubi.cc/wp-content/uploads/2017/08/01/abc.jpg
這樣的,因此爲了在博客遷移以後能讓圖片正常顯示,須要編寫腳本把wordpress媒體空間裏面的圖片上傳到七牛,再批量替換掉文章裏面包含的圖片連接。node
引入七牛sdkgit
composer require qiniu/php-sdk複製代碼
編寫上傳本地圖片到七牛的腳本程序員
<?php
require_once './vendor/autoload.php';
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;
$accessKey = 'RKassuWW4TB4_xxxxxyyyyyQj2iLEIBq9GSGs8E';
$secretKey = '6iVWfPayYPhosxxxxxyyyyyO909Wp6GsV0oOt';
$bucket = 'idoublog';
$auth = new Auth($accessKey, $secretKey);
$token = $auth->uploadToken($bucket);
$uploadManager = new UploadManager();
// 批量上傳圖片
$basePath = 'D:/phpStudy/WWW/project/idoubiblog/wp-content/uploads/';
$fileDir = 'D:/phpStudy/WWW/project/idoubiblog/wp-content/uploads';
$files = getUploadFiles($fileDir);
$successCount = 0;
$failCount = 0;
foreach ($files as $k => $v) {
$key = str_replace($basePath, '', $k);
$file = mb_convert_encoding($v, 'gbk', 'utf8'); // 對文件路徑進行轉碼,防止文件名爲中文時出現的亂碼問題
list($res, $err) = $uploadManager->putFile($token, $key, $file);
if (empty($err)) { // 上傳成功
$successCount++;
} else { // 上傳失敗
$failCount++;
var_export('上傳失敗:' . $v);
echo "\r\n";
}
}
echo "上傳成功:{$successCount}個,上傳失敗:{$failCount}個";
// 獲取全部須要上傳的文件
function getUploadFiles($dirPath) {
$files = array();
$scanFiles = myScanDir($dirPath);
foreach ($scanFiles as $ak => $av) {
if (is_array($av)) {
foreach ($av as $bk => $bv) {
if (is_array($bv)) {
foreach ($bv as $ck => $cv) {
$files[$cv] = $cv;
}
} else {
$files[$bv] = $bv;
}
}
} else {
$files[$av] = $av;
}
}
return $files;
}
// 遍歷文件夾下面的文件
function myScanDir($dirPath) {
$files = array();
if (is_dir($dirPath)) {
if ($fp = opendir($dirPath)) {
while (($file = readdir($fp)) !== false) {
if ($file != '.' && $file != '..') {
$filePath = $dirPath . '/' . $file;
if (is_dir($filePath)) {
$files[] = myScanDir($filePath);
} else {
$files[] = iconv('gbk', 'utf-8', $filePath); // 對文件路徑進行轉碼,防止文件名爲中文時出現的亂碼問題
}
}
}
}
}
return $files;
}複製代碼
批量替換數據庫文章中包含的圖片地址github
update wp_posts set post_content = replace(post_content, 'http://idoubi.cc/wp-content/uploads/', 'http://qiniu.idoubi.cc/');複製代碼
在wordpress後臺導出xml文件
shell
npm i -g hexo-cli
hexo init idoublog複製代碼
安裝遷移插件數據庫
cd idoublog
npm install hexo-migrator-wordpress --save複製代碼
修改插件(防止導入數據後出現的文章標題亂碼問題)npm
# 在node_modules/hexo-migrator-wordpress/index.js的63行位置加上
if (slug) slug = decodeURI(slug);複製代碼
導入數據瀏覽器
hexo migrate wordpress /path/to/wordpress.xml複製代碼
fork主題
https://github.com/yscoder/hexo-theme-indigo複製代碼
安裝主題
cd idoublog/
git submodule add git@github.com:mikemintang/hexo-theme-indigo.git themes/indigo複製代碼
修改主題配置並提交到fork的主題倉庫
hexo generate複製代碼
安裝瀏覽器同步插件,能夠在寫文章的時候同步預覽
npm i hexo-browsersync --save複製代碼
帶端口預覽
hexo s -p8031複製代碼
配置發佈環境
deploy:
type: git
repo: https://github.com/mikemintang/idoubi.cc
branch: master複製代碼
發佈內容
# 執行此命令後,博客靜態內容會發布到https://github.com/mikemintang/idoubi.cc
hexo deploy複製代碼
初始化用於同步博客內容的項目文件夾
mkdir /idoublog
cd /idoublog
git init
git remote add origin https://github.com/mikemintang/idoubi.cc.git複製代碼
編寫自動同步shell腳本vi /shell/deploy_idoublog.sh
#!/bin/sh
cd /idoublog
git pull origin master複製代碼
crontab -e
*/1 * * * * /bin/sh /shell/deploy_idoublog.sh複製代碼
通過上面一系列步驟,個人博客成功從wordpress遷移到了hexo。如今我就能夠在本地用sublime寫好博客,而後執行
hexo deploy --generate
命令,博客內容就會自動同步到 idoubi.cc/