Hexo博客部署到腾讯云服务器全过程
<p><img title="Hexo博客部署到腾讯云服务器全过程" alt="Hexo博客部署到腾讯云服务器全过程" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/07c1750c4616413569aff8a01823dc18.jpg" width="auto"></p>
<h3>
背景</h3>
<p>
说来也惭愧,博客已经搭建很久了,一直免费的部署在 Coding 和 Github Pages 上,前者迁移到腾讯云 Serverless,导致原有的配置始终有问题,没时间仔细研究,刚好腾讯服务器有羊毛可以褥,果断作出迁移,至于选择腾讯云,是因为当初备案在腾讯云,但是购买域名是在阿里,感觉好拧巴,但是整体互不相关,没啥影响。</p>
<h3>
部署环境</h3>
<table style='margin: 0px 0px 10px; padding: 0px; outline: 0px; border-collapse: collapse; width: 359px; max-width: 100%; color: rgb(51, 51, 51); font-family: -apple-system, system-ui, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif; font-size: 16px; box-sizing: border-box !important; overflow-wrap: break-word !important;'>
<thead><tr>
<th>
环境</th>
<th>
</th>
</tr></thead>
<tbody>
<tr>
<td>
本地环境</td>
<td>
MacOS Monterey 12.0.1</td>
</tr>
<tr>
<td>
服务器环境</td>
<td>
CentOS Linux release 8.2.2004 (Core)</td>
</tr>
</tbody>
</table>
<h3>
本地环境配置</h3>
<p>
hexo 本地搭建过程网上太多了,这里不再赘述,这里只是做一点链接服务器的准备工作</p>
<p>
<strong>生成 Git 密钥</strong></p>
<ol class="dp-sql">
<li class="alt">
<span><span>ssh-keygen -C </span><span class="string">"your@mail.com"</span><span> </span></span>
</li>
</ol>
<p>
一路回车,这时你应该可以在 ~/.ssh/ 目录下看到两个刚刚生成好的密钥文件:</p>
<ul>
<li>
公钥:id_rsa.pub</li>
<li>
私钥:id_rsa</li>
</ul>
<p>
我们一会需要把公钥的内容拷贝到服务器上</p>
<h3>
服务器环境配置</h3>
<p>
服务器非常纯净,什么也没有,所以我们要一点点安装我们所需的内容</p>
<ul>
<li>
Git</li>
<li>
Nginx</li>
</ul>
<p>
强烈建议你重置腾讯云服务器的默认密码, 再进行下面操作</p>
<p>
<strong>Git 安装和配置</strong></p>
<h3>
安装</h3>
<p>
切换到 root 用户(输入你刚刚重置的密码就好)</p>
<ol class="dp-sql">
<li class="alt">
<span><span>su root </span></span>
</li>
</ol>
<p>
首先需要安装包的依赖</p>
<ol class="dp-sql">
<li class="alt">
<span><span>yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel </span></span>
</li>
<li>
<span>yum install gcc perl-ExtUtils-MakeMaker </span>
</li>
</ol>
<p>
进入指定目录(这里选择 usr/local/src)选择最新版本 Git (这里使用 2.34.1)下载并解压</p>
<ol class="dp-sql">
<li class="alt">
<span><span>cd /usr/</span><span class="keyword">local</span><span>/src </span></span>
</li>
<li>
<span>wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.34.1.tar.gz </span>
</li>
<li class="alt">
<span>tar -zxvf git-2.19.0.tar.gz </span>
</li>
</ol>
<p>
解压出来的 Git 文件都是源文件,我们需要进行编译,进入 Git 解压目录,进行编译和安装, 安装位置(这里选择 usr/local/git), 整个过程可能需要一定等待......</p>
<ol class="dp-sql">
<li class="alt">
<span><span>cd git-2.34.1 </span></span>
</li>
<li>
<span>make prefix=/usr/<span class="keyword">local</span><span>/git </span><span class="op">all</span><span> </span></span>
</li>
<li class="alt">
<span>make prefix=/usr/<span class="keyword">local</span><span>/git install </span></span>
</li>
</ol>
<p>
安装好后,我们需要配置环境变量,打开环境变量配置文件:</p>
<ol class="dp-sql">
<li class="alt">
<span><span>vim /etc/profile </span></span>
</li>
</ol>
<p>
在文件底部添加 Git 安装目录信息,给不熟悉 Vim 的同学快速操作步骤,按照下面依次按字母就可以了(这个保姆服务有没有很到位)</p>
<p>
G (光标快速到文件末尾)</p>
<p>
o (添加新空白行并进入 Insert 模式)</p>
<p>
粘贴下面内容</p>
<p>
Esc (进入 Normal 模式)</p>
<p>
:wq(保存并退出)</p>
<ol class="dp-sql">
<li class="alt">
<span><span>PATH=$PATH:/usr/</span><span class="keyword">local</span><span>/git/bin </span></span>
</li>
<li>
<span>export PATH </span>
</li>
</ol>
<p>
刷新环境变量,使之生效</p>
<ol class="dp-sql">
<li class="alt">
<span><span>source /etc/profile </span></span>
</li>
</ol>
<p>
此时 Git 应该已经安装完成,可以查看 Git 版本号是否和你指定的版本一样:</p>
<ol class="dp-sql">
<li class="alt">
<span><span>git </span><span class="comment">--version</span><span> </span></span>
</li>
</ol>
<p>
<strong>Git 新用户与配置</strong></p>
<p>
创建 git 用户和密码</p>
<ol class="dp-sql">
<li class="alt">
<span><span>adduser git </span></span>
</li>
<li>
<span>passwd git </span>
</li>
</ol>
<p>
将 git 用户添加到 sudoers 文件中, 同样给出 Vim 快捷操作</p>
<ol class="dp-sql">
<li class="alt">
<span><span>chmod 740 /etc/sudoers </span></span>
</li>
<li>
<span>vim /etc/sudoers </span>
</li>
</ol>
<p>
/## Allow</p>
<p>
这样可以快速定位到如下位置:</p>
<ol class="dp-sql">
<li class="alt">
<span><span>## Allow root </span><span class="keyword">to</span><span> run </span><span class="op">any</span><span> commands anywhere </span></span>
</li>
<li>
<span>root <span class="op">ALL</span><span>=(</span><span class="op">ALL</span><span>) </span><span class="op">ALL</span><span> </span></span>
</li>
</ol>
<p>
在下面一行添加 git 用户内容, 保存并退出</p>
<ol class="dp-sql">
<li class="alt">
<span><span>git </span><span class="op">ALL</span><span>=(</span><span class="op">ALL</span><span>) </span><span class="op">ALL</span><span> </span></span>
</li>
</ol>
<p>
修改回 sudoers 文件权限</p>
<ol class="dp-sql">
<li class="alt">
<span><span>chmod 400 /etc/sudoers </span></span>
</li>
</ol>
<p>
<strong>测试</strong></p>
<p>
将上面本地生成的 id_rsa.pub 公钥内容拷贝到远端服务器, 这个命令会默认在远端服务器 git 用户主目录下生成 authorized_keys 文件 (~/.ssh/authorized_keys), 其中 server_ip 为公网 IP,不是内部 IP,别拷贝错了</p>
<ol class="dp-sql">
<li class="alt">
<span><span>ssh-copy-id -i ~/.ssh/id_rsa.pub git@server_ip </span></span>
</li>
</ol>
<p>
此时可以通过 ssh 命令(加上 -v 命令,可以输出详细 log)测试连接,没问题就可以进行下一步了</p>
<ol class="dp-sql">
<li class="alt">
<span><span>ssh -v git@server_ip </span></span>
</li>
</ol>
<p>
<strong>博客网站目录配置</strong></p>
<h3>
创建博客网站目录位置</h3>
<p>
同样切换到 root 目录,然后为博客网站创建根目录(这里选择 /home/hexo)</p>
<ol class="dp-sql">
<li class="alt">
<span><span>su root </span></span>
</li>
<li>
<span>mkdir /home/hexo </span>
</li>
</ol>
<p>
赋予 git 用户权限</p>
<ol class="dp-sql">
<li class="alt">
<span><span>chown git:git -R /home/hexo </span></span>
</li>
</ol>
<h3>
自动化配置</h3>
<p>
指定目录位置(这里选择 git 用户主目录 /home/git)创建一个名为 blog.git 的 bare repo</p>
<ol class="dp-sql">
<li class="alt">
<span><span>cd /home/git </span></span>
</li>
<li>
<span>git init <span class="comment">--bare blog.git</span><span> </span></span>
</li>
</ol>
<p>
什么是 bare repo,以及 bare repo 的一些高级使用,可以看下面这三篇文章,下面的一些细节只是不做过多介绍</p>
<ul>
<li>
Git Worktree 大法真香</li>
<li>
Git Worktree 高级使用</li>
</ul>
<p>
一键生成Git Worktree 工作目录</p>
<p>
同样赋予 git 用户相应权限</p>
<ol class="dp-sql">
<li class="alt">
<span><span>chown git:git -R blog.git </span></span>
</li>
</ol>
<p>
使用自动化配置,自然是要用到 Git 的钩子函数,这里我们需要 post-receive,在博客 hooks 目录下新建该文件:</p>
<ol class="dp-sql">
<li class="alt">
<span><span>vim blog.git/hooks/post-receive </span></span>
</li>
</ol>
<p>
然后添加如下内容(注意目录匹配),保存并退出:</p>
<ol class="dp-sql">
<li class="alt">
<span><span>#!/bin/sh </span></span>
</li>
<li>
<span>git <span class="comment">--work-tree=/home/hexo --git-dir=/home/git/blog.git checkout -f</span><span> </span></span>
</li>
</ol>
<p>
最后,赋予这个文件可执行权限</p>
<ol class="dp-sql">
<li class="alt">
<span><span>chmod +x /home/git/blog.git/hooks/post-receive </span></span>
</li>
</ol>
<p>
接下来,创建个链接,以防后续 deploy 过程出错</p>
<ol class="dp-sql">
<li class="alt">
<span><span>sudo ln -s /usr/</span><span class="keyword">local</span><span>/git/bin/git-receive-pack /usr/bin/git-receive-pack </span></span>
</li>
</ol>
<p>
至此,基本的准备工作就完成了,接下来我们需要处理 Nginx 的内容</p>
<p>
<strong>Nginx 安装和配置</strong></p>
<p>
<strong>安装</strong></p>
<p>
同样切换到 root 用户,然后安装 nginx,并最终启动</p>
<ol class="dp-sql">
<li class="alt">
<span><span>su root </span></span>
</li>
<li>
<span>yum install -y nginx </span>
</li>
<li class="alt">
<span>systemctl start nginx.service </span>
</li>
</ol>
<p>
这时,在浏览器中输入公网 IP 地址,应该可以看到 Nginx 默认的欢迎界面</p>
<p>
<strong>配置</strong></p>
<p>
这里配置 Nginx,将所有 Http 请求都重定向为 Https 请求,这就需要我们有 SSL 证书,证书可以在云服务器上申请,并下载相应的版本(这里选择 Nginx 证书),下载后解压,以我的证书为例:</p>
<ol class="dp-sql">
<li class="alt">
<span><span>. </span></span>
</li>
<li>
<span>├── 6317712_www.dayarch.<span class="keyword">top</span><span>.</span><span class="keyword">key</span><span> </span></span>
</li>
<li class="alt">
<span>└── 6317712_www.dayarch.<span class="keyword">top</span><span>.pem </span></span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span>0 directories, 2 files </span>
</li>
</ol>
<p>
通过 scp 命令将上述证书拷贝到远端服务器, 正常应该将 Nginx 的证书存放在 /etc/nginx/cert 目录下,这里选择存放在 /home/ssl_cert 下(如果目录不存在,请自行创建)</p>
<ol class="dp-sql">
<li class="alt">
<span><span>scp ~/Downloads/6317712_www.dayarch.top_nginx/6317712_www.dayarch.</span><span class="keyword">top</span><span>.</span><span class="keyword">key</span><span> root@server_ip:/home/ssl_cert </span></span>
</li>
<li>
<span>scp ~/Downloads/6317712_www.dayarch.top_nginx/6317712_www.dayarch.<span class="keyword">top</span><span>.pem root@server_ip:/home/ssl_cert </span></span>
</li>
</ol>
<p>
然后打开 Nginx 的配置文件进行整体配置</p>
<ol class="dp-sql">
<li class="alt">
<span><span>server{ </span></span>
</li>
<li>
<span> listen 80; </span>
</li>
<li class="alt">
<span> server_name dayarch.<span class="keyword">top</span><span>; # 个人域名 </span></span>
</li>
<li>
<span> rewrite ^(.*)$ https://$server_name$1 permanent; # 重定向 </span>
</li>
<li class="alt">
<span>} </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span>server { </span>
</li>
<li>
<span> listen 443; </span>
</li>
<li class="alt">
<span> server_name dayarch.<span class="keyword">top</span><span>; # 个人域名 </span></span>
</li>
<li>
<span> ssl <span class="keyword">on</span><span>; </span></span>
</li>
<li class="alt">
<span> ssl_certificate /home/ssl_cert/6317712_www.dayarch.<span class="keyword">top</span><span>.pem; # .pem 证书 </span></span>
</li>
<li>
<span> ssl_certificate_key /home/ssl_cert/6317712_www.dayarch.<span class="keyword">top</span><span>.</span><span class="keyword">key</span><span>; # .</span><span class="keyword">key</span><span> 证书 </span></span>
</li>
<li class="alt">
<span> ssl_session_cache shared:SSL:1m; </span>
</li>
<li>
<span> ssl_session_timeout 5m; </span>
</li>
<li class="alt">
<span> ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!<span class="op">NULL</span><span>:!aNULL:!MD5:!ADH:!RC4; </span></span>
</li>
<li>
<span> ssl_protocols TLSv1 TLSv1.1 TLSv1.2; </span>
</li>
<li class="alt">
<span> ssl_prefer_server_ciphers <span class="keyword">on</span><span>; </span></span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span> location / { </span>
</li>
<li>
<span> root /home/hexo; # 博客网站主目录 </span>
</li>
<li class="alt">
<span> <span class="keyword">index</span><span> </span><span class="keyword">index</span><span>.php </span><span class="keyword">index</span><span>.html </span><span class="keyword">index</span><span>.htm; </span></span>
</li>
<li>
<span> } </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span> error_page 404 /404.html; </span>
</li>
<li class="alt">
<span> location = /404.html { </span>
</li>
<li>
<span> root /usr/share/nginx/html; </span>
</li>
<li class="alt">
<span> } </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span> error_page 500 502 503 504 /50x.html; </span>
</li>
<li>
<span> location = /50x.html { </span>
</li>
<li class="alt">
<span> root /usr/share/nginx/html; </span>
</li>
<li>
<span> } </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
通过 nginx -t 命令进行检查,一切正常会输出如下结果:</p>
<ol class="dp-sql">
<li class="alt">
<span><span>nginx: the configuration file /etc/nginx/nginx.conf syntax </span><span class="keyword">is</span><span> ok </span></span>
</li>
<li>
<span>nginx: configuration file /etc/nginx/nginx.conf test <span class="keyword">is</span><span> successful </span></span>
</li>
</ol>
<h3>
重启 Nginx 服务</h3>
<ol class="dp-sql">
<li class="alt">
<span><span>systemctl restart nginx.service </span></span>
</li>
</ol>
<p>
至此,所有的准备工作都做完了,接下来,我们需要做一些博客配置</p>
<h3>
本地博客配置修改</h3>
<p>
我们需要将远端服务器的 Git 仓库信息配置到 Hexo 站点配置文件(_config.yml)中</p>
<ol class="dp-sql">
<li class="alt">
<span><span>deploy: </span></span>
</li>
<li>
<span> - type: git </span>
</li>
<li class="alt">
<span> repo: git@server_ip:/home/git/blog.git </span>
</li>
<li>
<span> branch: master </span>
</li>
</ol>
<p>
陆续执行 hexo 的命令进行部署</p>
<ol class="dp-sql">
<li class="alt">
<span><span>hexo clean </span></span>
</li>
<li>
<span>hexo generate </span>
</li>
<li class="alt">
<span>hexo deploy </span>
</li>
</ol>
<p>
至此,距离成功,我们只差最后一步</p>
<h3>
域名解析</h3>
<p>
登陆到你购买域名服务器(比如我在阿里云),配置域名解析,将其指向我们服务器的公网地址:</p>
<p>
<img title="Hexo博客部署到腾讯云服务器全过程" alt="Hexo博客部署到腾讯云服务器全过程" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/7177b14ef515e55b33ab1e652203b18a.jpg" width="auto"></p>
<h3>
验证 </h3>
<p>
接下来,你可以在浏览器中输入域名,进行验证,享受你的成果吧!</p>
<p>
原文链接:https://mp.weixin.qq.com/s/Fxou_soluTL0wYU7cCg4GQ</p>
頁:
[1]