之前写过一篇 Vultr CentOS 7 洛杉矶主机 搭建 Hexo 博客超细节教程 因为 Dropbox 更新后不再支持 Glibc 2.19 版本以下系统的原因, 所以折腾了很久, 具体可以看这篇 Dropbox 升级公告后的折腾

前段时间发现 Dropbox 又更新了, 导致会出现文章无法同步并且主机异常消耗大量资源的问题, 解决这个问题的办法就是先停止 Dropbox 服务再重启. 但是不可能每发一篇文章都这么操作一次啊, 思来想去还是决定抛弃原来的 CentOS 7 主机, 因为我测试了下发现 Vultr 新建的 CentOS 7 主机的 Glibc 版本都是 2.17, 而创建的 Ubuntu 18.04 LTS 系统的主机 Glibc 版本却是 2.27, 主要是这个原因才让我决定迁移主机.

安装Git

新创建的 Ubuntu 18.04 LTS 系统的主机默认已经装了 Git, 自己用命令测试下, 没有就自己安装.

git --version    

安装NodeJS

默认是root权限账户, 所以以下的命令不用 sudo 也可以执行

apt-get update
apt-get install nodejs
apt-get install nodejs-dev node-gyp libssl1.0-dev
apt-get install npm

安装Dropbox并设置开机自启

安装64位版本

cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -

下载官方管理脚本

wget https://www.dropbox.com/download?dl=packages/dropbox.py -O ~/dropbox.py

提权

chmod 755 ./dropbox.py

其他问题请参考官方文档, https://www.dropbox.com/zh_CN/install-linux

设置开机启动 Dropbox

注意: 该设置仅针对 Ubuntu 18.04 LTS 系统版本.

参考: https://www.centos.bz/2018/05/ubuntu-18-04-rc-local-systemd%E8%AE%BE%E7%BD%AE/

建立软链接

ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service

进入目录

cd /etc/systemd/system/

编辑文件

vim rc-local.service

在文件最后追加内容

[Install]  
WantedBy=multi-user.target  
Alias=rc-local.service

创建文件

touch /etc/rc.local

提权

chmod 755 /etc/rc.local

编辑文件

vim /etc/rc.local

追加内容

#!/bin/bash
/root/dropbox.py start

开启关联

/root/dropbox.py start
/root/dropbox.py status

正常在 start 就会看到一个链接, 但是如果主机重装了系统, 就需要使用第二个命令查看状态才会看到.

把链接粘贴到浏览器中访问, 注意 Dropbox 需要登陆, 才能把主机关联到账户, Dropbox 网站可能需要翻墙才能访问. 没梯子的找我.

重启验证

reboot

重启后使用下面命令查看进程是否有 dropbox

ps -e

下载并安装LNMP一键安装包

懒得写, 复制一下我之前的博客. 本次安装时间 41 分钟.

  • 按官方教程安装

    官方地址 https://lnmp.org/install.html

    首先把当前目录调到 root , cd ~

    然后 screen -S lnmp

    注意我现在是2017年11月1日正常能使用这个版本, 如果有问题就去戳上面官方去找最新的

    wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz -cO lnmp1.5.tar.gz && tar zxf lnmp1.5.tar.gz && cd lnmp1.5 && ./install.sh lnmp

    这一步会在 root 文件夹中下载执行 lnmp 一键安装程序,之后的安装方式就按照官方教程来就行,提一点建议,MYSQL 跟 PHP ,我安装的版本都是默认版本,至少不会出现兼容性问题,内存优化我也没装,反正搭建的是静态博客,不会有什么影响。

    这个安装会跑很久. 实测需要 35 分钟左右。慢慢等待。直到界面底下显示绿色字样的 Install lnmp V1.4 completed! enjoy it. 这行字就代表安装成功,如果安装失败的话就去官网找解决方案。

    然后 Ctrl + C 退出安装程序, 接着 cd ~ , 参照这个教程 添加你的域名,SSL 免费证书试着装了一次,失败了,不知道咋回事。

    接着修改安装默认虚拟主机的域名,

    修改方法:vi /usr/local/nginx/conf/nginx.conf 找到 root /home/wwwroot/default,把 default 修改为你的域名,保存,执行:/usr/local/nginx/sbin/nginx -s reload 即可。

    到这一步已经把网站环境搭建好了。

    注意安装完成后, 进入 /home/wwwroot/default 目录, 把 phpmyadmin 改为不容易猜到的名称. 例如: phpGeek , 之后可以通过浏览器访问 “http://ip/phpGeek“ 访问到数据库.

