Hexo博客部署到腾讯云服务器全过程(Nginx,证书,HTTPS),你要的这里都有

背景

说来也惭愧,博客已经搭建很久了,一直免费的部署在 Coding 和 Github Pages 上,前者迁移到腾讯云 Serverless,导致原有的配置始终有问题,没时间仔细研究,刚好腾讯服务器有羊毛可以褥,果断作出迁移,至于选择腾讯云,是因为当初备案在腾讯云,但是购买域名是在阿里,感觉好拧巴,但是整体互不相关,没啥影响

部署环境

环境
本地环境 MacOS Monterey 12.0.1
服务器环境 CentOS Linux release 8.2.2004 (Core)

本地环境配置

hexo 本地搭建过程网上太多了,这里不再赘述,这里只是做一点链接服务器的准备工作

生成 Git 密钥

ssh-keygen -C "your@mail.com"

一路回车,这时你应该可以在 ~/.ssh/ 目录下看到两个刚刚生成好的密钥文件:

  1. 公钥:id_rsa.pub
  2. 私钥:id_rsa

我们一会需要把公钥的内容拷贝到服务器上

服务器环境配置

服务器非常纯净,什么也没有,所以我们要一点点安装我们所需的内容

  • Git
  • Nginx

强烈建议你重置腾讯云服务器的默认密码, 再进行下面操作

Git 安装和配置

安装

切换到 root 用户(输入你刚刚重置的密码就好)

su root

首先需要安装包的依赖

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install  gcc perl-ExtUtils-MakeMaker

进入指定目录(这里选择 usr/local/src)选择最新版本 Git (这里使用 2.34.1)下载并解压

cd /usr/local/src
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.34.1.tar.gz
tar -zxvf git-2.19.0.tar.gz

解压出来的 Git 文件都是源文件,我们需要进行编译,进入 Git 解压目录,进行编译和安装, 安装位置(这里选择 usr/local/git), 整个过程可能需要一定等待......

cd git-2.34.1
make prefix=/usr/local/git all
make prefix=/usr/local/git install

安装好后,我们需要配置环境变量,打开环境变量配置文件:

vim /etc/profile

在文件底部添加 Git 安装目录信息,给不熟悉 Vim 的同学快速操作步骤,按照下面依次按字母就可以了(这个保姆服务有没有很到位)

G (光标快速到文件末尾)

o (添加新空白行并进入 Insert 模式)

粘贴下面内容

Esc (进入 Normal 模式)

:wq(保存并退出)

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

刷新环境变量,使之生效

source /etc/profile

此时 Git 应该已经安装完成,可以查看 Git 版本号是否和你指定的版本一样:

git --version

Git 新用户与配置

创建 git 用户和密码

adduser git
passwd git

将 git 用户添加到 sudoers 文件中, 同样给出 Vim 快捷操作

chmod 740 /etc/sudoers
vim /etc/sudoers

/## Allow

这样可以快速定位到如下位置:

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

在下面一行添加 git 用户内容, 保存并退出

git      ALL=(ALL)       ALL

修改回 sudoers 文件权限

chmod 400 /etc/sudoers

测试

将上面本地生成的 id_rsa.pub 公钥内容拷贝到远端服务器, 这个命令会默认在远端服务器 git 用户主目录下生成 authorized_keys 文件 (~/.ssh/authorized_keys), 其中 server_ip 为公网 IP,不是内部 IP,别拷贝错了

ssh-copy-id -i ~/.ssh/id_rsa.pub git@server_ip

此时可以通过 ssh 命令(加上 -v 命令,可以输出详细 log)测试连接

ssh -v git@server_ip

博客网站目录配置

创建博客网站目录位置

同样切换到 root 目录,然后为博客网站创建根目录(这里选择 /home/hexo

su root
mkdir /home/hexo

赋予 git 用户权限

chown git:git -R /home/hexo

自动化配置

指定目录位置(这里选择 git 用户主目录 /home/git)创建一个名为 blog.gitbare repo

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

什么是 bare repo,以及 bare repo 的一些高级使用,可以看下面这三篇文章,下面的一些细节只是不做过多介绍

  1. Git Worktree 大法真香
  2. Git Worktree 高级使用
  3. 一键生成Git Worktree 工作目录

同样赋予 git 用户相应权限

chown git:git -R blog.git

使用自动化配置,自然是要用到 Git 的钩子函数,这里我们需要 post-receive,在博客 hooks 目录下新建该文件:

vim blog.git/hooks/post-receive

然后添加如下内容(注意目录匹配),保存并退出:

#!/bin/sh
git --work-tree=/home/hexo --git-dir=/home/git/blog.git checkout -f

最后,赋予这个文件可执行权限

chmod +x /home/git/blog.git/hooks/post-receive

接下来,创建个链接,以防后续 deploy 过程出错

sudo ln -s /usr/local/git/bin/git-receive-pack  /usr/bin/git-receive-pack

至此,基本的准备工作就完成了,接下来我们需要处理 Nginx 的内容

Nginx 安装和配置

安装

同样切换到 root 用户,然后安装 nginx,并最终启动

su root
yum install -y nginx
systemctl start nginx.service

这时,在浏览器中输入公网 IP 地址,应该可以看到 Nginx 默认的欢迎界面

配置

这里配置 Nginx,将所有 Http 请求都重定向为 Https 请求,这就需要我们有 SSL 证书,证书可以在云服务器上申请,并下载相应的版本(这里选择 Nginx 证书),下载后解压,以我的证书为例:

.
├── 6317712_www.dayarch.top.key
└── 6317712_www.dayarch.top.pem

0 directories, 2 files

通过 scp 命令将上述证书拷贝到远端服务器, 正常应该将 Nginx 的证书存放在 /etc/nginx/cert 目录下,这里选择存放在 /home/ssl_cert 下(如果目录不存在,请自行创建)

scp ~/Downloads/6317712_www.dayarch.top_nginx/6317712_www.dayarch.top.key root@server_ip:/home/ssl_cert
scp ~/Downloads/6317712_www.dayarch.top_nginx/6317712_www.dayarch.top.pem root@server_ip:/home/ssl_cert

然后打开 Nginx 的配置文件进行整体配置

server{
    listen 80;
    server_name dayarch.top; # 个人域名
    rewrite ^(.*)$ https://$server_name$1 permanent; # 重定向
}

server {
    listen 443; 
    server_name dayarch.top;  # 个人域名
    ssl on; 
    ssl_certificate      /home/ssl_cert/6317712_www.dayarch.top.pem; # .pem 证书
    ssl_certificate_key  /home/ssl_cert/6317712_www.dayarch.top.key; # .key 证书
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers  on;

    location / {
        root   /home/hexo;  # 博客网站主目录
        index index.php  index.html index.htm; 
    }

    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

通过 nginx -t 命令进行检查,一切正常会输出如下结果:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重启 Nginx 服务

systemctl restart nginx.service

至此,所有的准备工作都做完了,接下来,我们需要做一些博客配置

本地博客配置修改

我们需要将远端服务器的 Git 仓库信息配置到 Hexo 站点配置文件(_config.yml)中

deploy:
  - type: git
    repo: git@server_ip:/home/git/blog.git
    branch: master

陆续执行 hexo 的命令进行部署

hexo clean
hexo generate
hexo deploy

至此,距离成功,我们只差最后一步

域名解析

登陆到你购买域名服务器(比如我在阿里云),配置域名解析,将其指向我们服务器的公网地址:

验证

接下来,你可以在浏览器中输入域名,进行验证,享受你的成果吧
个人博客:https://dayarch.top

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容