CodeFever Community Edition (A Self-hosted Git Services)

Overview


Logo

CodeFever Community

完全开源的 Git 代码托管服务

contributions welcome Website Docker

Built with ❤︎ by CodeFever


Screenshot

英文版本文档正在完善中, 欢迎 提交文档

English

目录

Demo

请点击这里查看 Demo(仅测试使用,请勿上传正式代码,本 Demo 运行在 1 核 1 GB 内存的云服务器上,大家可以体验下速度)

功能特性

  • 🆓 永久免费: 永久免费提供给大家使用,您无需担心付费
  • ❤️ 完整开源: 毫无保留的完整开源,无任何编译或加密代码
  • 🥬 轻量安装: 极简设计风格,排除重度冗余的多余功能
  • ⚡️ 性能高效 速度极快,对服务器资源要求极低,1核CPU/1G内存即可运行
  • ♾️ 无限仓库 没有任何仓库数量、使用数量的限制
  • ⌨️ 代码对比 支持提交代码的不同版本支持高亮显示对比
  • 🛤️ 分支和标签 完整支持 Git 原生功能,帮助更清晰的管理代码
  • 🙋‍♂️ 合并请求(Merge Request) 支持多人协作,让代码版本控制更顺畅
  • 🙅🏻‍♀️ 分支保护 分支保护功能让代码提交安全可控,代码 Review 更容易清晰
  • 👥 多人协作 支持多人团队协作,并可以设置每个成员的角色和权限
  • 🖥️ 管理后台 支持超级管理员后台,可以让团队leader管理所有项目和用户信息

如何安装

CodeFever 提供 从头开始安装Docker 镜像安装 两种安装方式,可以根据自己的实际需要选择安装方式。

  • (推荐) 最简单的安装方式是使用 Docker,只需要一行命令即可完成,具体可见: Docker 镜像安装
  • 如果出于学习、研究或定制化需求,也可以手动方式安装,具体可见:从头开始安装

使用说明

问题反馈

  • 如果你在使用过程中遇到期望外的结果,欢迎提交 Issue。参照: 提交问题
  • 如果你希望在 CodeFever Community 添加一些特性,也欢迎提交 Issue。参照: 提交特性请求

贡献代码

欢迎提交 PR, 请确定修复 Bug 后或者新增 Feature 后进行适当的测试。

  • 如果 PR 内容是问题,请先提交 Issue 并在提交 PR 时引用该 Issue。参照: 提交问题修复
  • 如果 PR 内容是新特性,请在 PR 中请尽量详细描述此特性的内容,如果此 PR 是针对某个特性请求的提交,在提交 PR 时引用该 Issue。参照: 提交新特性

贡献文档

欢迎指正文档中的错误或参加翻译工作,提交 PR 前请确定文档内容表述是否准确,具体参照: 提交文档

关于

CodeFever 项目起初由 蒲公英开发者服务平台 开发和维护,项目于 2020 年 6 月上线 https://codefever.pgyer.com/ 。 经过将近两年时间打磨和稳定性验证,于 2022 年 2 月开源,接受社区的考验。

CodeFever 开源后,开源版本称为 CodeFever Conmmunity 版本。同时公有云版本继续服务,继续称为 CodeFever。

CodeFever Community蒲公英开发者服务平台 团队完整自主研发并基于 MIT 协议进行完整开源,拥有完全自主的知识产权,因此您可以放心使用而不必考虑是否侵犯他人权利。

CodeFever Community 保留了 CodeFever 的大部分功能,并且进行了更适合单机部署的优化。CodeFever Community 也会随 CodeFever 更新的同时接受来自社区的提交。

