各种部署方式
静态博客的部署方式多种多样,免费部署资源非常多。
如果DNS支持多线路,还可以设置多路负载均衡!
注意:这些免费的部署都没法做ICP备案,或者国内CDN套着备案。不过,都免费了,你还要求那么多?
| 部署方式 | 费用 | 难易度 | 多域名 |
|---|---|---|---|
| Github | 0¥ | 简单 | 单域名 |
| VPS | 2~5$/M | 复杂 | 支持 |
| Vercel | 0¥ | 简单 | 支持 |
| Cloudflare pages | 0¥ | 简单 | 支持 |
| Gitlab | 0¥ | 简单 | 支持(?) |
Github可以通过同样代码仓库,多个仓库同时部署,不同仓库设置不同的域名来支持多域名!
Tips:
Github有每个账户1000个仓库限制,每个仓库大小超过1G,就会被人工审查!所以撸羊毛可以,注意仓库个数和大小限制!
GitHub Pages
- 速度:尚可,并不很慢,但有时候会抽风。
- 自定义域名:一个。
- 限制:
- 单个文件大于50MB将受到警告。
- 单个文件大于100MB无法上传。
- 仓库大小「强烈建议」少于1GB。
- 每小时可构建10次。
- 每月流量100GB。
详情可见:https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages#guidelines-for-using-github-pages
- 优点:简单方便
- 缺点:国内速度慢,直连CNAME会泄露GitHub用户名,免费版私有仓库无法使用
Netlify
控制台无法访问。
- 部署方式:GitHub、GitLab、BitBucket仓库自动拉取以及本地CLI直接推送。
- 速度:较GitHub Pages要快,但是稳定性差上不少,部分时候可能直接出现无法访问。
- 自定义域名:多个。
- 限制:
对于每个账户: - 同时只能构建一个站点。
- 每月流量100GB。
- 每月构建时间300分钟。
详情可见:https://www.netlify.com/pricing
- 优点:pr单独部署,速度还可以,有免费的serverless
- 缺点:直连CNAME会泄露分配域名
- 对比Vercel,Netlify在国内的速度确实要比Vercel慢很多,但前者有许多后者没有的服务或插件,比如Algolia、表单等等
Cloudflare Pages
- 部署方式:GitHub仓库。
- 速度:与GitHub Pages相似。
- 自定义域名:最多10个;
- 限制:
- 每月构可构建500次。
- 文件数量最多2w个。
- 单个文件大小不得超过25MB。
详情可见:https://developers.cloudflare.com/pages/platform/limits
Vercel
- 部署方式:与Netlify相同,支持GitHub、GitLab、BitBucket仓库自动拉取以及本地CLI直接推送。
- 速度:在所有方案中最快且最稳定。
- 自定义域名:多个。
- 限制:
- 每日可构建100次,但每小时不超过32次。
- 单个Git仓库支持连接3个Vercel项目。
- 每次构建时长最多45min。每月总计不超过100h。
- 每月带宽100次。
详情可见:https://vercel.com/docs/platform/limits
- 优点:pr单独部署,速度快,CNAME无隐私问题,有免费的serverless
- 缺点:嗯,免费的能做到这样还指望啥?
Cloudflare CDN
Cloudflare CDN本身并非博客托管服务,但是可以与上文任意一个服务进行搭配。
使用CF CDN时访问速度大多数时候较快,遇高峰期将减速。总体来说速度不如Vercel。稳定性尚可,但曾出现过无法访问的情况。
最主要的是将获得非常多的扩展功能,如HSTS、访问限制,以及HTTP/3等前沿网络技术。他们对IETF的跟进是很快的。同时还会获得DDoS清洗、网站分析等服务。
注意,套上CF CDN之后,可能访问速度会下降,例如Vercel,CF pages
最佳方法是使用Vercel+CF Partner?不过现在能用的CF Partner几乎没有了
jsDelivr CDN
- 支持 HTTPS,支持 HTTP2,提供 SRI
- 网宿、Fastly、Stackpath、Cloudflare Business Plan
- 非常丰富的国内节点
- 非常丰富的海外节点
- 全球的速度都非常优秀
cdn.jsdelivr.net,NS1 和 Rage4 主从 DNS- 便捷性:★★★★★
jsDelivr 支持从 NPM、GitHub Tag 和 WordPress SVN 上抓取文件并分发,大大降低了开发者使用的难度——直接发个 Release 就可以用了。jsDelivr 每个月会被调用上百亿次,服务 620+ TB 的流量,意味着如果你不是通过 jsDelivr 加载较为热门的库,那么缓存命中率是不会太理想的。
公用库采用jsDelivr加速,自定义修改的js,css使用自己的部署服务
VPS
一句话,VPS的超能力就是有钱。配置更好的服务器速度更快,对国内外来说,地理位置最理想的是香港VPS。当然,价格也是相当感人!
- 优点:钱越多,速度越快。自定义性最高,想做什么服务都可以
- 缺点:很花钱,网站较大时考虑这个。不够稳定,要稳定性就要多点部署,需要自己维护服务器
Hexo Docker 本地部署
在最前面的篇章介绍了Hexo Docker 环境的使用方法。具体使用方法见本文系列Hexo Docker 环境篇。
优点:本地使用可定制化成都更高
缺点:必须要有Docker 环境。异地使用麻烦,除非ssh,vpn等远程链接方法。
Hexo Docker VPS 部署
和 Hexo Docker 本地部署基本一样,最后反向代理设置域名。
具体参考 Hexo Docker 环境篇
将Hexo部署到VPS实现自动发布
搭建流程
- 服务器环境配置,安装Git、Nginx配置、创建git用户
- 本地hexo初始化
- 使用Git自动部署并发布博客
服务器环境搭建
- 安装Git和NodeJS(Centos环境)
bash
1 | yum install git |
- 创建git账号
bash
1 | adduser git |
- 添加内容
找到
bash
1 | ## Allow root to run any commands anywhere |
- 添加以下内容
bash
1 | git ALL=(ALL) ALL |
- 保存退出并改回权限
bash
1 | chmod 400 /etc/sudoers |
- 设置git账号密码
bash
1 | sudo passwd git |
- 使用
su git切换到git用户,再执行下列操作:
bash
1 | # 切换到git用户目录 |
- 然后可以通过本地Git Bash执行ssh命令测试是否可以免密登录
bash
1 | ssh -v git@服务器ip地址 |
这样git用户就添加好了。
Tips: 将公钥拷贝到服务器的~/.ssh/authorized_keys文件中方法有如下几种:
- 将公钥通过scp拷贝到服务器上,然后追加到
/.ssh/authorized_keys文件中,这种方式比较麻烦。scp -P 22 ~/.ssh/id_rsa.pub user@host:/。- 通过ssh-copy-id程序,就是我演示的方法,ssh-copyid user@host即可
- 可以通过
cat ~/.ssh/id_rsa.pub | ssh username@host "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys",这个也是比较常用的方法,因为可以更改端口号。
- 安装Nginx
- 准备工作
首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先安装这些lib库,这些依赖库主要有g++、gcc、openssl-devel、pcre-devel和zlib-devel 所以执行如下命令安装
bash
1 | yum install gcc-c++ |
Ubuntu系统安装命令如下:
bash
1 | sudo apt-get install libpcre3 libpcre3-dev |
- 安装Nginx
安装之前,最好检查一下是否已经安装有nginx
bash
1 | find -name nginx |
如果系统已经安装了nginx,那么就先卸载
bash
1 | yum remove nginx |
然后开始安装
首先进入/usr/local目录
bash
1 | cd /usr/local |
从官网下载最新版的nginx
bash
1 | wget -c https://nginx.org/download/nginx-1.14.2.tar.gz |
(注:版本号可更改,去官网查看最新版本号修改即可)
解压nginx压缩包
bash
1 | tar -zxvf nginx-1.14.2.tar.gz |
会产生一个nginx-1.14.2 目录,这时进入nginx-1.14.2 目录
bash
1 | cd nginx-1.14.2 |
接下来安装,使用–prefix参数指定nginx安装的目录,make、make install安装
bash
1 | ./configure |
(默认安装在/usr/local/nginx,推荐使用默认设置)

