在本地电脑完成Hexo的修改后,将生成的Blog部署到Google Cloud(也适用于其他云服务商)一般需要三步:

  • 新建云主机(VPS)
  • 登录云主机搭建服务器环境
  • 生成Blog文件并部署

Update: 录了一个视频,中间安装服务器环境的时候等待的时间有点长,视频中剪掉了。如果确认只部署Hexo,不折腾Wordpress或其他的话,只需要安装Nginx就好了。

视频地址:https://youtu.be/oO783_w59Ys

Step1、登录Google Cloud控制台新建VM实例

Google Cloud控制台: https://cloud.google.com/

如果是第一次创建VM实例,需要先新建一个项目。直接根据提示创建一个项目即可。如果已经新建过项目,就选择已经创建的项目。(项目与VM实例的关系:一个项目可以创建多个VM实例和其他云资源,每个VM实例必需归属一个项目)

点击左上角菜单,找到”计算引擎”,再点击”VM实例”。(VM实例可以理解为虚拟机,或VPS,或云主机)

然后点击”创建实例”按钮。

参照如下示例输入和选择相关信息。

然后展开管理、磁盘、网络、SSH密钥,点击SSH密钥。这时我们需要先在本机生成一个SSH Key用于以后登录到VM实例进行管理操作。(关于SSH和SSH KEY的介绍看下这篇博文

打开终端,输入如下命令, 后面的covey将会作为VM实例的用户名,改成自己的名字。

ssh-keygen -t rsa -C covey

输入命令后回车两次即可。然后复制生成的密钥,下面的命令会将密钥复制到剪切板。

pbcopy < ~/.ssh/id_rsa.pub

然后返回Google Cloud 后台,粘贴已经复制好的密钥。最后点击”创建”按钮。

等待片刻,即可看到已经创建的VM实例了,我们就可以通过SSH登录到主机进行下一步的操作了。

不过此时分配的外部IP是临时的。我们要将它转为固定IP。 点击左上角的菜单,找到VPC网络–外部IP地址:

然后找到我们新建的VM实例,点击类型下的”临时”,

在弹出的对话框中输入一个名称即可。 (由于免费的帐户只能保留一个静态IP地址,我已经使用了一个,所以我点击保留的时候会出错。)

至此,我们就已经在Google Cloud上创建了一个VM实例。接下来就需要通过SSH登录到VM实例安装环境了。

Step2、登录VM实例安装环境

在新建好VM实例后,我们就拥有了一台可供公网访问的服务器。但是我们还需要安装相关的软件才能对外提供访问服务。这时我们就需要登录到VM实例了。

方法一、打开终端,然后使用我们在上面创建的SSH key进行登录,covey是上面新建ssh key时的用户名,需要改成自己的,xx.xx.xx.xx是VM实例的IP地址。

ssh covey@xx.xx.xx.xx

如果上面的步骤没有问题的话,这里就可以正常登录到VM实例了。

方法二、直接在Google Cloud后台通过浏览器登录 进入后台,点击展开VM实例SSH连接,选择在浏览器窗口中打开,即会在新的浏览器标签中打开模拟的SSH窗口。

一般使用第一种方式,如果第一种方式没有登录成功(一般是配置或本地SSH Key文件权限的原因),就使用第二种方式。登录之后就开始安装相应的软件。

由于hexo生成的是全静态的文件,所以一般我们只需要安装Nginx即可。但是考虑到后期可能的折腾,比如尝试Wordpress,推荐使用oneinstack这样的安装套件。 通过上面的任何一种方式登录到SSH后。 然后依次运行下面的命令:

sudo -i切换是到root用户。

sudo -i  
yum -y install wget screen curl python
wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz
tar xzf oneinstack-full.tar.gz
cd oneinstack
screen -S oneinstack
./install.sh

然后再根据指令的提示进行相关的选择,具体可查看:官网帮助文档

安装时的一些建议:

  • 不用修改SSH端口号,默认22,
  • 不需要开启 iptables
  • 安装Web server
  • 安装Nginx
  • 不安装Apple server
  • 不安装tomcat
  • 安装mysql 5.7 注意记住设置的Mysql 密码
  • 安装PHP7.1
  • 安装Zend OPcache
  • 不需要ionCube
  • 安装ImageMagick
  • 安装Pure-FTPd 以防后期需要
  • 先不安装phpMyAdmin,后期需要再添加
  • 不需要安装redis,memcached和HHVM

这时一般会需要等待比较长的时间。安装完成之后会提示重启一下验证服务是否安装成功,选择重启,然后等待片刻,再打开浏览器输入上面VM实例的IP地址,如果能正常访问,即说明安装成功。

注意: 如果我们只部署一个网站,可以直接将Blog文件上传到oneinstack默认添加的/data/wwwroot/default的目录即可。 这时我们需要再登录到服务器,删除/data/wwwroot/default目录下的文件内容,不然下面部署的时间会存在权限问题。

ssh covey@xx.xx.xx.xx
sudo -i
rm -rf /data/wwwroot/default/*

如果我们后期需要在一个服务器上搭建多个网站,就需要再添加虚拟主机。查看https://oneinstack.com/install/,往下滑到如何添加虚拟主机? 下面我们直接使用默认的/data/wwwroot/default/这个目录,不添加新建的虚拟主机。

Step3、选择Hexo部署方式,配置相关信息

Hexo提供多种部署方式:官方文档

先推荐使用hexo-deployer-git的方式。 cd到blog目录,安装hexo-deployer-git

 npm install hexo-deployer-git --save

然后登录到服务器进行相关配置,可以参考这里,但是因为系统和版本的原因,有些命令应该不再适合。 具体步骤如下:

服务端添加git用户并上传上面生成的ssh密钥:

sudo adduser --shell $(which git-shell) git

添加git用户之后,我们可以新建一个ssh key,但也可以直接使用我们在新建VM实例时生成的id_rsa.pub 公钥文件中的内容复制到/home/git/.ssh/authorized_keys

mkdir -p /home/git/.ssh
touch /home/git/.ssh/authorized_keys

然后在打开本地电脑的终端,复制~/.ssh/id_rsa.pub文件的内容。

pbcopy < ~/.ssh/id_rsa.pub

然后再返回VM实例的SSH,将pub文件内容粘贴到/home/git/.ssh/authorized_keys中。

vim /home/git/.ssh/authorized_keys

先输入i进行编辑模式,然后右键粘贴。然后按ESC键,再输入wq保存。

chmod 600 /home/git/.ssh/authorized_keys
chmod 700 /home/git/.ssh

验证登录: (将xx.xx.xx.xx换成VM实例的IP地址)

ssh -T git@xx.xx.xx.xx

因为新建git用户时指定的shell是git-shell,是不能登录到系统的,查看返回信息,一般提示git-shell不存在,也说明ssh key已经配置成功了。

再将git添加到www用户组,并修改/data/wwwroot/的权限为775.

usermod -a -G www git
chmod 775 /data/wwwroot/ -R

在服务器端添加git仓库,并修改相关文件的权限

cd /home/git
mkdir blog.git && cd blog.git
git init --bare

再添加hooks,可以理解为一个触发操作,将文件上传到git仓库后,会执行hooks里的指令,我们需要将文件复制到网站的目录下,默认为/data/wwwroot/default.

vim /home/git/blog.git/hooks/post-update

然后添加下面的内容:

#!/bin/bash -l
GIT_REPO=/home/git/blog.git
TMP_GIT_CLONE=/tmp/blog
PUBLIC_WWW=/data/wwwroot/default
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}

注意修改相关文件的权限,不然git用户无法执行相关的命令

chmod +x /home/git/blog.git/hooks/post-update
chown git:git /home/git/ -R

最后再修改Blog根目录_config.yml文件配置deploy,将下面的xx.xx.xx.xx改为自己VM实例的IP。

deploy:
      type: git
      repo: ssh://git@xx.xx.xx.xx/home/git/blog.git

最后再cd到blog目录,运行 hexo g && hexo d 不出意外,就成功部署了,再次打开浏览器访问查看。

最后的最后,修改下自己域名的解析,添加一条A记录到VM实例的IP地址,就可以使用域名访问了。 Good luck~