安装Hexo

  • 在Dropbox的同步文件夹中安装hexo

    安装过程中有任何问题去官方文档查看解决方案

    先关闭 Dropbox 的同步功能 ./dropbox.py stop, 因为不保证能一次性装好,所以等装好 hexo 再同步吧。

    此刻我们应该是在 root 目录下的, 使用 cd Dropbox && ls 进入 Dropbox 目录, 不出所料的话此时这个目录只有一个 Dropbox 使用入门.PDF 文件.

    执行 npm install -g hexo-cli 安装 Hexo

    接着 hexo init Hexo , 注意:这里 Hexo 是目录,根据你的喜好你也可以取一个你自己喜欢的。例如 hexoblog

    完成后 cd Hexo 进入该目录,执行 npm install

    到这一步不出所料的话已经完成安装了,使用 hexo s 命令启动 hexo 程序。然后在浏览器中访问 “服务器地址:4000” 这个地址时你已经可以看到 hexo 博客的初始样子了。

使用 incrond 监测文件变化

安装 incrond

apt-get install incron

实测在 Ubuntu 上不需要再设置 incron 开机启动, 默认就是开机自启.

设置使用 vim 作为默认编辑器

echo 'editor = vim' >> /etc/incron.conf

编辑监听规则

incrontab -e

如果提示 user 'root' is not allowed to use incron, 编辑文件:

vim /etc/incron.allow

在打开文件中添加:

root

保存关闭后再使用 incrontab -e, 重装系统后默认打开时用的 nano, 不习惯, 使用下面命令:

update-alternatives --config editor

输入 3 选择使用 vim 编辑器. 再次执行 incrontab -e, 总算回到熟悉的界面了.

在打开的文件中追加下列命令, 意为监听定义文件的增删改查操作并在触发时执行对应的脚本.

/root/Dropbox/Hexo/source/_posts/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /root/runhexo.sh
/root/Dropbox/Hexo/themes/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /root/runhexo.sh  
/root/Dropbox/Hexo/_config.yml IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /root/runhexo.sh
/root/Dropbox/Hexo/themes/_config.yml IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /root/runhexo.sh

编写脚本

cd ~ && vim runhexo.sh

追加下列内容:

#!/usr/bin/env bash
exec 200<$0
flock -n 200 || exit 1
sleep 10
cd /root/Dropbox/Hexo && hexo clean
cd /root/Dropbox/Hexo && hexo g
rsync -a --delete /root/Dropbox/Hexo/public/ /home/wwwroot/www.geekqian.com/

提权

chmod 755 runhexo.sh

运行同步测试一下

~/runhexo.sh

成功了, 但是发现 log 里报了下面的错误.

zone.offset has been deprecated in favor of zone.utcOffset

经查询发现是旧版本的问题, 官方新版本已经修复了.具体查看 https://github.com/hexojs/hexo/issues/2845

那么再按照下面这个 issue 提示进行更新版本即可. https://github.com/hexojs/hexo/issues/3307

更新Hexo版本

cd ~/Dropbox/Hexo && vim package.json

修改下面的字段, 我原来是 3.4.0, 现在修改为 3.8.0

"dependencies": {
  "hexo": "^3.8.0",

重新跑了一遍脚本后发现上面的问题去除了. 接着访问主机的IP发现博客已经同步过去了. perfect!

域名解析到新主机

最后到万网把域名解析记录解析到新的主机 IP 就完成了本次迁移了! 嗯..花了一下午的时间.