Hexo博客部署vps教程

Hexo博客部署vps教程
DreamCollector由于近期网站域名被墙无法访问,就干脆也整理一份教程出来,帮大家少走弯路,以下教程均在阿里云服务器
docker中部署,无需docker部署的也可参考Heo作者的Hexo博客部署到VPS教程,也蛮详细的
一、部署方案
整个Hexo部署VPS流程:
方案一:
将 Hexo 项目上传到 VPS 上面后执行
hexo server,之后配置Nginx反向代理,让域名指向http://localhost:4000方案二:
将 Hexo 在本地通过
hexo generate生成静态文件,在通过hexo deploy部署到 VPS 上面,使用Nginx直接做 Web 服务器对比:
相比两种方案,方案一每次写博客与更新博客时候的操作会很繁琐。所以我们使用方案二进行部署,这样既可以将静态文件 deploy 到 VPS 上,也可以上传到 Github 上用作备份,操作性和安全性上都要胜于前者,而对于方案二常用的又有
git hook和rsync两种自动部署解决方案,本文主要介绍git hook部署过程
| 自动部署方案 | 优点 | 缺点 |
|---|---|---|
| git hook | 集成在Git版本控制流程中,无需额外配置。 可以执行更复杂的自定义脚本,例如运行测试、代码质量检查等 | 依赖于Git版本控制,不适合非Git环境。 可能需要编写更多的自定义脚本来实现复杂的部署流程 |
| rsync | 可以在任何环境下工作,不限于版本控制系统。 可以同步整个目录或特定文件,简单易用。 可以使用ssh等安全方式进行同步,传输安全 | 不能直接集成到Git提交流程中,需要额外的触发机制。 可能不适合需要版本控制的场景,如代码部署。 |
Tips:如果你需要的是一个紧密集成到Git流程中的自动化部署解决方案,Git hooks可能更适合。如果你只是想简单地同步文件,rsync可能是更好的选择
二、Git Hooks 自动部署
部署原理:我们在本地编辑文本,然后使用 Git 远程部署到 VPS 的 Git 仓库。
hexo d命令实际上只 deploy 了本地的 public 文件夹,Git Hooks实际上就是当 Git 仓库收到最新的 push 时,将 Git 仓库接受到的内容复制到 VPS 上的网站目录内。相当于完成了手动将 public 文件夹复制到 VPS 的网站根目录里
1. 安装并配置Git
安装
Git并新增用户1
2
3
4
5
6
7
8
9# 1.安装git
yum install git
# 2.查看Git版本,若显示则说明安装成功
git --version
# 3.创建`git`用户
adduser git
# 4.为`git`用户新增密码(可选)
passwd git给予新建用户权限
1
2
3
4
5
6
7
8
9
10
11# 1.赋予权限并用vim编辑文件
chmod 740 /etc/sudoers
vim /etc/sudoers
# 2.找到`sudoers`文件中的root下方添加`git ALL=(ALL) ALL`
root ALL=(ALL) ALL
+ git ALL=(ALL) ALL
# 3.保存后,修改回文件权限
chmod 440 /etc/sudoers关闭git用户shell权限
由于目前git用户可以通过ssh连接服务器进行各种操作,为了安全我们只需要让其能对仓库操作就可以了,不需要更大的权限,
git-shell可以让git用户每次一登录就自动退出1
2
3
4
5
6# 1.用vim编辑文件
vim /etc/passwd
# 2.找到`passwd`文件中的`/bin/bash`替换成`/usr/bin/git-shel`
git:x:1000:1000::/home/git:/usr/bin/git-shel
2. 初始化Git仓库
1 | # 1.切换到git用户目录 |
3. 配置SSH
新增ssh连接密钥
1
2
3
4
5
6
7
8# 1.切换到git用户目录
cd /home/git
# 2.创建.ssh目录
mkdir .ssh
# 3.切换到ssh目录
cd .ssh
# 4.修改`authorized_keys`文件,将本地`id_rsa.pub`公钥内容加入
vim authorized_keys修改用户组权限
1
2
3
4
5
6
7# 1.修改用户组权限为`git:git`,命令:`chown -R 用户名.组名 /目录`
chown -R git.git /home/git/blog.git/
chown -R git.git /home/git/.ssh/
chown -R git.git /var/www/blog/
# 2.查看是否修改成功,确保以下目录的用户组权限为`git:git`
ll /home/git/
ll /var/www/
三、安装SafeLine
SafeLine,中文名 “雷池”,是一款简单好用, 效果突出的
Web 应用防火墙(WAF),可以保护 Web 服务不受黑客攻击。雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受SQL 注入、XSS、代码注入、命令注入、CRLF 注入、ldap 注入、xpath 注入、RCE、XXE、SSRF、路径遍历、后门、暴力破解、CC、爬虫等攻击,也可参考官方安装教程
1. 自动安装
1 | # 以root权限执行在线安装,里面也可以自动安装上docker |
2. 替换docker镜像源
由于国内docker源可能无法下载镜像,可以替换
/etc/docker/daemon.json中的镜像源,参考如下
1 | { |
3. 初始化管理员账户
1 | # 首次登录初始化你的管理员账户 |
4. 访问SafeLine
雷池安装成功以后,你可以打开浏览器访问
https://<safeline-ip>:9443/来使用雷池控制台,Tips:需要注意对9443的端口打开访问
5. 新增站点
四、安装Nginx
1. 安装镜像
1 | # 1.拉取Nginx官方镜像 |
2. 创建挂载目录
以下都是为了方便docker中启动nginx时通过自定义的配置文件路径去加载
1 | mkdir -p /home/nginx/conf |
3. 拷贝配置文件到宿主机
1 | docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/ |
4. 删除临时Nginx容器
1 | docker stop nginx |
5. 重建Nginx容器
1 | # 以自定配置路径的方式启动Nginx容器 |
6. 修改Nginx的配置
重点是以下的原Nginx的80端口需要换成8080,通过8080端口启动nginx,我这目前项目暂时只有一个就直接用8080放博客项目了,若有多个项目需要另外转发至对应端口
7. 重启Nginx
1 | # 1.查看运行的容器 |
五、配置Hexo
1 | # 替换博客配置`_config.yml`的下方repo地址,`<IP>`替换为自己的IP |
六、部署架构
SafeLine其实应该单独部署一台新的服务器作为网关,这里考虑到成本就都放在了同一台服务器,若服务器还有其他项目可以考虑用Nginx转发到对应项目端口,并在SafeLine中新增站点即可







