多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 概述 Gitea 是一个轻量级的 DevOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。包括 Git 托管、代码审查、团队协作、软件包注册和 CI/CD。它与 GitHub、Bitbucket 和 GitLab 等比较类似。 Gitea 最初是从[Gogs](http://gogs.io/)分支而来,几乎所有代码都已更改 Gitea是一个基于Go语言开发的开源自助Git服务,它是Gogs的一个分支(或者说是一个社区驱动的Fork)。Gogs是一款轻量级的自助Git服务,最初由Unknwon开发,于2014年5月发布首个版本。然而,由于Gogs项目的一些社区成员对项目的发展方向和功能有不同的看法,并希望推动一些新的特性和改进,因此一些社区成员选择从Gogs分叉出一个新的项目,这就是Gitea。 ## 目标 Gitea的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好 的自建 Git 服务。 采用Go作为后端语言,只需生成一个可执行程序即可。 支持 Linux, macOS 和 Windows等多平台, 支持主流的x86,amd64、 ARM 和 PowerPC等架构。 ## 功能特性 * 代码托管:Gitea⽀持创建和管理仓库、浏览提交历史和代码⽂件、审查和合并代码提交、管理协作者、管理分⽀等。它还⽀持许多常见的Git特性,⽐如标签、Cherry-pick、hook、集成协作⼯具等。 * 轻量级和快速: Gitea 的设计目标之一就是轻量级和快速响应。它不像一些大型的代码托管平台那样臃肿,因此在性能方面表现出色,适用于资源有限的服务器环境。由于其轻量级设计,Gitea 在资源消耗方面相对较低,可以在资源有限的环境下运行良好。 * 易于部署和维护: 轻松地部署在各种服务器上,不需要复杂的配置和依赖。这使得个人开发者或小团队可以方便地设置和管理自己的 Git 服务。 * 安全性: Gitea 注重安全性,提供了用户权限管理、访问控制列表等功能,可以确保代码和数据的安全性。 * 代码评审:代码评审同时支持 Pull Request workflow 和 AGit workflow。评审⼈可以在线浏览代码,并提交评审意见或问题。 提交者可以接收到评审意见,并在线回 复或修改代码。代码评审可以帮助用户和企业提⾼代码质量。 * CI/CD: Gitea Actions⽀持 CI/CD 功能,该功能兼容 GitHub Actions,⽤⼾可以采用熟悉的YAML格式编写workflows,也可以重⽤⼤量的已有的 Actions 插件。Actions 插件支持从任意的 Git 网站中下载。 * 项目管理:Gitea 通过看板和⼯单来跟踪⼀个项⽬的需求,功能和bug。⼯单⽀持分支,标签、⾥程碑、 指派、时间跟踪、到期时间、依赖关系等功能。 * 制品库: Gitea支持超过 20 种不同种类的公有或私有软件包管理,包括:Cargo, Chef, Composer, Conan, Conda, Container, Helm, Maven, npm, NuGet, Pub, PyPI, RubyGems, Vagrant等 * 开源社区支持: Gitea 是一个基于 MIT 许可证的开源项目,Gitea 拥有一个活跃的开源社区,能够持续地进行开发和改进,同时也积极接受社区贡献,保持了平台的更新和创新。 * 多语言支持: Gitea 提供多种语言界面,适应全球范围内的用户,促进了国际化和本地化。 ## 其他版本控制系统的比较 Gitea、GitLab 和 GitHub 都是流行的版本控制系统,它们在某些方面有所不同。 #### 1. 功能特点: Gitea:轻量级的 Git 服务,提供基本的代码托管、问题跟踪、团队协作等功能,适合个人开发者和小团队使用。 GitLab:功能丰富的全面开源平台,提供了包括代码托管、CI/CD、问题跟踪、Wiki 等在内的一系列功能,适合中小型企业和大型团队使用。 GitHub:全球最大的代码托管平台,提供了强大的社交功能和广泛的集成,是开源社区、个人开发者和企业最受欢迎的版本控制系统之一。 #### 2. 部署方式: Gitea:轻量级、易于部署,可以在个人服务器上快速搭建。 GitLab:功能丰富,部署和配置相对复杂,适合需要定制化和扩展性的场景。 GitHub:作为托管服务,无需用户自行部署,但提供了企业版 GitHub Enterprise,可以在私有环境中部署。 #### 3. 扩展性: Gitea:作为轻量级的 Git 服务,扩展性较有限,但支持丰富的插件和自定义配置。 GitLab:提供了丰富的集成和扩展功能,可以满足不同规模和需求的团队。 GitHub:提供了大量的集成和第三方应用,但定制化程度相对较低。 #### 4. 社区支持: Gitea:作为一个相对较新的项目,社区规模相对较小,但活跃度不断增加。 GitLab:拥有庞大的社区支持和活跃的开发者社区,提供了丰富的文档和支持资源。 GitHub:拥有庞大的开发者社区和全球范围的用户基础,是开源社区的首选平台之一。 #### 5. 商业化支持: Gitea:目前主要由社区贡献者维护,没有官方的商业支持。 GitLab:提供了企业版和托管服务 GitLab.com,以及专业的技术支持和咨询服务。 GitHub:作为微软旗下的产品,提供了企业版 GitHub Enterprise 和 GitHub Actions 等商业化服务。 ![](https://img.kancloud.cn/46/74/4674475fb6df04221e7fc5204ca1845c_877x727.png) ## 安装 这里使用二进制文件安装。所有打包的二进制程序均包含 SQLite,MySQL 和 PostgreSQL 的数据库连接支持,同时网站的静态资源均已嵌入到可执行程序中,这一点和曾经的 Gogs 有所不同。 #### 使用wget 下载 使用以下命令下载适用于 64-bit Linux 平台的二进制文件。 ``` wget -O gitea https://dl.gitea.com/gitea/1.21.1/gitea-1.21.1-linux-amd64 chmod +x gitea ``` #### 服务器设置 创建工作路径并赋予权限 ``` sudo mkdir -p /var/lib/gitea/{custom,data,log} sudo chown -R www:www /var/lib/gitea/ sudo chmod -R 750 /var/lib/gitea/ ``` 创建配置路径并赋予权限 ``` sudo mkdir /etc/gitea sudo chown root:www /etc/gitea sudo chmod 770 /etc/gitea ``` 配置 Gitea 工作路径 > **提示:** 如果使用 Systemd 管理 Gitea 的 Linux 服务,你可以采用`WorkingDirectory`参数来配置工作路径。 否则,使用环境变量`GITEA_WORK_DIR`来明确指出程序工作和数据存放路径。 ``` export GITEA_WORK_DIR=/var/lib/gitea/ ``` 复制二进制文件到全局位置 ``` cp gitea /usr/local/bin/gitea ``` 运行 Gitea ``` GITEA_WORK_DIR=/var/lib/gitea/ /usr/local/bin/gitea web -c /etc/gitea/app.ini ``` #### 以 service 方式运行 新建`gitea.service` 服务文件。 ``` sudo vim /etc/systemd/system/gitea.service ``` 示例代码 `gitea.service` ``` [Unit] Description=Gitea (Git with a cup of tea) After=network.target ### # Don't forget to add the database service dependencies ### # #Wants=mysql.service #After=mysql.service # #Wants=mariadb.service #After=mariadb.service # #Wants=postgresql.service #After=postgresql.service # #Wants=memcached.service #After=memcached.service # #Wants=redis.service #After=redis.service # ### # If using socket activation for main http/s ### # #After=gitea.main.socket #Requires=gitea.main.socket # ### # (You can also provide gitea an http fallback and/or ssh socket too) # # An example of /etc/systemd/system/gitea.main.socket ### ## ## [Unit] ## Description=Gitea Web Socket ## PartOf=gitea.service ## ## [Socket] ## Service=gitea.service ## ListenStream=<some_port> ## NoDelay=true ## ## [Install] ## WantedBy=sockets.target ## ### [Service] # Uncomment the next line if you have repos with lots of files and get a HTTP 500 error because of that # LimitNOFILE=524288:524288 RestartSec=2s Type=simple User=git Group=git WorkingDirectory=/var/lib/gitea/ # If using Unix socket: tells systemd to create the /run/gitea folder, which will contain the gitea.sock file # (manually creating /run/gitea doesn't work, because it would not persist across reboots) #RuntimeDirectory=gitea ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini Restart=always Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea # If you install Git to directory prefix other than default PATH (which happens # for example if you install other versions of Git side-to-side with # distribution version), uncomment below line and add that prefix to PATH # Don't forget to place git-lfs binary on the PATH below if you want to enable # Git LFS support #Environment=PATH=/path/to/git/bin:/bin:/sbin:/usr/bin:/usr/sbin # If you want to bind Gitea to a port below 1024, uncomment # the two values below, or use socket activation to pass Gitea its ports as above ### #CapabilityBoundingSet=CAP_NET_BIND_SERVICE #AmbientCapabilities=CAP_NET_BIND_SERVICE ### # In some cases, when using CapabilityBoundingSet and AmbientCapabilities option, you may want to # set the following value to false to allow capabilities to be applied on gitea process. The following # value if set to true sandboxes gitea service and prevent any processes from running with privileges # in the host user namespace. ### #PrivateUsers=false ### [Install] WantedBy=multi-user.target ``` 修改`user`,`home`目录以及其他必须的初始化参数,如果使用自定义端口,则需修改 PORT 参数,反之如果使用默认端口则需删除 -p 标记。 激活 gitea 并将它作为系统自启动服务 ``` sudo systemctl enable gitea sudo systemctl start gitea ``` 查看服务状态 ``` sudo systemctl status gitea.service ``` ![](https://img.kancloud.cn/27/93/2793f1dc91e836308a378089147f27ac_1143x424.png) ## 使用 服务启动没问题,就可以通过公网`IP+3000`端口访问了 ![](https://img.kancloud.cn/d2/a2/d2a255227113ceb8e69799f6def68937_1153x649.png) #### Nginx配置 ``` server { listen 80 ; server_name git.tinywan.com; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` 通过配置域名访问 ![](https://img.kancloud.cn/ff/f8/fff8a7e4420663572fd331051fc56580_1416x1017.png) 创建仓库 ![](https://img.kancloud.cn/3f/77/3f777dd6451270f5e267713124d1a9c6_991x956.png) ``` PS D:\frontend\webman.tinywan.com> git push Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Writing objects: 100% (3/3), 214 bytes | 53.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To http://git.tinywan.com:3000/resty/webman.tinywan.com.git * [new branch] main -> main ``` ![](https://img.kancloud.cn/df/b5/dfb517c08eac251f0f344eaa09998e86_1051x753.png)