搭建博客(三) —— 从零开始使用腾讯云

Author Avatar
xiaoLit Created: Apr 03, 2019 Updated: May 14, 2020

问题来源:本来博客是在GitHub Pages上搭建的,无奈国内访问实在是速度感人,无奈开始寻找加速方案。

1、CDN加速,GitHub Pages只能使用国外的CDN加速,其实对于国内来说访问速度还是好不了到哪去。
2、那么只能考虑使用国内的平台托管,看了几个类似coding.net的平台,平台为了托管代码便利(无需备案),其实服务器也是放在国外的,那么速度也可想而知。
3、既然只能考虑国内的云服务器了,备案的事情就不可避免了,不过还好,技术类静态博客,没有评论等社交内容,比较容易通过备案。然后国内的选择比较好的就是阿里云和腾讯云了。其实俩家服务器方面都没话说,只能是服务或者是性价比上来考虑。综合考虑采用了腾讯云,标准型S2,1 核 1 GB 1 Mbps,系统盘:高性能云硬盘,网络:Default-VPC

一、搭建流程

先明确一下它的运作流程:本地有个 hexo 程序,里面包含了 public 文件夹,sources 文件夹,hexosources 里的*.md文件渲染为静态的 html 文件放到 public 下,然后我们用git推送到服务器的repository,服务器用git hooks把仓库里的文件同步到网站根目录,而 nginx 的作用就是反向代理。

  • 服务器环境:安装gitnginx
  • 本地搭建Hexo环境:安装NodeJshexo-cli,生成本地静态网站。
  • 使用git自动化部署发布博客。

二、服务器配置

1. 重置密码或者加载秘钥

云服务器购买完成了,首先需要重置云服务器实例的密码或者SSH秘钥,然后我们就可以通过设置的密码或者SSH秘钥登录到我们购买的服务器实例了。
登录 Linux 实例
SSH原理与运用(一):远程登录

因为免密等优势,我们一般使用SSH登录,简单说一下如何使用。

  • 进入该秘钥目录
    cd .ssh
    
  • 进入目录中可以查看本机是否存在id_rsaid_rsa.pub,没有的话则输入生成秘钥命令。
    ssh-keygen
    
    默认使用RSA加密,后面一顿回车就好。
  • 有了这个秘钥后,我们将这个公钥添加到服务器的公钥信任列表尾部,
    ssh-copy-id root@118.25.104.199
    
    输入密码,即可实现ssh免密登录。

2. 更新yum

腾讯云服务器实例系统是CentOS 7.2 64位,提供Yum下载源。

yum check-update
yum update
yum clean all

3. nginx安装和配置

(1) 安装

yum install -y nginx

(2) 配置

创建文件目录, 用于博客站点文件存放。

cd /usr/local/
mkdir xiaolitHexo
chmod 775 -R /usr/local/xiaolitHexo/  

(3) 添加测试内容

加一个index.html页面用来检测配置 Nginx 是否成功。

vim /usr/local/xiaolitHexo/index.html

添加如下代码并保存:

<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="UTF-8">
</head>
<body>
<p>Nginx running</p>
</body>
</html>

(4) 配置 Nginx 服务器

vim /etc/nginx/nginx.conf

修改server_nameroot

......
server {

listen 80 default_server;

listen [::]:80 default_server;

server_name www.xxx.com; # 填写个人域名

root /usr/local/xiaolitHexo/; # 填写博客提交位置

}
......

注意:配置多个域名需要注意一下格式。
使用 Nginx 为 Linux 实例绑定多个域名

(5) 启动nginx服务

nginx -t                #检查配置是否有误,并按照报错提示修复错误。
systemctl start nginx   #启动服务器
systemctl enable nginx.service # 设置为开机启动

这时候可以浏览器访问服务器的公网IP,看我们index.html是否正常显示。

4. 安装最新版git

(1) 检查更新

yum install -y git

通过git --version发现版本号过低,可以通过我们自己到官网下载安装最新的git
首先先删除旧的git

yum remove -y git

(2) 下载最新git

然后下载新git,从官网得知最新版本为:2.19.2。

