Windows Server搭建私有gitblit服务器托管Hexo博客
前言
网上关于Hexo博客的部署教程很多,大都是托管在Github。虽然免费,但由于Github在外网,访问速度较慢。如果博客上有许多高清图片,访问时要等好一会才能加载出来,严重影响观感。
由此,萌生了在私有云服务器上托管Hexo博客的想法。网上找到的教程是在Linux系统服务器上搭建的,而我的云服务器系统是Windows Server 2012 R2(工作原因必须用),能不能按照同样的思路在Windows Server上搭建呢?
下面,跟大家分享我在Windows Server 2012 R2上搭建Git私库,配置Niginx静态资源Web服务,成功托管Hexo博客的经验。
主要思路:
- 在云服务器使用Gitblit搭建Git私库
- 搭建Nginx Web服务器,访问静态资源
- 配置Git钩子脚本,每次推送,自动将Hexo静态资源拷贝到Nginx默认主页目录
详细步骤
使用Gitblit搭建Git私库
安装 JRE
Gitblit 需要 Java运行环境,版本至少Java 7,JRE和JDK都行,为了精简我选的JRE 8
JRE 官方下载地址(注册后才能下载): https://www.oracle.com/java/technologies/javase-downloads.html
安装Gitblit
官网下载Windows版压缩包:http://gitblit.github.io/gitblit/
解压后,修改 gitblit-1.9.0/data/defaults.properties 配置文件中的以下几项参数:
1 | # Git总仓库目录(会自动创建,但只能在gitblit根目录下) |
以管理员模式运行Gitblit根目录下的 gitblit.cmd 开启服务
浏览器访问:http://localhost:自定义端口号/ 或 http://公网IP:自定义端口号/
即可进入Gitblit使用界面
将Gitblit服务器注册成系统服务,开机自启动
修改Gitblit根目录下的 installServcie.cmd 文件中的几项参数:
1 | # 32位系统:x86 64位系统:amd64 |
修改完参数后,以管理员运行installService.cmd 安装服务
然后打开 运行=> services.msc
就能在Windows服务管理策略里看到新注册的gitblit服务
创建Git仓库
登录Gitblit管理员账号,修改密码
初始账号:admin,初始密码:admin
一定要修改初始密码并牢记!!!
今后通过http协议推送Git仓库需要用到该密码,相当于Github的账号密码
创建Git仓库
仓库名自定义,无需像托管在Github上时一样规定为username.github.io
获取Git仓库地址
这里我选用http协议地址,是因为懒得在服务器防火墙再开放一个29418端口了
想要用ssh的,劳烦移步官网文档 http://gitblit.github.io/gitblit/setup_transport_ssh.html
至此,Git私库搭建完成!
搭建Nginx Web服务器
安装Nginx
官网下载Windows版压缩包:http://nginx.org/en/download.html
修改配置文件
修改Nginx 根目录的conf文件夹下的配置文件 C:\Program Files\nginx-1.17.9\conf\nginx.conf
启动测试Nginx
双击nginx.exe,黑色弹窗一闪而过即为启动成功,关闭需在任务管理器结束进程。
访问测试页面 http://localhost/
配置开机启动
下载WinSW
WinSW下载地址: https://github.com/kohsuke/winsw/releases
WinSW.NET2.exe (适用于32位系统)
WinSW.NET4.exe (适用于64位系统。我下载这个版本)
配置步骤:
将 WinSW.NET4.exe
复制到 C:\Program Files\nginx-1.17.9\
Nginx 根目录中,重命名为 nginxservice.exe
在与 nginxservice.exe
同目录中,新建一个 nginxservice.xml
文件(名字一定要与nginxservice.exe
名字前缀保持一致)
nginxservice.xml
编写以下内容:
1 | <service> |
请自行修改
用 管理员身份 运行 cmd ,cd 进入 C:\Program Files\nginx-1.17.9
Nginx 根目录下,执行 nginxservice.exe install
命令。
配置Git钩子脚本
原理:
Git钩子是在Git仓库中特定事件发生时自动运行的脚本。
这里我们需要配置一个脚本,每当我们向Git服务器推送Hexo博客静态资源文件时,脚本自动拷贝上传的的资源文件到Nginx Web服务器目录。
有小伙伴可能会提出,直接把Nginx Web服务器的默认主页目录指定到仓库目录不就行了吗?
这有一个误区,如果你翻找过服务端上的仓库目录,会发现根本找不到你所推送的文件!
这是因为Git是一个版本管理系统,而非文件系统。Git服务端存放的叫裸库(bare),不包含工作区(working place),推送到Git服务端的文件会以二进制的方式存储在仓库的objects文件夹中。
你需要在服务器上,像平时克隆仓库一样执行 git clone 仓库地址 才能获取到推送的文件。
我们要配置的钩子脚本就是要实现以上功能,而且并不需要额外安装 Git。
详细步骤:
修改现成的钩子脚本
Gitblit 钩子脚本都放在 gitblit-1.9.0\data\groovy 目录下,要使用的脚本模板为localclone.groovy
拷贝一份,重命名为autoclone.groovy
修改 autoclone.groovy 中的:
1 | # 自动在此目录执行克隆代码,我这直接指向了Nginx的默认主页路径 |
给仓库配置脚本
浏览器进入Gitblit 管理界面 => blog版本库 => 编辑=> receive=> post-receive
选择刚才编写的autoclone脚本,保存
最后
在用于推送博客的电脑上,修改配置文件_config.yml,添加多Git仓库推送
1 | deploy: |
CMD执行hexo clean,hexo deploy命令
因使用http协议,推送到Gitblit时会提示输入密码,密码就是登录Gitblit管理页面的admin用户密码。
现在浏览器直接访问公网IP就能看到博客了,高清图片即时呈现,丝滑流畅~