Comments
  • 无法识别Markdown格式的表格

    无法识别Markdown格式的表格

    你好,感谢你们开源的这套系统。基本的日常使用没有问题,其中我们也遇到了 合并 #82 的问题,但此时我们也遇到了Markdown格式表格无法识别,如下:

    | 命令 | AT+START_SCAN=<扫描时长>\r\n| | --- | --- | | 功能说明 | 执行该命令,开启扫描周边发出Unprovisioned Device Beacon的设备 | | 参数说明 | 扫描时长
    如:0005:表示搜索周围发出unprovisioned Device Beacon的设备5秒钟
    | | 返回值说明 | +DEV_UUID: 返回的unprovisioned Device UUID | | 适用范围 | Provisioner | | 示例说明 | AT+START_SCAN=0005\r\n
    +DEV_UUID:73FB210D4AD98F45B2DF93EE71127C68\r\n | | 注意 | 扫描时长参数务必是2个字节 |

    可以看到,上述的表格是可以被Github识别的,但是一模一样的内容在Codefever是下述这样的:

    image

    能否帮忙看看吗?

    谢谢!

    bug enhancement 
    opened by xiaolongba 15
  • 无法通过ssh的方式clone或者push代码

    无法通过ssh的方式clone或者push代码

    通过docker安装的codefever服务端无法通过ssh的方式clone或者push代码

    我在我的服务器上以及本机上都通过docker的方式部署了这个项目,http的方式似乎是可用的,但是ssh的方式似乎不能正确的拉取或者推送代码,我尝试过删除known_hosts文件并且重新配置ssh key,但这似乎并不管用

    报错信息如下:

    Cloning into 'kkk'...
    kex_exchange_identification: Connection closed by remote host
    fatal: Could not read from remote repository.
    
    Please make sure you have the correct access rights
    and the repository exists.
    
    help wanted 
    opened by NorthCityChen 14
  • 查看仓库提交信息出错白屏

    查看仓库提交信息出错白屏

    出错路由:/XXX/xxx/commits

    错误信息:

    TypeError: Cannot read properties of null (reading 'substr')
        at a.value (main.f834e978.js:formatted:15217:62)
        at Go (1.18365ff4.chunk.js:formatted:31258:82)
        at $o (1.18365ff4.chunk.js:formatted:31248:16)
        at Yc (1.18365ff4.chunk.js:formatted:33852:13)
        at Al (1.18365ff4.chunk.js:formatted:32985:17)
        at _l (1.18365ff4.chunk.js:formatted:32978:13)
        at Tl (1.18365ff4.chunk.js:formatted:32962:17)
        at yl (1.18365ff4.chunk.js:formatted:32726:17)
        at 1.18365ff4.chunk.js:formatted:29658:33
        at t.unstable_runWithPriority (1.18365ff4.chunk.js:formatted:34517:20)
    

    不是所有的仓库都会出错,就这个出错,疑似对提交信息的字符串处理出现问题,下方是我这边repository/commitList返回的提交信息数据

    https://gist.github.com/shuyudao/c30eeb085817b475ea20d432cf4302b7

    bug 
    opened by shuyudao 12
  • git clone后提示warning: remote HEAD refers to nonexistent ref, unable to checkout.

    git clone后提示warning: remote HEAD refers to nonexistent ref, unable to checkout.

    仓库的创建和git push都没有问题。但是再git clone的时候出现如下错误

    git clone  https://XXX/testgit.git
    Cloning into 'testgit'...
    Username for 'https://XXX': XXX
    Password for 'https://XXX:
    remote: Enumerating objects: 3, done.
    remote: Counting objects: 100% (3/3), done.
    remote: Total 3 (delta 0), reused 0 (delta 0)
    Unpacking objects: 100% (3/3), done.
    warning: remote HEAD refers to nonexistent ref, unable to checkout.
    

    每一个仓库都是如此。进入之后是空文件夹没有内容。虽然可以通过一些操作看到内容但是很不方便。我这是哪一步出现了问题呢? 使用docker-compose部署,配置文件如下,

    version: "3"
    services:
      codefever:
        image: pgyer/codefever-community-lite:latest
        ports:
          - "5000:80"
          - "5001:22"
        depends_on:
          - db
        volumes:
          - ./data/git-storage:/data/www/codefever-community/git-storage
          - ./data/logs:/data/www/codefever-community/application/logs
        environment:
          DB_HOST: "db"
          DB_PORT: "3306"
          DB_USER: "root"
          DB_PASS: "123456" # Need to be the same as MYSQL_ROOT_PASSWORD
          DB_NAME: "codefever_community"
    
      db:
        image: mysql:5.7.31
        restart: always
        #privileged: true
        volumes:
          - ./data/mysql:/var/lib/mysql
        environment:
          MYSQL_ROOT_PASSWORD: "123456"
        command: [
            '--character-set-server=utf8mb4',
            '--collation-server=utf8mb4_general_ci',
            '--max_connections=3000'
        ]
    

    使用的是最新的镜像

    [rui@gpu111 codefever]$ docker pull  pgyer/codefever-community-lite:latest
    latest: Pulling from pgyer/codefever-community-lite
    Digest: sha256:67d046b0d220cfacc2125bfd4cc74eb25f19d7765933efec1d278faa74d55575
    Status: Image is up to date for pgyer/codefever-community-lite:latest
    docker.io/pgyer/codefever-community-lite:latest
    [rui@gpu111 codefever]$ docker images
    REPOSITORY                       TAG       IMAGE ID       CREATED        SIZE
    pgyer/codefever-community        latest    864d830cb917   2 months ago   2.14GB
    pgyer/codefever-community-lite   latest    ae003fb58060   4 months ago   1.76GB
    mysql                            5.7.31    42cdba9f1b08   2 years ago    448MB
    

    在A机器上运行这个容器,在B机器上通过nginx反向代理到这个机器的5000端口,nginx配置文件如下。

    server {
        listen 80;
        listen [::]:80;
    
        server_name XXX.cn;
        return 301 https://$server_name$request_uri;
    
    }
    server {
            listen       443 ssl http2 ;
            listen       [::]:443 ssl http2 ;
            server_name  XXX.cn;
    	#allow 202.120.234.0/24;
    	#deny all;
    	ssl_certificate "/XXX.pem";
            ssl_certificate_key "/XXXkey";
            ssl_session_cache shared:SSL:1m;
            ssl_session_timeout  10m;#        ssl_ciphers HIGH:!aNULL:!MD5;
            ssl_ciphers HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers on;
            client_max_body_size 1024m;
    	
    	if ($invalid_referer) {
            	return 403;
        	}
            location / {
            proxy_set_header HOST $host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    	proxy_redirect off;
    	client_max_body_size       20000m;
            client_body_buffer_size    128k;
    
            proxy_connect_timeout      90;
            proxy_send_timeout         90;
            proxy_read_timeout         90;
            proxy_buffer_size          4k;
            proxy_buffers              4 32k;
            proxy_busy_buffers_size    64k;
            proxy_temp_file_write_size 64k;
    
            proxy_pass http://192.168.25.111:5000;
    
        }
    
    }
    
    question 
    opened by UntaggedRui 5
  • 请问是否支持部署在子路径下?

    请问是否支持部署在子路径下?

    如题。

    从文档可以看出,当前codefever支持部署到 https://example.com 路径下。但我们现在只要求对外暴露一个域名,多个不同的服务需要使用子路径划分。例如,我们希望能够通过 https://example.com/codefever 的这种方式访问到codefever。请问现在codefever支持这种配置吗?如果目前不支持的话,有没有什么修改方法呢?

    question customization 
    opened by loheagn 5
  • webhook X-CodeFever-Signature 的内容验证

    webhook X-CodeFever-Signature 的内容验证

    md5({$payload} + {$secret});

    源代码中PHP json_encode(payload) 与nodejs 的JSON.stringify(payload) 返回的字符串不一致

    我的服务端为nodejs

    import crypto from 'crypto'
    console.log(crypto.createHash('md5').update(`${JSON.stringify(payload)}${screct}`).digest('hex'))
    

    md5结果与请求头中的md5不一致

    是否可以处理一下?

    stackoverflow的问题

    question 
    opened by AtWhuhu 4
  • [仅限 docker-compose 方式构建] fix: 合并请求功能:创建时提示创建失败,合并后提示合并失败(实际都成功了)

    [仅限 docker-compose 方式构建] fix: 合并请求功能:创建时提示创建失败,合并后提示合并失败(实际都成功了)

    问题描述(关联Issues:#82、#103)

    1. 创建合并请求失败

    创建合并请求时提示创建失败,页面也不刷新

    create_error

    不管它,点进去上游仓库一看,实际上已经创建成功了,

    image

    2. 合并时提示合并失败

    image

    不管它,回到合并请求页面查看,实际上已经合并完成了

    image

    错误日志示例

    # cc_notification_content 表
    Query error: Field 'nc_updated' doesn't have a default value
    Query error: Field 'nc_deleted' doesn't have a default value
    
    # cc_notification_users 表
    Query error: Field 'nu_updated' doesn't have a default value
    Query error: Field 'nu_deleted' doesn't have a default value
    

    手动解决方法

    1. 进入容器 $ docker container exec -it codefever /bin/bash
    2. 进入MYSQL $ mysql
    3. #输入下面SQL语句,修改完成后即可正常使用
    use codefever_community;
    
    alter table `cc_notification_content` alter column `nc_updated` set default '0000-00-00 00:00:00';
    alter table `cc_notification_content` alter column `nc_deleted` set default '0000-00-00 00:00:00';
    
    alter table `cc_notification_users` alter column `nu_updated` set default '0000-00-00 00:00:00';
    alter table `cc_notification_users` alter column `nu_deleted` set default '0000-00-00 00:00:00';
    
    good first issue docker fixed 
    opened by IM-Tse 3
  • 能给份详细一下的教程吗?

    能给份详细一下的教程吗?

    我使用 gentoo 发行版来的,主要是用来学习的 因为使用默认安装就是 PHP8 MYSQL8 来的 composer 我忽略了版本差异是可以安装好的 nginx 是自己编译的,主要用于 webdav nextcloud 等等一些服务上 现在想试一下你这个功能,发现不太会配置,不知道能不能教一下?谢谢的了

    user admin;
    worker_processes  4;
    pid /var/run/nginx.pid;
    events {
        use   epoll;
        worker_connections  1024;
    }
    
    http {
        include mime.types;
        default_type application/octet-stream;
        sendfile on;
        keepalive_timeout 65;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;
    
        gzip on;
        dav_ext_lock_zone zone=davlock:10m;    
        include /opt/local/nginx/conf/www.d/*.conf;
    }
    
    server {
            listen 8001;
    
            #listen 443 ssl;
            #ssl_certificate      <your_ssl_cert>.crt;
            #ssl_certificate_key  <your_ssl_cert_private_key>.key;
            #ssl_session_cache    shared:SSL:1m;
            #ssl_session_timeout  5m;
            #ssl_ciphers  HIGH:!aNULL:!MD5;
            #ssl_prefer_server_ciphers  on;
    
            server_name localhost;
    
            root /data/www/codefever-community/www/;
            access_log /var/log/nginx/codefever/access_8001.log;
            error_log /var/log/nginx/codefever/error_8001.log;
    
            location ~* ^\/[0-9a-z_]+\/[0-9a-z_]+\.git {
                proxy_pass http://127.0.0.1:27555;
            }
    
            location ^~ /static/ {
                rewrite "(.*)\.map(.*)" "/static/not/found" last;
                rewrite "^/static/\d{14}/(.*)$" "/static/$1" last;
                try_files $uri /app$uri 404;
            }
    
            location ~* ^/(user|file|feature|doc|community|lang|captcha|boss|service|pricing|api(v\d+)?)?(\/.*)?$ {
                try_files $uri $uri/ /index.php;
            }
    
            location / {
                try_files $uri /app/index.html;
            }
    
            location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                fastcgi_param  ENVIRONMENT "production";
                include        fastcgi_params;
                fastcgi_buffer_size 128k;
                fastcgi_buffers 4 256k;
                fastcgi_busy_buffers_size 256k;
                fastcgi_read_timeout 300s;
            }
        }
    
        server {
            listen 8001;
    
            #listen 443 ssl;
            #ssl_certificate      <your_ssl_cert>.crt;
            #ssl_certificate_key  <your_ssl_cert_private_key>.key;
            #ssl_session_cache    shared:SSL:1m;
            #ssl_session_timeout  5m;
            #ssl_ciphers  HIGH:!aNULL:!MD5;
            #ssl_prefer_server_ciphers  on;
    
            server_name localhost-dev;
    
            root /data/www/codefever-community/www/;
            access_log /var/log/nginx/codefever/access_8001.log;
            error_log /var/log/nginx/codefever/error_8001.log;
    
            location ~* ^\/[0-9a-z_]+\/[0-9a-z_]+\.git {
                proxy_pass http://127.0.0.1:27555;
            }
    
            location ^~ /sockjs-node {
                proxy_pass http://127.0.0.1:3000;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
            }
    
            location ^~ /__webpack_dev_server__/ {
                proxy_pass http://127.0.0.1:3000;
            }
    
            location ~ ^/static/\d+/ {
                proxy_pass http://localhost;
            }
    
            location ~* ^/(user|file|feature|doc|community|lang|captcha|boss|service|pricing|api(v\d+)?)?(\/.*)?$ {
                proxy_pass http://localhost;
            }
    
            location / {
                proxy_pass http://127.0.0.1:3000;
            }
        }
    
    

    访问 http://192.168.3.50:8001/ 报错如下 File not found.

    2022/11/26 12:40:28 [error] 8116#0: *34 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.3.22, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "192.168.3.50:8001"
    2022/11/26 12:40:28 [error] 8116#0: *34 rewrite or internal redirection cycle while internally redirecting to "/app/index.html", client: 192.168.3.22, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.3.50:8001", referrer: "http://192.168.3.50:8001/"
    
    question 
    opened by car520120 1
  • docker镜像下支持使用物理机其他端口的问题

    docker镜像下支持使用物理机其他端口的问题

    在docker下搭建的时候能否使用物理机的其他端口来映射镜像的22端口 然后在系统的管理员的设置界面支持修改ssh的端口 同时需要更新克隆代码时ssh的链接从[email protected]:testaaa/testproject.git 改为ssh://[email protected]:9022/testaaa/testproject.git

    enhancement question 
    opened by skyatgit 8
Owner
PGYER
蒲公英开发者服务平台
PGYER
Official OpenMage LTS codebase | Migrate easily from Magento Community Edition in minutes

Official OpenMage LTS codebase | Migrate easily from Magento Community Edition in minutes! Download the source code for free or contribute to OpenMage LTS | Security vulnerability patches, bug fixes, performance improvements and more.

OpenMage 782 Jan 3, 2023
Deutsches Sprachpaket für Magento 2 Community Edition

Magento 2 German LocalePack de_DE Deutsches Sprachpaket für Magento 2 Community Edition (Version 2.4.2) Die Übersetzung wurde von deutschen Mutterspra

Splendid Internet GmbH 87 Sep 25, 2022
Version is a library that helps with managing the version number of Git-hosted PHP projects

Version Version is a library that helps with managing the version number of Git-hosted PHP projects. Installation You can add this library as a local,

Sebastian Bergmann 6.3k Dec 26, 2022
Your private self hosted composer repository with user management

Devliver Your private self-hosted composer repository. Requirements Docker MariaDB/MySQL the running docker container has access to private git reposi

Nikita Loges 53 Dec 30, 2022
Your personal Self-hosted or offline YoutTube Kids!

New Tube You have a problem with youtube kids and need online youtube? This is yours. NewTube! Simply clone the project and put your mp4 video & cover

Javad Adib 7 Dec 28, 2022
FreshRSS is a self-hosted RSS feed aggregator like Leed or Kriss Feed.

Read this document on github.com/FreshRSS/FreshRSS/ to get the correct links and pictures. Version française FreshRSS FreshRSS is a self-hosted RSS fe

FreshRSS 5.3k Jan 4, 2023
Raspberry Pi Self Hosted Server Based on Docker / Portainer.io

Pi-Hosted Portainer Template V2 This repository is a collection of tutorials for hosting a variety of server applications using Docker and Portainer.

don 776 Jan 8, 2023
A self-hosted alternative to putting your code snippets on Gist.

WP-Gistpen Contributors: JamesDiGioia Donate link: http://jamesdigioia.com/ Tags: gist, code snippets, codepen Requires at least: 5.2 Requires PHP: 5.

Intraxia 71 Nov 15, 2022
Your self-hosted bookmark archive. Free and open source.

Your self-hosted bookmark archive. Free and open source. Contents About LinkAce Support Setup Contribution About LinkAce LinkAce is a self-hosted arch

Kevin Woblick 1.7k Jan 2, 2023
Yclas Self Hosted is a powerful script that can transform any domain into a fully customizable classifieds site within a few seconds.

Yclas 4.4.0. Description Yclas self-hosted is a powerful script that can transform any domain into a fully customizable classifieds site within a few

Yclas 299 May 29, 2022
Jump is yet another self-hosted startpage for your server designed to be simple, stylish, fast and secure.

Jump Jump is yet another self-hosted startpage for your server designed to be simple, stylish, fast and secure. Features Fast, easy to deploy, secure

Dale Davies 309 Dec 27, 2022
Self-hosted game library.

A self-hosted game browser. About Cartridge is a convenient browser for your game collection with easy file downloads and automatically imported metad

null 111 Dec 25, 2022
A very simple way to handle self-hosted WordPress plugin updates

Simple WP Plugin Update handling A very simple way to handle self-hosted WordPress plugin updates This uses the "update_plugins_{$hostname}" filter in

Peter Viszt 5 Jun 13, 2023
Some Joomla! 4.x Web Services Api Examples and Experiments to raise the level of awareness of the huge potiental of Joomla! 4.x Web Services.

j4x-api-examples WHY? If you are a Joomla! developer or want to become a Joomla! developer there is a new resource for you The Official New Joomla! Ma

Mr Alexandre ELISÉ 11 Nov 29, 2022
A server software for Minecraft: Bedrock Edition in PHP

A highly customisable, open source server software for Minecraft: Bedrock Edition written in PHP Getting started Documentation Installation instructio

PMMP 3k Dec 31, 2022
An implementation of the Minecraft: Bedrock Edition protocol in PHP

BedrockProtocol An implementation of the Minecraft: Bedrock Edition protocol in PHP This library implements all of the packets in the Minecraft: Bedro

PMMP 94 Jan 6, 2023
A game-mode for Minecraft: Bedrock Edition

HardCoreFactions This is an unpaid commission that was only released for educational purposes, consider using it as a reference rather than having it

Doge 3 Sep 8, 2021
2022 edition of the inRage Theme fully based on Gutenberg with the support of Roots Sage 10

2022 Edition - inRage theme This version of the theme is compatible with the Full site editing of Wordpress 5.8/5.9 and use Sage 10 in order to manage

inRage 5 Jan 3, 2023