wget https://www.kernel.org/pub/software/scm/git/git-2.19.2.tar.xz      //下载git源码
tar -vxf git-2.19.2.tar.xz      //解压缩
mv git-2.19.2 /usr/src      //移动到/usr/src目录下

(3) 安装依赖

yum install autoconf        //处理 /bin/sh: autoconf: command not found

yum install gcc        //处理 no acceptable C compiler found in $PATH

yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
//处理 fatal error: zlib.h: No such file or directory #include <zlib.h>

(4) 编译安装

源码安装通常由3个步骤组成,配置configure、编译make、安装make install

make configure      //配置
./configure prefix=/usr/local/git/      //配置git安装路径
make && make install        //编译并且安装

(5) 将git指令添加到bash中

vi /etc/profile     //打开文件

写入以下代码:

export PATH=$PATH:/usr/local/git/bin

保存退出,然后更新:

source /etc/profile     //让profile配置文件立即生效

完成后可以再次检查版本:

git --version

git version 2.19.2      //打印

4. 配置git

(0)建立链接

如果安装的git不在默认目录就需要建立链接。
由于以上我们使用了自己下载的最新版git并存放在/usr/local/git/目录,不是系统默认目录,所以需要建立链接。

ln -s /usr/local/git/bin/git-upload-pack /usr/bin/git-upload-pack       //clone需要的

ln -s /usr/local/git/bin/git-receive-pack /usr/bin/git-receive-pack     //commit需要的

还有可能有别的需要,不过当你正确了安装git之后,如果还报以下错误:

bash: git-receive-pack: command not found
fatal: Could not read from remote repository.

就可以建立相应的链接。

(1) 准备工作

创建文件目录, 用于私人 git 仓库搭建, 并更改目录读写权限。

cd /usr/local/
mkdir xiaolitBlogRepo
chmod 775 -R /usr/local/xiaolitBlogRepo/

(2) git初始化

cd xiaolitBlogRepo
git init --bare hexo.git

(3) 创建 git 的 hook 并配置

创建hook(钩子)是为了自动化部署,只要本地 git 推送上去,服务器就会通过git hooks 自动把内容同步到网站根目录。

vim /usr/local/xiaolitBlogRepo/hexo.git/hooks/post-receive

输入以下信息,用于指定 git 的源代码 和 git 配置文件。

#!/bin/bash

git --work-tree=/usr/local/xiaolitHexo --git-dir=/usr/local/xiaolitBlogRepo/hexo.git checkout -f

保存并退出后,给文件添加可执行权限:

chmod +x /usr/local/xiaolitBlogRepo/hexo.git/hooks/post-receive

致此远程端基本配置完毕。

三、博客配置

1. Hexo搭建静态博客

因为我本来的博客本来就在GitHub Pages搭建的,所以hexo等博客环境都是完成的,如果你没有的话,可以参考旭神的Hexo的博客搭建

2. Hexo配置

上面都完成了话,可以修改根目录下的_config.yml文件,将提交的repo地址指向我们的服务器。

deploy:
  type: git
  repo: root@118.25.104.199:/usr/local/xiaolitBlogRepo/hexo
  branch: master

修改完毕后,终端进入本地hexo

cd ~/hexoBlog/
hexo clean

然后构建并提交:

hexo g
hexo d

叮!搞定~

四、相关服务搞起来

1. 域名备案

自己单独对域名备案是很痛苦的事,手续繁多,而且非常耗时。索性购买了腾讯云、阿里云的服务器后可以使用对应提供的备案服务,方便了许多,而且备案小程序于2018年7月6日正式推出微信小程序备案,免去幕布照片流程,号称可以缩短用户备案流程5 - 7天,酷。
通过小程序进行首次备案

域名通过后进行公安备案。公安备案最详细教程

2. 图床

既然服务器都有了,那么就可以顺势搞一系列相关的事情了,比如说图床。
最早使用的是七牛云,后来因为七牛云对象存储也开始面临备案问题,就放弃了。后使用微博匿名图床,不过图片的安全性始终没有保障,现在终于有了自己的服务器,就可以给图片安个家了。
路程就不说了,对象存储简单的很,聊一些注意事项。

(1) 防盗链

