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中新增站点即可