基于 CodeFever Community (https://github.com/PGYER/codefeverCodeFever 是完全免费开源的 Git 代码托管服务,支持一行命令安装到自己服务器!CodeFever Community Edition (A Self-hosted Git Services)! - PGYER/codefeverhttps://github.com/PGYER/codefever)系统做了修改,升级优化 新的仓库地址:
https://gitee.com/caiqiaohch/codefeverhttps://gitee.com/caiqiaohch/codefever
gitlib太重了,这个开源系统功能还不足,为了满足低配置1核心2G的云服务器部署需求,特增加了远程仓库导入和 CI/CD 功能,在线编辑文件,正常显示md文件,支持各种文本显示,png等图片显示预览,对齐gitlib 功能,特将其开源:
完全开源的 Git 代码托管服务
增加内容:
本项目在CodeFever Community官方版本基础上做了一批增强, 主要集中在CI/CD、外部仓库导入与同步、在线文件管理、后台运维四个方面:
展开查看本次改动明细
1. CI/CD:兼容官方 gitlab-runner(新增)
- 新增协议兼容层
/api/v4/*(application/controllers/runnerapi.php):Runner 注册 / 校验 / 注销 / 重置令牌、拉取作业、分片回传日志、更新作业状态。官方gitlab-runner二进制可直接注册到 CodeFever,.gitlab-ci.yml原样复用, Runner 侧零改造。 - 新增管理接口
application/controllers/api/ci.php:流水线创建 / 取消 / 重试 / 删除、单作业重试、从失败阶段重试、作业级取消、when: manual手动触发、定时流水线、CI Lint 校验、CI 变量(env / file, 支持环境作用域)、CI 设置、统计看板、Runner 二进制下载。 - 新增数据表:
cc_ci_runners、cc_ci_runner_reg_tokens、cc_ci_pipelines、cc_ci_jobs、cc_ci_schedules、cc_ci_settings、cc_ci_variables、cc_ci_cache_versions。 - 新增权限项
UAC_REPO_CI_MANAGE(0x24), Developer 及以上角色可管理 CI。 - Runner 拉取代码走
gitlab-ci-token:<job token>BasicAuth, 在apiv1/internal.php::authHTTP中鉴权并校验仓库归属, Go 网关零改动。 - 作业日志写入
/data/codefever/ci-traces/<job_id>.log, 不入库, 避免大字段频繁写入。
2. 后台 worker(新增application/controllers/worker.php)
- 单文件锁保证单实例常驻循环, 统一处理:导入任务执行、流水线解析与作业派发、定时流水线触发、失联 / 超时作业自动回收(判 failed)、trace 日志保留期(默认 30 天)与目录容量(默认 2GB)清理。
- push 触发路径只落一条流水线记录, 重活全部交给 worker, 不拖慢 push、不长期占用 php-fpm。
3. 外部仓库导入与同步(新增)
repository_model::import()+Import_task_model(cc_import_tasks):支持 GitHub / GitLab / Gitee 一键导入;Gitee 可用访问令牌直接列出并挑选仓库。- 导入为后台异步任务:提交后返回任务号, 前端可轮询进度(clone 进度百分比 / 状态 / 结果仓库), 用户离开页面不受影响;凭据仅用于 clone, 用完即清除且永不回传前端。
- 新增接口:
import、importTask、importTasks、giteeRepos、remoteInfo(自动识别仓库名 / 展示名 / 描述 / 默认分支)、sync(镜像式重新同步)、updateSourceUrl(维护同步源与账密或个人令牌)。 - 新增常量
GIT_COMMAND_IMPORT, 复用 fork 的裸克隆逻辑。
4. 在线文件管理(新增)
saveFile/createFile/deleteFile/renameFile/uploadFile:浏览器内直接新建、编辑、删除、重命名与上传文件, 自动生成提交, 带baseSha冲突检测(冲突返回0x040D)。
5. 下载与展示(新增 / 修复)
downloadZip:按分支或 Tag 打包下载仓库源码 ZIP。reporaw:私有仓库图片经 Web 会话鉴权输出, 解决 Markdown 内图片无法显示的问题;二进制安全读取(新增Command::runBinary), 单文件上限 50MB;文本文件 mime 兜底识别(json / yaml / shell 等)。- 仓库详情页暴露当前用户角色, 供前端判断写操作入口。
6. 账号与后台运维
- 个人访问令牌:新增
cc_user_tokens与api/user.php的listToken/addToken/removeToken, 支持 gitee / github / other, 令牌值打码且不回传, 供仓库同步使用。 - 管理后台新增删除用户 / 仓库 / 仓库组:删除用户前自动把其仓库与组转交给操作管理员, 删除仓库 / 组时级联清理 CI 流水线与作业、trace、变量、Runner、Webhook、合并请求、成员等关联数据。
- 仓库体积统计与缓存(
getRepositorySizes), 管理后台与仓库设置展示体积, push 后自动失效重算。
7. 其他修复与改进
- 修复 SSH / HTTP 网关仓库路径解析不一致(
internal.php正则兼容无前导斜杠)。 - 首次推送时自动把被推送的真实分支设为默认分支(不再写死 master)。
- 修复文件历史查询(
git log --left-only导致取不到历史)。 - 统一仓库组名 / 显示名的格式与长度校验。
- 新增错误码
0x0413(Sync Fail)。 - 数据库结构除通用脚本外, 新增 MySQL 5.7 / MySQL 8.0 专用脚本(
misc/db_structure.mysql57.sql、misc/db_structure.mysql80.sql);create_db.sh/update.sh不再引用已废弃的db_update_20220215.sql。 - 引入 YAML 解析库
Spyc(application/third_party/Spyc.php)用于解析.gitlab-ci.yml。
8. CentOS 9 一键初始化与部署脚本(新增misc/centos9/)
centos9-init.sh: 全新 CentOS 9 / Stream 9 服务器的系统初始化(软件源、Nginx、MariaDB、PHP 7.4、Git、Go、git 用户、数据目录、PHP-FPM 池、SELinux / 防火墙), 幂等设计。centos9-install.sh: 应用部署(配置文件生成、Composer 依赖、Go 网关编译、systemd 单元、nginx vhost、数据库初始化、定时任务), 支持环境变量非交互执行, 并自动生成自签名证书。- 新增
codefever-workersystemd 单元, 让后台 worker(导入任务 / CI 流水线 / 定时触发 / 作业回收 / trace 清理)随系统常驻与开机自启。
如何安装
CodeFever提供Docker 镜像安装、从零开始安装和CentOS 9 一键脚本安装三种安装方式,可以根据自己的实际需要选择安装方式。
- (推荐)最简单的安装方式是使用
Docker, 只需要一行命令即可完成, 具体可见: Docker 镜像安装 - 如果出于学习、研究或定制化需求, 也可以手动方式安装, 具体可见: 从零开始安装
- 如果服务器是CentOS 9 / CentOS Stream 9, 可直接使用新增的一键脚本(需 root, 幂等可重复执行):
bash misc/centos9/centos9-init.sh—— 系统初始化: EPEL / Remi 源、Nginx、MariaDB 10.5、PHP 7.4(含yaml扩展)、Git、Go、cronie、sendmail, 以及git运行用户、/data/codefever数据目录(git-storage / file-storage / ssl / ci-traces)、PHP-FPM 池(listen127.0.0.1:9000, 以 git 身份运行)、SELinux 与防火墙放行。bash misc/centos9/centos9-install.sh—— 应用部署: 生成env.yaml/config.yaml(随机 session / totp 密钥与 gateway token)、软链数据目录、安装 Composer 依赖、编译 Go 网关、部署 systemd 单元(codefever-httpgw/codefever-worker/codefever-authkeys)与 nginx vhost、初始化数据库、注册 git 定时任务并启动全部服务。域名、证书与数据库参数可用环境变量(DEPLOY_DIR/DOMAIN/SSL_CRT/SSL_KEY/SSL_AUTO/DB_PASS)传入, 未传则交互式填写;未提供证书时自动生成自签名证书。
- 数据库结构除通用的
misc/db_structure.sql外, 还提供了 MySQL 5.7 / MySQL 8.0 专用脚本(misc/db_structure.mysql57.sql/misc/db_structure.mysql80.sql), 可按实际数据库版本选择