这个可以说是必不可少的操作了。
腾讯云提供了白名单、黑名单,操作简单方面。
为了浏览方便可以打开 允许空 referer 开关。这样就可以在本地博客看到图片效果,也能防止其他网站盗链,还可以配合黑名单使用。
设置防盗链

(2) 配套软件

上传图片一定要爽,“嗖”的一声搞定。好多类似脚本的js,还得终端运行,不像GUI那么直观。
最终落到iPicPicGo,两个都用了一阵进行对比:PicGo 2.0.4iPic 1.6.6

功能上来说:
iPic近两年抛弃了开源,只在appstore更新,默认只能使用匿名微博图床,开通高级订阅,目前为每年60元,可以解锁一些图床配置。

反观PicGo,不仅开源而且鼓励大家在PicGo上再创作,很多自定义更多功能的插件应运而生,功能不仅强大而且用起来非常方便。目前免费,并且支持更多的图床配置和插件扩展更多配置。

文档方上来说:
iPic只写了篇类似功能介绍文。
反观PicGo指南写的非常详尽,每个操作过程都图文并茂。

使用操作,其实两个软件并无明显差异,操作方式和码字过程流畅度相似。不过嘛,PicGo开源、免费万岁。

3. HTTPS

(1) 手动安装HTTPS证书

MAC下强大的SSH客户端
非常好用的FinalShell,操作非常简易。

上传证书
申请SSL证书
下载申请好的免费SSL证书,文件里一般有很多种,因为我使用的是Nginx,所以直接用对于Nginx中使用的1_www.domain.com_bundle.crt 证书文件和 2_www.domain.com.key 私钥文件拷贝到 Nginx 服务器所在的****/nginx/目录下。

更新 Nginx 根目录下的 nginx.conf 文件。修改内容如下

server {
     #SSL 访问端口号为 443
     listen 443;
     #填写绑定证书的域名
     server_name www.domain.com; 
     ssl on;
     #证书文件名称
     ssl_certificate 1_www.domain.com_bundle.crt;
     #私钥文件名称
     ssl_certificate_key 2_www.domain.com.key;
     ssl_session_timeout 5m;
     #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
     ssl_prefer_server_ciphers on;
     location / {
        #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
        root  /usr/local/xiaolitHexo/;
     }
 }

检查配置是否正确:

nginx –t

没问题重启nginx服务:

systemctl restart nginx 

(2) 使用全站加密,HTTP 自动跳转 HTTPS

通过使用Nginxrewrite功能,将HTTP重定向到HTTPS
在之前的HTTP服务中加入rewrite ^(.*) https://$host$1 permanent;

 server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  www.xiaolit.com;

        rewrite ^(.*) https://$host$1 permanent;#后添加的

腾讯云安装证书

(3) 给域名配置上证书

linux常用快捷键:

Ctrl+a   Ctrl+e     
分别代表把管标移动到最前和最后

Ctrl+u   Ctrl+k     
分别代表光标处往前和光标处往后删除

Ctrl+l      
清屏

Ctrl + c
终止当前进程

Ctrl + z
将正在运行的程序送到后台

命令详情

mkdir xxx
创建xxx的目录

chmod 775 -R /usr/local/hexo/
chmod命令用于改变linux系统文件或目录的访问权限。
775 这三个数字代表拥有者,组用户,其他用户的权限。
例如:
7 拥有者有 读取,写入,执行权限
7 组用户有 读取,写入,执行权限
5 其他用户有 读取,执行权限(4+1 = 5)

systemctl start
从CentOS 7.x开始,CentOS开始使用systemd服务来代替daemon,
原来管理系统启动和管理系统服务的相关命令全部由systemctl命令来代替。

systemctl restart nginx 
重启 Nginx 服务。

systemctl reload nginx  
重新载入 Nginx 服务。

git init --bare 
创建git裸库,一般用于在服务器或者工程目录以外路径都可以创建的备份仓库,被push的git。

chmod +x ; chmod -x
修改文件为可执行文件;去掉文件的可执行性。

ssh root@118.25.104.199  
控制台连接远程主机(也可以用于密码登录)

Reference

利用云服务器搭架Hexo个人博客

【腾讯云的1001种玩法】Hello Hexo之静态博客搭建+自动部署

CentOS7中systemctl的使用与CentOS6中service的区别

每天一个linux命令目录