Hexo + Nginx 服务器部署踩坑记录

翻阅了好几篇文章, 步骤可以说是非常详细, 但仍踩了好多坑, 知其云不知所以云是问题出现的关键, 所以便有了这篇详细的注释文章( ̄︶ ̄)↗ 

0%

Hexo 部署方式有很多, 这里选择是默认的 Git 一键部署方式.
前提条件: 搭建好的 Hexo 本地环境, 具有公网IP的服务器, 具备ssh知识.

相关资料

  • 官方文档 (用处较小)
  • 部署插件 (自定义配置会用到)

服务器环境准备

安装 git 和 Nginx

  • git
    用来接收你的网站文件推送的,是实现一键部署的关键。

  • Nginx
    一款反向代理网页服务器,让你的网站得以被外部访问的关键。

# Ubuntu
apt install git nginx

# CentOS
yum install -y git nginx

创建一个 git 用户(可选)

创建专门用来管理Git仓库的用户,主要是为了权限管理,可参考官方文档

adduser git

启用git shell(可选)

查看git-shell是否存在

cat /etc/shells

不存在则添加

# 查看git-shell路径 默认:/usr/bin/git-shell
which git-shell
# 把路径添加到shells文件里
sudo vim /etc/shells

修改git用户默认shell

sudo chsh git -s $(which git-shell)

测试ssh连接,登录不成功即配置ok

ssh git@<IP地址>

配置ssh公钥

用户目录下创建 .ssh 文件夹并设置权限为 700

# 使用git用户需要进行切换
su git

mkdir ~/.ssh && chmod 700 ~/.ssh

创建 authorized_keys 文件, 将本机公钥复制到里面.

vim ~/.ssh/authorized_keys

修改权限

chmod 600 ~/.ssh/authorized_keys

创建相关目录

创建存放Blog的git仓库

mkdir /var/repo && cd /var/repo
git init --bare blog.git

创建存放网站静态文件的目录

mkdir /var/www/hexo

设置目录权限

chown -R git:git /var/www/hexo
chmod -R 755 /var/www/hexo

PS:仓库名blog.git、静态文件目录hoxo可自定义

添加post-receive钩子

官方参考文档 -> 🚪

在仓库下的 hooks 目录创建 post-receive 文件

vim /var/repo/blog.git/hooks/post-receive

添加以下内容, 这个钩子会在你本地更新推送到服务器完成后执行, 更新你的网站内容。

#!/bin/bash
git --work-tree=/var/www/hexo --git-dir=/var/repo/blog.git checkout -f

配置权限

cd /var/repo/blog.git/hooks/
chown -R git:git /var/repo/
chown -R git:git /var/www/hexo
chmod +x post-receive

检测仓库是否配置成功

能成功克隆则代表配置正确

git clone <使用的用户名>@<你的服务器IP>:/var/repo/blog.git

# 例子
git clone git@8.8.8.8:/var/repo/blog.git

配置Nginx

这里修改下Nginx的默认站点配置

cd /etc/nginx/
vim sites-enabled/default

里面长这样 ↓

这里修改root网站根目录就行了,其它可以保持不动

root /var/www/hexo;

可选配置

server_name _; 一行表示全匹配,只要访问服务器,都会直接转发到当前server下,有域名后可以设置为域名,然后配置不允许ip访问,这样可以避免其他人把未备案的域名解析到自己的服务器 IP,而导致服务器被断网。(如果你没备案就解析域名了,那现在就该知道服务器登不了的原因了🤣)

// 注意:以下内容可以在default文件中修改,不过推荐先了解Nginx然后再配置为妙。

http {
// 新增server,设置不允许Ip访问web(default_server)
server {
listen 80 default_server;
server_name _;
return 403;
}

// 原有default,设置www.you.com域名访问web
server {
listen 80;
server_name www.you.com;
}

// 新增server,设置顶级域名you.com重定向
server {
listen 80;
server_name you.com;
return 301 http://www.you.com$request_uri;
}
}

检查配置然后重载Nginx

nginx -t	# 检查配置
nginx -s reload # 重载配置

本地部署配置

部署插件项目 -> 🚪

修改站点目录下_config.yml文件

单个存储部署配置

deploy:
type: git
repo: git@x.x.x.x:/var/repo/blog.git

多个存储库部署配置(可选)

这里同时对github和服务器进行同步,可以用来应付一些特殊情况,比如:服务器挂了、封了什么的。

deploy:
type: git
repo:
server: # 名称可自定义
url: git@x.x.x.x:/var/repo/blog.git
branch: master
git:
url: git@github.com:owq/owq.github.io.git
branch: main

部署到服务器

本地操作

# 清除缓存
hexo clean

# 一键部署
hexo g -d

浏览器输入服务器IP,能正常访问就成功了

------------ 已触及底线了 感谢您的阅读 ------------
  • 本文作者: OWQ
  • 本文链接: https://www.owq.world/e823826f/
  • 版权声明: 本站所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处( ̄︶ ̄)↗