前言

最近搞了个 Windows Server,除了挂几个客户端,平常也闲置得很,每个月 400G 的流量都用不到十分之一。刚好看了友链里大佬的一篇关于 针对搜索引擎解析域名 的方法,有种不妨一试的冲动。

从原理上讲,这种专门给大陆搜索引擎喂料的方法应该是有利于 SEO 的,毕竟:独立 IP 没有垃圾邻居,内网低延迟,反正服务器闲着也是闲着。

适用场景

因为是个 Windows Server,上面还挂着一些客户端程序,所以想着尽量节省资源,这个 Windows Server 上只托管最终的 HTML 文件,一些渲染等工作就用 GitHub Action 完成。因为不怎么考虑时效性,所以也就没有再搭个消息钩子系统触发更新的功能,这个BAT工作就简单两步:

  1. 定时触发自动任务,从 GitHub 仓库拉取最新HTML
  2. 拉取成功则自动发布到 iis 网站目录

更完善的 webhook 结合方案可见本站另外的呕心之作:
Windows Server 部署 webhook 服务,并注册为系统服务守护

前置条件

  1. 安装 Git for Windows
  2. 安装 iis 并配置好网站
  3. 做好 dns 解析
  4. BAT 添加到 Windows 自动任务,按需求定时触发启动 BAT 程序

BAT实现代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@ECHO OFF
:SETVAR
SET PATH=%PATH%;C:\Program Files\Git;C:\Program Files\Git\bin;
SET WWW_DIR="C:\inetpub\xxx"
SET NUM=0

:CLONE
RMDIR /S /Q GITTMP
PING 127.0.0.1 -n 3 >nul
git clone -b xxx https://github.com/xxx/xxx.github.io.git GITTMP

IF %errorlevel%==0 (
GOTO PUBLISH
) ELSE (
SET /A NUM+=1
ECHO %date% %time% Git clone failed %NUM% . >>auto-xxx.log
IF %NUM%==3 goto END
PING 127.0.0.1 -n 300 >nul
GOTO CLONE
)

:PUBLISH
MOVE /Y %WWW_DIR%\web.config .\
RMDIR /S /Q %WWW_DIR%
PING 127.0.0.1 -n 3 >nul
MOVE /Y GITTMP %WWW_DIR% && MOVE /Y web.config %WWW_DIR%
ECHO %date% %time% Auto publish has done. >>auto-xxx.log

:END
EXIT

代码解释

  1. 为什么不是 git pull

    1
    git clone -b xxx https://github.com/xxx/xxx.github.io.git

    因为站长用的是 hexo 渲染框架,GitHub Action 设置了发布分支 xxx 只保留一次 commit 记录,每次都没有承前启后的关系,所以只能用 git clone

  2. %WWW_DIR% 是什么?

    1
    SET WWW_DIR="C:\inetpub\xxx"

    iis 中设置的网站目录,HTML文件需发布到该路径对外提供访问

  3. 为什么要MOVE web.config
    web.configiis 的网站配置文件,所以这个配置文件需要保留恢复。网站配置内容见本站后续文章:解决 IIS W3C格式日志中中文路径乱码问题