none
1 | make |

bash
1 | make install |

如果没有报错,顺利完成后,最好看一下nginx的安装目录
bash
1 | whereis nginx |
(where和is要连这些,中间没有空格)

- 启动和停止nginx
bash
1 | cd /usr/local/nginx/sbin/ |
查询nginx进程:
bash
1 | ps aux | grep nginx |

- 重启 nginx
- 先停止再启动(推荐):
对 nginx 进行重启相当于先停止再启动,即先执行停止命令再执行启动命令。如下:
bash
1 | ./nginx -s quit |
- 重新加载配置文件:
当 nginx 的配置文件 nginx.conf 修改后,要想让配置生效需要重启 nginx,使用 -s reload 不用先停止 nginx 再启动 nginx 即可将配置信息在 nginx 中生效,如下:
bash
1 | ./nginx -s reload |
启动成功后,在浏览器可以看到如下页面:

- 开机自启动
即在rc.local增加启动代码就可以了。
bash
1 | vim /etc/rc.local |
增加一行
bash
1 | /usr/local/nginx/sbin/nginx |
到这里,nginx安装完毕,启动、停止、重启操作也都完成。
建立git裸库
bash
1 | # 回到git目录 |
检查用户组权限
我们的git裸仓库已经建立好了,离成功又近了一步。为了以防万一,我们要检查一下之前的blog.git、.ssh、blog目录的用户组权限是否都为git:git
bash
1 | # 还记得/var/www/吗?这是之前配置nginx时,我们自己选定的网站根目录,请依据你自己的设置更改,如果没有的话自己 |
如果有哪个不是,执行下面相应的命令后再查看
bash
1 | sudo chown -R git:git /www/wwwroot/hexo |
使用git-hooks同步网站根目录
简单来说,我们使用一个钩子文件:post-receive,每当git仓库接收到内容的时候,就会自动调用这个钩子,把内容同步到网站根目录。
在git用户下执行:
bash
1 | # 新建一个post-receive文件并编辑 |
在里面输入以下内容,注意修改为自己的设置:
bash
1 |
|
保存退出后,执行以下赋予这个文件可执行权限。
bash
1 | chown -R git:git ~/blog.git/hooks/post-receive |
好了,以上就是服务器端需要配置的内容。我们还差最后一步就可以完成整个部署了!
修改配置文件nginx.conf
修改上面的配置文件:
bash
1 | vim /usr/local/nginx/conf/nginx_config |
然后修改其中两个部分,如下所示:

