從wordpress到hexo博客遷移記錄

我從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

  1. 引入七牛sdkgit

    composer require qiniu/php-sdk複製代碼
  2. 編寫上傳本地圖片到七牛的腳本程序員

<?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;
}複製代碼

導出wordpress數據

  1. 批量替換數據庫文章中包含的圖片地址github

    update wp_posts set post_content = replace(post_content, 'http://idoubi.cc/wp-content/uploads/', 'http://qiniu.idoubi.cc/');複製代碼
  2. 在wordpress後臺導出xml文件
    shell

安裝hexo

npm i -g hexo-cli
hexo init idoublog複製代碼

遷移數據到hexo

  1. 安裝遷移插件數據庫

    cd idoublog
    npm install hexo-migrator-wordpress --save複製代碼
  2. 修改插件(防止導入數據後出現的文章標題亂碼問題)npm

    # 在node_modules/hexo-migrator-wordpress/index.js的63行位置加上
    if (slug) slug = decodeURI(slug);複製代碼
  3. 導入數據瀏覽器

    hexo migrate wordpress /path/to/wordpress.xml複製代碼

安裝主題

  1. fork主題

    https://github.com/yscoder/hexo-theme-indigo複製代碼
  2. 安裝主題

    cd idoublog/
    git submodule add git@github.com:mikemintang/hexo-theme-indigo.git themes/indigo複製代碼
  3. 修改主題配置並提交到fork的主題倉庫

生成內容

hexo generate複製代碼

本地預覽

  1. 安裝瀏覽器同步插件,能夠在寫文章的時候同步預覽

    npm i hexo-browsersync --save複製代碼
  2. 帶端口預覽

    hexo s -p8031複製代碼

發佈內容

  1. 配置發佈環境

    deploy:
    type: git 
    repo: https://github.com/mikemintang/idoubi.cc
    branch: master複製代碼
  2. 發佈內容

    # 執行此命令後,博客靜態內容會發布到https://github.com/mikemintang/idoubi.cc
    hexo deploy複製代碼

雲服務器同步博客內容

  1. 初始化用於同步博客內容的項目文件夾

    mkdir /idoublog
    cd /idoublog
    git init
    git remote add origin https://github.com/mikemintang/idoubi.cc.git複製代碼
  2. 編寫自動同步shell腳本
    vi /shell/deploy_idoublog.sh

#!/bin/sh 
cd /idoublog
git pull origin master複製代碼
  1. 定時執行shell腳本
    crontab -e
*/1 * * * * /bin/sh /shell/deploy_idoublog.sh複製代碼

通過上面一系列步驟,個人博客成功從wordpress遷移到了hexo。如今我就能夠在本地用sublime寫好博客,而後執行hexo deploy --generate命令,博客內容就會自動同步到 idoubi.cc/

相關文章
相關標籤/搜索