0%

解决github pages无法被baidu抓取页面问题

因为github屏蔽了baidu的页面抓取,所以baidu一直无法索引自建博客。而在国内毕竟baidu的使用量还是更大,为了让自己的博客有更多人访问,还是需要打通这条通道。查找了一些网上资料,解决办法可以通过使用国内的类似服务coding pages作为镜像。

coding在国内云端开发者服务里有良好的口碑,2019年被鹅厂收购,当时广大码农担心又一个好技术被葬送,现在来看有鹅厂的加持,coding发展还是不错的,也为广大开发者提供更多实惠。所以如果你正在选择一个建站方式,直接使用coding pages也是个不错的选择。下面说下已经使用github pages时如何解决baidu无法抓取页面问题。

coding pages

最近coding进行了一系列产品整合升级操作,所以网上有些教程已经过时,大概梳理下时间线:

  • coding成立于2014年,提供一站式云端开发体验,有个人版和企业版两个产品;

  • 2018 年4月与腾讯云达成战略合作,推出了轻量级代码托管产品 「腾讯云开发者平台」;

  • 2019年4月推出全新coding,在将原企业版提权为主打产品,并加入敏捷项目协同、持续集成、制品库、单项目多仓库等新功能及数百项特性改进;

  • 2019年8月腾讯完成对coding的全资收购;

  • 2019年12月28日起,腾讯云开发者平台停止注册;

  • 将coding个人版与腾讯云开发者平台升级至全新coding,2019.12.25~2020.1.20将原有账户全部升级完。

自此coding只有一个入口coding.net,免费版本支持5人以内团队、20个项目和50G空间。

coding pages是coding提供的类似github pages功能,有些教程说要升级腾讯云开发者账户才能使用,现在不需要了,直接coding.net注册即可使用。网上对于coding pages的评价可能还是停留在产品整合升级之前,对其评价并不是太好。目前最新的coding pages,初步使用还算不错,至少比github pages要快很多。

coding pages有一个不太好的地方是,一开始没有找到入口😂。原来默认没有启用入口,新版coding中把pages归到构建与部署功能中,要到项目设置的功能开关中开启。

image-20200309212754583

这样项目导航菜单中才会出现pages入口。

image-20200309213000207

之所以归类到构建与部署功能,也是有道理的,coding的pages功能类似一个特殊的部署,它的主要特性是选择从哪个仓库在什么时候手工还是自动部署成网站,然后给你一个域名,这个域名不像github可以定制为形如”用户名.github.io“这样的,而是自动分配的形如"00kj2k.coding-pages.com"这种的域名。coding pages也没有提供建站模板等功能。

熟悉以上这些后,你应该可以很容易建立自己的coding pages了。注意coding pages并不认仓库中的CNAME文件,需要在界面中配置域名。

镜像方法

接下来就是解决如何将coding pages作为github pages的镜像了,有两种方案:

方案一:本地hexo d时同时部署到coding pages

方案二:通过github持续集成自动同步到coding pages。而持续集成也有很多选择,可以选择github自家的github actions,也可以选择第三方的,如travis-ci。

推荐方案二,并且推荐使用github actions。这里顺便把hexo d也做成自动的,我之前都是每次自己hexo g然后hexo d,现在用上github actions,实在是省心了不少。

github actions

github actions是githut自家的持续集成,它的最大的特色是可以复用别人写好的action,这些action也在github的仓库里,github还专门弄了一个市场,供大家选用。

毫不意外的,它里面已经有hexo的部署action,以及仓库的同步action,直接拿来就可以了。

仓库访问凭证准备

我是这样规划仓库的:hexo源文件一个github仓库,github pages一个仓库,coding pages一个仓库

github actions是建在hexo源文件仓库上,执行时先进行hexo部署,推送到github pages仓库(也就是相当于执行hexo d),然后将github pages仓库同步到coding pages仓库。

github pages deploykey

deploykey和全局设置里的ssh key类似,区别是针对单个仓库的。

生成密钥对,如下命令生成myssh和myssh.pub文件:

1
ssh-keygen -t rsa -b 4096 -C "zhongpan2000@gmail.com" -f D:\myssh

将myssh.pub的内容设置到github pages仓库的deploykey中。

将myssh的内容设置到hexo源文件仓库的secrets中,名为github_pages_deploykey,后续在action使用。

coding pages token

coding没有提供仓库级别的ssh key,只能使用token。在项目设置的开发者选项中创建并配置权限,创建后得到用户名和密码两个字符串,通过https://user:password@your.repo.url就可以操作仓库。

将上述"user:password"也存储到hexo源文件仓库的secrets中,名为coding_blog_user_token,后续在action使用。

完整workflow

最后给出完整的git actions脚本。

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
name: Hexo Build and Deploy

on: [push]

jobs:
hexo-build-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Cache node modules
uses: actions/cache@v1
with:
path: node_modules
key: ${{runner.OS}}-${{hashFiles('**/package-lock.json')}}
- uses: yrpang/github-actions-hexo@master
with:
deploykey: ${{secrets.github_pages_deploykey}}
username: zhongpan
email: zhongpan2000@gmail.com
- name: repo-sync
uses: wei/git-sync@v1
env:
SOURCE_REPO: "https://github.com/zhongpan/zhongpan.github.io.git"
SOURCE_BRANCH: "master"
DESTINATION_REPO: "https://${{ secrets.coding_blog_user_token }}@e.coding.net/zhongpan/blog.git"
DESTINATION_BRANCH: "master"
with:
args: $SOURCE_REPO $SOURCE_BRANCH $DESTINATION_REPO $DESTINATION_BRANCH

DNS解析

最后就是DNS的问题的,自建网站有自己的域名,为了解决baidu抓取页面问题,国内需要解析到coding pages上,具体也可以有两种方式:

方案一:境内访问coding pages,境外访问github pages

方案二:仅baidu访问coding pages,其他访问github pages

推荐方案一,coding pages在境内访问速度非常快,境外还是访问github pages,这样相当于自建了一个CDN。我使用的阿里云域名服务,设置域名解析记录如下:

image-20200309212330014

如果你需要启用https,会遇到一个问题,在coding pages中申请证书失败,是因为证书是通过Let’s Encrypt申请的,这是国外的一个服务,它验证站点的时候会经过上述DNS解析到github pages上去,解决办法是先暂定境外线路解析,申请成功之后再开启。申请证书有效期是3个月,到期后需要重新申请。github pages也是通过Let’s Encrypt申请证书,也是3个月有效期,但是到期会自动帮你申请。

-------------本文结束感谢您的阅读-------------