然后重启nginx,方法见nginx安装部分。
配置本地Hexo的_config.yml
非常简单,只需要找到本地Hexo博客的站点配置文件_config.yml,找到以下内容并修改:
yaml
1 | deploy: |
保存后,剩下的就是Hexo的日常操作了,这里就不赘述了,写完文章后,在你的本地博客根目录执行以下命令:
bash
1 | hexo c && hexo g -d |
就可以实现线上博客的自动更新了!一切搞定!
Rsync同步部署静态文件方法
使用rsync同步
本地生成静态文件后rsync同步到vps网页目录,lnap使用宝塔配置,这里只需要一个nginx。
bash
1 | # rsync [options] from_dir to_dir |
Hexo Github Action 自动部署
准备
Hexo博客源码的仓库,在GitHub上。ssh密钥,参考文章:Windows 下利用 Git 生成 SSH KEY 并配置到 GitHub
步骤
- 为需要部署的平台添加密钥
- 修改
_config.yml中的deploy配置 - 在 GitHub 上设置
Secrets - 创建 GitHub Action
为需要部署的平台添加密钥
按照之前的教程,只要你之前成功将 Hexo 的博客部署到 GitHub 上,那你电脑在 ~/.ssh 目录下一定有以下三个文件:
id_rsa:私钥id_rsa.pub:公钥known_hosts:记录对所有用户都可信赖的远程主机的公钥
将 id_rsa.pub(公钥)添加到不同平台中即可,参考文章:Windows 下利用 Git 生成 SSH KEY 并配置到 GitHub
下面是不同平台添加的地址:
修改 _config.yml 中的 deploy 配置
请使用 ssh (即以 git@ 开头的 clone 链接) 的连接方式,根据直接的实际地址填写。
yaml
1 | deploy: |
在 GitHub 上设置 Secrets
- 进入到你在
GitHub上面的源码仓库 - 点击右上角的
Settings

