Skip to content

使用 GitHub Actions 从公开仓库私密发布 GitHub Pages 网站,完全隐藏网站文件列表和历史记录,无需付费 | Use GitHub Actions to privately publish GitHub Pages websites from public repositories, completely hiding the file list and history of the websites, no payment required

License

Notifications You must be signed in to change notification settings

Phuker/phuker.github.io

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

从公开仓库私密发布 GitHub Pages 网站

简体中文 English

使用 GitHub Actions 从公开仓库私密发布 GitHub Pages 网站,完全隐藏网站文件列表和历史记录,无需付费

背景和原因

GitHub 免费账户限制只能从公开仓库发布 GitHub Pages 网站,这会带来一些隐私问题。任何人都可以:

  • 查看文件修改历史记录,历史隐私数据难以删除
  • 查看文件列表,轻松找到未发布的草稿
  • 随意 fork 仓库,所有数据将保持公开,难以删除
  • 轻松打包下载所有静态网站文件

原理和效果

不在 GitHub 仓库中存储任何静态网站文件,而是使用 GitHub Actions 远程下载静态网站打包文件并直接发布到 GitHub Pages。

效果:

  • GitHub 免费账户也可以使用,不需要仅为此功能付费
  • 文件修改历史记录不公开,无法随意查看历史隐私数据
  • 文件列表不公开,无法轻松找到存储到秘密路径的页面文件
  • Fork、clone、打包下载不会涉及网站数据

使用方法

需求

  • 可以上传和下载文件的 web 服务,例如:
    • Web 服务器(推荐每次都上传到相同路径,下载链接固定,不需要每次运行 workflow 都指定参数)
    • 可以直链下载的文件共享服务,例如 file.io(这类服务的下载链接一般都不固定,每次运行 workflow 都需要指定参数)
  • 已生成的静态网站文件

初始化仓库

  • Fork 本仓库,repository name 改为想要的名字,一般是<用户名小写>.github.io官方文档
  • 修改仓库设置:
    • Settings - Actions - General - Artifact and log retention 设置为最小值 1 day
    • Settings - PagesSource 改为 GitHub Actions
  • 进入 Actions,首次进入会出现警告 Workflows aren’t being run on this forked repository,点击 I understand my workflows, go ahead and enable them 按钮确认该警告。

设置参数

共有 3 个参数需要设置:

  • REMOTE_FILE_URL:必须设置,静态网站打包文件的 URL。
  • REMOTE_FILE_TYPE:必须设置,静态网站打包文件的格式,可选选项:7ztar
  • REMOTE_FILE_PASSWORD:可选,静态网站打包文件的加密解密口令(密码)。如果未加密,则不需要设置此参数。

可以在 2 个位置设置参数:

  • 固定参数:Settings - Secrets - Actions,点击 New repository secret,添加为 secrets。仅需在此处设置 1 次,在运行 workflow 时留空,无需设置。
  • 非固定参数:在每次运行 workflow 时设置。如果 secrets 中存在相同的参数,会被此处填写的值覆盖。

建议尽量使用固定的参数并设置为 secrets,而不要在每次运行 workflow 时指定参数。因为 secrets 参数会在 workflow run 的日志中隐藏,而运行 workflow 时指定的参数会直接输出到日志中,可公开查看,无法隐藏。

打包静态网站文件

共支持 4 种打包文件,请按需选择打包文件类型。各种类型及示例文件如下:

  • demo/test.7z:使用 7-Zip 打包压缩,未加密
  • demo/test.enc.7z:使用 7-Zip 打包压缩并加密,加密文件名,密码为 123456
  • demo/test.tar.gz:使用 tar 打包压缩,未加密
  • demo/test.tar.gz.enc:使用 tar 打包压缩,然后使用 openssl 加密,密码为 123456

假设静态网站文件位于 /path/to/static/dir 目录,密码为 YOUR_PASSWORD_123456。以下是打包的命令示例,运行环境为 Ubuntu 20.04。

使用 7z 打包压缩为 /path/to/files.7z,未加密:

cd /path/to/static/dir && 7z a /path/to/files.7z .

使用 7z 打包压缩并加密为 /path/to/files.7z,加密文件名,加密解密口令硬编码到命令参数:

cd /path/to/static/dir && 7z a -mhe=on -pYOUR_PASSWORD_123456 /path/to/files.7z .

也可以使用 Windows 图形化界面程序将静态网站文件打包为 7z 格式。

使用 tar 打包压缩为 ./files.tar.gz,未加密:

tar --owner 0 --group 0 --numeric-owner -czvf files.tar.gz -C /path/to/static/dir .

使用 tar 和 openssl 打包压缩并加密为 ./files.tar.gz.enc,加密解密口令硬编码到命令参数:

tar --owner 0 --group 0 --numeric-owner -czvf - -C /path/to/static/dir . | openssl enc -aes-256-cbc -pbkdf2 -pass pass:YOUR_PASSWORD_123456 -in - -out files.tar.gz.enc

部署

把打包文件上传到你的服务器或者文件共享服务。使用命令行将打包文件 /path/to/files.7z 上传到 file.io 示例:

curl -F 'file=@/tmp/test.bin' https://file.io/

Actions - Deploy to GitHub Pages - Run workflow,填写非固定参数,点击 Run workflow,等待运行完毕。运行完毕后:

  • 如果运行成功,workflow run 会自动删除,无需进一步操作。
  • 如果运行失败,workflow run 不会自动删除,其中的日志、artifacts 可能包含隐私数据,并且可以公开查看。请在排除错误后手动删除所有 workflow run。

最后删除服务器上的打包文件,取消文件共享。

建议将以上打包和部署步骤固定为自定义脚本。

About

使用 GitHub Actions 从公开仓库私密发布 GitHub Pages 网站,完全隐藏网站文件列表和历史记录,无需付费 | Use GitHub Actions to privately publish GitHub Pages websites from public repositories, completely hiding the file list and history of the websites, no payment required

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published