归档:构建服务部署
| 本文关于开放构建服务的文档已过时! 您可以在 https://openbuildservice.org/help/manuals/obs-admin-guide/ 上找到最新的信息 |
OBS 服务部署
所有 OBS 服务都可以共存于一台机器上。随着负载的增加,合理的扩展解决方案是将服务分组如下:
- “前端”运行 api 和 webui:一个或多个
- “存储”运行 srcserver 和 mysql:每个 OBS 实例只有一个
- “后端”运行 rep server、scheduler、dispatcher:一个或多个 - 如果它们不需要彼此交互,可以按架构拆分。当 ExportFilters 需要能够将二进制文件从一个架构推送到另一个架构时,这种情况发生。
- “工作节点”运行工作节点:很多
- “签名器”是签名服务器(出于安全原因隔离):一个
- “下载”运行 http 并充当 rep server 的前端/rsync 镜像:一个或多个
frontend
前端服务为 http(s) osc api 服务和 webui 提供接口和访问控制逻辑。
需要安装的 openSUSE 包
- obs-api
- memcached(可选,用于提高性能)
正在运行的服务
- rclighttpd(运行 obs api 和 webui)
- rcobsapidelayed
- rcobswebuidelayed
此主机通常没有用户数据进行备份。
存储
即使在高负载下,此服务也应快速响应。srcserver 和 mysql 在对 osc 和 webui 以及软件搜索服务(例如 software.opensuse.org)做出快速响应方面至关重要。此服务器包含所有关键数据,应进行良好的备份。
需要安装的 openSUSE 包
- mysql
- obs-server
- obs-signd(可选)
- obs-source_service(出于安全原因也可以移动到单独的系统)
正在运行的服务
- rcobssrcserver
- rcobsservice(source_service)
backend
批处理在此处计划、安排、触发和解决。构建的软件包可以直接从此主机上的构建区域提供,通过反向代理提供,或通过 rsync 导出。
此主机上的大部分数据都应该可重建。例外情况是导入的二进制项目。建议备份此主机,但并非至关重要。
需要安装的 openSUSE 包
- obs-server
- obs-signd(可选)
- createrepo(可选,用于构建 rpm 包)
- dpkg(可选,用于构建 debian 包)
- lighttpd(可选,用于托管 repo)
正在运行的服务
- rcobsscheduler
- rcobsdispatcher
- rcobsrepserver
- rcobspublisher
- rcobswarden(可选)
- rcobssigner(可选)
工作节点
初始扩展几乎肯定会发生在此处。这些系统需要最少的本地存储和数据,尽管它们具有临时缓存。
可以使用/应该使用虚拟化来保护构建,因为构建作业可以获得 root 权限并可能利用安全漏洞。
需要安装的 openSUSE 包
- obs-worker
- Xen/KVM(可选,用于工作节点隔离)
- qemu(可选,用于交叉构建)
- mount-static(可选,用于交叉构建)
- bash-static(可选,用于交叉构建)
正在运行的服务
- rcobsworker
签名器
如果使用此服务,您应该考虑它需要的安全级别。
需要安装的 openSUSE 包
- obs-signer
正在运行的服务
- rcobssigner
下载
下载服务严格来说不属于 OBS,而是像任何 http 服务器一样管理。它可以是后端服务器的反向代理,也可以使用共享存储或 rsync 保持最新。
也可以将 rsync 推送到镜像主机。
需要安装的 openSUSE 包
- lighttpd
数据分发
用户数据位于“存储”和“后端”上;“存储”至关重要,后端上的大部分信息可以重建。
在挂载点和存储分发方面
- /srv/obs/{projects,sources,requests,db,remotecache,diffcache} 位于 srcserver 的“存储”上
- /srv/obs/{events,log,run} 将在“存储”和“后端”上创建
- /srv/obs/{info,build,workers,jobs,repos,repos_sync} 将在“后端”上创建
后端 /srv/obs/build/ 区域由发布者选择性地镜像到下载服务器(如何?)或可以直接访问或通过反向代理访问。
仍需描述:/srv/obs/
trees/ upload/