Settings
Settings
- 点击左侧的
Secrets - 点击右上角的
New secret

New secret
New secret
- 在
Name中输入HEXO_DEPLOY_PRI,在Value中填入id_rsa(私钥)的全部内容

Add secret
Add secret
创建 GitHub Action
- 点击项目上方的
Action按钮

Action
Action
- 点击
set up a workflow yourself创建Workflow

Workflow
Workflow
- 修改
main.yaml的内容

Create Workflow
Create Workflow
根据实际情况修改成你自己的内容
- Git 推送使用的用户名:git config –global user.name ‘sitoi’:
- Git 推送使用的邮箱:git config –global user.email ‘133397418@qq.com‘
- Hexo 的版本:npm i hexo@4.1.1 -g
yaml
1 | name: Hexo CI |
- 将你的源码推送到
GitHub上,你的博客一会就会自动更新了。
Hexo Gitlab CI/CD自动部署
啥都不说,直接上代码,请参考 Gitlab 官方项目 Gitlab hexo
更多关于 Gitlab CICD 介绍,请看下面文章
vercel 部署
jsdelivr被封了,怎么办?vercel 部署可以加速访问
为什么使用 vercel
- 国内
Github Pages速度较慢。 vercel速度快且能够自定义域名,能实现和Github Pages一样的效果
vercel 官方地址:vercel.com/
如何部署
- 首先注册一个账号
- 注册成功后进入页面,点击
News Project

img
- 然后通过绑定的
github或者gitlab导入需要部署的项目

img
- 如果导入的项目是打包好的静态页,在
Build and Output Settings的override都勾上,表示不执行它的默认命令。

img
- 点击
deployed进行部署,如果部署失败可以查看报错信息是不是上一步的某些选项没有覆盖。部署成功后会进入如图所示的界面

img
如何自定义域名
- 腾讯云域名地址:console.cloud.tencent.com/domain
vercel静态页挂载地址:- 进入到 setting 中可对项目进行一些设置,如项目名称

vercel 自定义域名
- 下面演示如何自定义域名,默认情况下部署成功后
vercel会给你生成一个默认的域名,如果想要修改成自己的域名可将域名名称修改成自己的。 - 当选择修改成自己的域名名称后,
vercel会检查域名指向的DNS对不对,如果不对的话会提示你域名的 DNS 应该如何配置,按照vercel提示的DNS信息
在自己的域名的 DNS 配置中进行配置,如图

img
配置多个域名
对其他新增的域名选择重定向到自己的主域名即可

