将酷壳网(coolshell.cn)整站镜像托管到Gitee Pages经验分享

一、背景与目标

酷壳网(coolshell.cn)作为国内知名的技术博客,其内容涵盖编程实践、系统设计、性能优化等深度技术话题。将整站镜像托管到Gitee Pages,旨在实现以下目标:

  1. 静态化备份:将动态网站转换为静态HTML,降低服务器依赖;
  2. 免费托管:利用Gitee Pages的免费静态资源托管服务;
  3. 全球加速:通过Gitee CDN提升访问速度;
  4. 版本控制:结合Git管理网站内容变更。

二、技术选型与工具链

1. 静态化工具

  • Hugo/Jekyll:静态网站生成器(SSG),支持Markdown渲染和主题定制。酷壳网原站为WordPress动态架构,需通过工具转换为静态文件。
  • wget镜像:使用wget --mirror --convert-links --adjust-extension --page-requisites命令递归下载整站,生成本地静态副本。
  • 自定义爬虫:针对动态加载内容(如AJAX),需编写Python脚本(如requests+BeautifulSoup)模拟浏览器行为抓取数据。

2. Gitee Pages配置

  • 仓库类型:必须为公开仓库,且名称需匹配用户名.gitee.io或自定义域名。
  • 分支规则:默认从mastergh-pages分支部署,需在仓库设置中指定。
  • CNAME支持:通过添加CNAME文件实现自定义域名绑定。

三、实施步骤详解

1. 静态化镜像生成

步骤1:使用wget递归下载

  1. wget --mirror --convert-links --adjust-extension --page-requisites --domains=coolshell.cn https://coolshell.cn
  • --mirror:启用递归下载和镜像模式;
  • --convert-links:将相对链接转换为本地路径;
  • --adjust-extension:自动补全.html后缀;
  • --page-requisites:下载CSS/JS/图片等依赖资源。

步骤2:处理动态内容
对于JavaScript渲染的页面(如评论区),需通过以下方式解决:

  • 方案1:使用无头浏览器(如Puppeteer)抓取完整DOM:
    1. const puppeteer = require('puppeteer');
    2. (async () => {
    3. const browser = await puppeteer.launch();
    4. const page = await browser.newPage();
    5. await page.goto('https://coolshell.cn/article/123');
    6. const html = await page.content();
    7. // 保存html到本地文件
    8. })();
  • 方案2:直接调用WordPress REST API获取结构化数据,通过模板引擎(如Nunjucks)重新渲染。

2. Gitee仓库初始化

步骤1:创建公开仓库

  • 登录Gitee,新建仓库coolshell-mirror,类型选择“公开”。
  • 初始化时勾选“使用README初始化仓库”。

步骤2:配置Gitee Pages

  • 进入仓库设置 → “Gitee Pages” → 启用服务;
  • 选择部署分支(如master)和根目录(/);
  • 添加自定义域名(需提前配置DNS解析至gitee.io的CNAME记录)。

3. 自动化部署方案

方案1:Git命令行部署

  1. # 进入静态文件目录
  2. cd coolshell.cn-mirror
  3. # 初始化Git并提交
  4. git init
  5. git add .
  6. git commit -m "Initial static site commit"
  7. # 添加Gitee远程仓库
  8. git remote add origin https://gitee.com/用户名/coolshell-mirror.git
  9. git push -u origin master

方案2:GitHub Actions自动化(跨平台兼容)
创建.github/workflows/deploy.yml文件:

  1. name: Deploy to Gitee Pages
  2. on: [push]
  3. jobs:
  4. deploy:
  5. runs-on: ubuntu-latest
  6. steps:
  7. - uses: actions/checkout@v2
  8. - name: Install wget and dependencies
  9. run: sudo apt-get install wget
  10. - name: Mirror website
  11. run: |
  12. wget --mirror --convert-links --adjust-extension --page-requisites --domains=coolshell.cn https://coolshell.cn
  13. mv coolshell.cn/* .
  14. rm -rf coolshell.cn
  15. - name: Deploy to Gitee
  16. uses: wei/git-commit-action@v1
  17. with:
  18. github_token: ${{ secrets.GITEE_TOKEN }}
  19. commit_message: "Auto deploy static site"
  20. branch: master

四、常见问题与解决方案

1. 404错误

  • 原因:Gitee Pages对路径大小写敏感,而原站可能存在混合大小写链接。
  • 解决:在wget命令中添加--no-clobber避免重复下载,并通过sed脚本统一路径格式。

2. 资源加载失败

  • 原因:跨域限制或路径错误。
  • 解决
    • 修改<base>标签为相对路径;
    • 在Gitee仓库设置中启用“强制HTTPS”。

3. 搜索引擎索引问题

  • 原因:静态化后URL结构变化可能导致SEO排名下降。
  • 解决
    • 生成sitemap.xml并提交至Google Search Console;
    • robots.txt中保留原站规则。

五、优化建议

  1. 性能优化

    • 压缩HTML/CSS/JS(使用html-minifiercssnano);
    • 启用Gitee CDN的缓存策略(通过Cache-Control头控制)。
  2. 监控与回滚

    • 使用Gitee的“部署历史”功能快速回滚错误版本;
    • 集成UptimeRobot监控站点可用性。
  3. 多环境管理

    • 创建dev分支用于测试,master分支用于生产部署;
    • 通过Gitee的“环境标签”区分不同版本。

六、总结

将酷壳网整站镜像托管至Gitee Pages,需兼顾静态化完整性、部署自动化和用户体验优化。通过wget镜像、动态内容处理、Git版本控制等技术的组合应用,可实现低成本、高可用的静态网站托管方案。实际项目中,建议结合CI/CD工具(如GitHub Actions)实现全流程自动化,进一步提升运维效率。