2025-06-05 15:52:38 +08:00
2025-05-30 19:32:24 +08:00
2025-05-28 18:35:12 +08:00
2025-05-03 08:05:02 +08:00
2025-06-09 04:37:21 +08:00
2025-06-05 15:30:30 +08:00
2025-04-29 08:10:52 +08:00

spage

Spage - 自托管静态页面托管服务

项目处于开发阶段,暂未发布第一个版本,感兴趣的可以先订阅一下

简介

一个基于Go语言开发的, 开源自托管静态页面托管服务, 使用Caddy作为web服务器

类似于Vercel Pages, GitHub Pages, Cloudflare Pages等PaaS服务, 但它是一个开源的, 可自托管的平替

快速开始

容器化自部署

# Docker Hub源
liteyukistudio/spage:latest

# GitHub Container Registry源
ghcr.io/liteyukistudio/spage:latest

# Liteyuki Container Registry源
reg.liteyuki.org/spage/spage:latest

# 推荐优先使用公共源即Docker Hub源和GHCR源若访问不了再使用Liteyuki Container Registry源
# 以减轻Liteyuki Container Registry的压力

你可使用dockerpodman等工具部署也可以将其部署到Kubernetes集群中

默认容器内服务端口是8888,你可以按需暴露,并挂载./config.yaml到容器内部

若你需要使用最新提交,可以将latest替换为nightly标签

二进制自部署

如果不想容器化,也可以直接跑二进制,支持,可以在Release界面找到大部分平台和架构的二进制文件

支持LinuxmacOS(Darwin)WindowsFreeBSD等操作系统

AMD64兼容性v1支持所有AMD64架构的CPUv3支持2013年及以后的AMD64架构CPU

如果找不到你目标平台的二进制文件,可以尝试从源代码构建 go build ./cmd/server

使用Spage Cloud SaaS

无需自己部署直接使用我们的现有实例及CDN加速服务

敬请期待...

技术栈

自托管静态页面托管服务, 基于以下技术栈构建:

  • 后端: Golang, Hertz框架, Kitex(RPC框架), GORM(ORM框架)
  • 前端: Next.js(React.js), TypeScript
  • 数据库: SQLite3, PostgreSQL
  • Web服务器: Caddy(仅提供接口)
  • CLI自动化: 任意, 但尽可能和现有的前端工具链集成
  • 容器化: Docker

理念:

  • 尽可能的在保证完整功能的同时在开发和使用过程中不引入过多的依赖
  • 考虑更具有优势和简洁完善的技术栈

基础功能

  • 用户管理, 组织管理, 项目和站点管理

  • 支持OAuth2以便团队使用和管理

  • 可配置后台域名, 支持自定义域名panel.liteyuki.org

  • 支持全局域名, 可配置自定义域名, 用于站点自动生成使用 使用{version.replace(".", "_")}-{prefix}.{pages-domain} 前缀prefix随机生成, 可后期指定, 不能包含"." 版本号version默认为latest时可不加前缀

  • TLS配置自定义 内网部署时, 如果外网存在一个统一网关, 可以不配置内网TLS 只需要将泛域名CNAME反向代理到内网Pages服务Http端点即可

  • 动态管理站点主机路由 WEB服务器, 我们优先选用Caddy作为Web服务器, 因为它的REATful API可以用来让我们的Pages服务与Caddy交互, 动态地管理站点主机名路由 例如: 对CDN或者客户端(直连时)声明缓存时间以减少源服务器流量开销

  • ClearURLs支持 支持使用 example.com/about 访问 example.com/about.html/htm 省略文件扩展名, 减少冗余

CI/CD集成

  • CLI 使用TypeScript编写, 可以使用pnpmnpm等包管理器进行安装依赖, 部署, 构建等操作 部署时需要指定输出文件夹(包含index.html的目录), 站点ID以及站点Token, 还有版本号Tag(可选) CLI将输出文件夹压缩后使用指定接口上传到服务器 (可以考虑使用其他语言编写, 但是在前端构建工作流容器中使用已有前端工具链更方便)

  • Git平台自动化集成 可以无缝衔接GitHub, Gitea等平台的工作流 例如: 一个项目有Release/Nightly两个稳定站点, 在CLI中推送时就需要指定站点ID, 优先返回第一个配置的自定义域名, 在PR预览模式下, 无需指定站点URL, 自动创建新站点并返回随机前缀的URL

开发

在不修改默认配置的情况下,开发模式有预设配置,可以直接上手开发

主控后端和agent部分

  • 安装go工具链
  • 安装依赖go mod tidy
  • 启动主控后端go run ./cmd/server

主控前端

  • 安装pnpm和node(或其他运行时例如bundeno)
  • 在项目根目录下切换到前端源码目录:cd web-src
  • 使用pnpm install安装依赖
  • 使用pnpm dev bun dev等方式启动前端开发服务器

注意事项

  • 开发模式下,前后端的域是不一样的,默认值是前端http://localhost:3000 后端http://localhost:8888后端配置了默认的frontend.url来确保跨域请求及Cookie正常工作若自定义了端口请确保前端配置的URL与后端配置的frontend.url一致

  • 开发模式下在测试captcha时需要将localhost或其他域加入到平台的白名单中

  • 暂不支持mcaptcha后续会支持

Description
Self-hosted static pages hosting and managing
Readme MIT 8 MiB
Languages
Go 59.9%
TypeScript 36.2%
CSS 2.9%
Makefile 0.9%