vercel 多域名配置
自定义Header缓存时间
使用Vercel必备配置,本地缓存加速访问!
1 | vercel.json |
json
1 | { |
Vercel自定义404
cloudflare Pages 部署
jsdelivr被封了,怎么办?cloudflare Pages 部署可以加速访问
强烈推荐!
全球CDN,静态加速,可以说是最佳部署方案!就是有每日100000次请求限制!可以使用dnspod多线路负载均衡来帮助分流。
官网 cloudflare 首先注册一个账号

cloudflare

cloudflare page 连接 github

cloudflare page 选择仓库

cloudflare page 自定义域名
错过了CloudFlare Partner的时代,官方的CloudFlare for SaaS也提供了一种更灵活的CNAME接入方式
以 token 方式部署到 Github
yaml
1 | deploy: |
travis 自动部署配置
travis是第三方CICD服务,比action更加强大,下面只是参考,请查阅travis 文档,并结合自己的环境修改!
yaml
1 | sudo: false |
利用 GitLab 实现 Hexo 博客的 CI/CD
Portainer 提供了对服务在线更新的 WebHook,所以基于 GitLab 自带的 CI/CD 功能实现 Hexo 博客的持续部署,就非常轻松了。
CI/CD 其实本质上是一套流程,流程规则可以自行定义。在本文研究的主题下,流程分为三步:第一步是编译 Hexo 博客并生成静态文件;第二步是将静态文件打包成可提供 Web 服务的镜像;第三步则是通过 Portainer 的钩子触发服务更新。
1 | .gitlab-ci.yml |
yaml
1 | stages: |
为了保证服务更新的成功率,可以在 deploy 环节加个错误判断和重试次数,具体的看 GitLab 官方文档即可。
下面给出我的 Dockerfile 文件,供参考。
docker
1 | FROM nginx:alpine |
DNSPOD 多线路负载均衡
DNSPOD官网 console.dnspod.cn

dnspod

dnspod 多线路负载均衡
dnspod对cname数目有限制。
这里使用权重来分配各条线路访问比例!
乒乓部署
也可以叫旋转门部署。
解决调试博客插件,修改半成品文章时部署到云端会影响正在查阅博客的用户的问题!
使用Docker版本本地预览是很不错,但是 jsdelivr 版本发布需要在 Github 生成新 release 这时本地就不行了。乒乓部署可以解决这个问题!
具体方法就是同时部署到两个地方A和B,博客域名在两个服务器之间切换。这里以 Vercel 为例
准备工作:
- 创建2个Github仓库,对应服务器A和B的部署
- 建立两个服务器A和B,分别关联两个 Github 仓库
- 把调试完毕的代码上传到两个仓库
- 这时通过服务器A和B都是可以正常浏览的
要调试的时候:
- 发布到A之前,把博客域名转移到服务器B
- 在服务A做一些调试,在线 debug 工作
- 特别是在线 pageseed 测试调优,这种事必备方法。简单不需要新的 jsdelivr 版本调试本地 docker-hexo 调试即可!

输入想转移的域名

点击确认转移域名
调试完毕后:
- 把域名切换到服务器A
- 同时部署到服务器B,服务器B同步A的部署内容,以便下次备用
总结就是服务器A现行,服务器B做后备,调试发布使用A,调试A的时候B就顶上前台!
这样,调试和正常部署网络服务两不误。是不是感觉自己是个大聪明!
系列教程
Hexo系列
[三万字教程]基于Hexo的matery主题搭建博客并深度优化完全一站式教程
- Hexo Docker环境与Hexo基础配置篇
- hexo博客自定义修改篇
- hexo博客网络优化篇
- hexo博客增强部署篇
- hexo博客个性定制篇
- hexo博客常见问题篇
- hexo博客博文撰写篇之完美笔记大攻略终极完全版
- Hexo Markdown以及各种插件功能测试
- markdown 各种其它语法插件,latex公式支持,mermaid图表,plant uml图表,URL卡片,bilibili卡片,github卡片,豆瓣卡片,插入音乐和视频,插入脑图,插入PDF,嵌入iframe
笔记系列
- 完美笔记进化论
- hexo博客博文撰写篇之完美笔记大攻略终极完全版
- Joplin入门指南&实践方案
- 替代Evernote免费开源笔记Joplin-网盘同步笔记历史版本Markdown可视化
- Joplin 插件以及其Markdown语法。All in One!
- Joplin 插件使用推荐
- 为知笔记私有化Docker部署
Gitbook使用系列
- GitBook+GitLab撰写发布技术文档-Part1:GitBook篇
- GitBook+GitLab撰写发布技术文档-Part2:GitLab篇
- 自己动手制作电子书的最佳方式(支持PDF、ePub、mobi等格式)
Gitlab 使用系列
来源: 夜法之书