安装部署gitea

gitea介绍

官网

https://about.gitea.cn/

最近发现gitea的官网发生了变化,也不知道什么时候改了,之前的域名是gitea.io的,但是现在会跳转到about.gitea.cn域名上

可能是商业化了吧,但这也并不意味着 Gitea 就变成了商业软件。

Gitea 目前仍然是一个完全免费且开源的项目,任何人都可以自由地下载、使用、修改和分发。

Gitea 的源代码仍然托管在 GitHub 上,任何人都可以参与项目的开发和维护。

商业化应该也是为了确保 Gitea 项目的长期稳定发展和持续改进。


代码仓库 https://github.com/go-gitea/gitea

介绍

官网上说 “Gitea 是一个轻量级全功能的 DevSecOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。”

这也正是很多人选择的原因

Gitea 是一款使用 Golang 编写的可自运营的代码管理工具。

在这个领域,名气最响的应该是 Gitlab。

但实际使用中Gitlab也有点问题,首先就是资源占用。Gitlab 是使用 ruby 编写的,好几年之前刚出来的时候,一台1G内存的虚拟主机连安装运行都做不到,着实震惊。

时至今日都已经发展到了以docker镜像分发,gitlab 仍旧会有体积和运行时资源占用的问题。

另一点就是功能,对于一般标准团队来说,gitlab的功能太过于丰富,这是往好的地方说,往坏的地方说就是它包含了太多不需要的东西,而这些东西还占用磁盘和运行时资源。

当我们只是需要它具有版本管理的功能的时候,gitlab就太重了,所以很多开发在开发的时候会选择gitea这类非常轻量化的代码仓库

而且从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。

包括 Git 托管、代码审查、团队协作、软件包注册和 CI/CD。

Gitea 最初是从 Gogs 分支而来,目前几乎所有代码都已更改。

功能特性

  • 代码托管: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 提供多种语言界面,适应全球范围内的用户,促进了国际化和本地化。

更多功能特性:详见:https://docs.gitea.cn/installation/comparison#general-features

系统要求

  • 树莓派Pi3功能强大,足以运行 Gitea 来处理小型工作负载。
  • 对于小型团队/项目而言,2 个 CPU 内核和 1GB 内存通常就足够了。
  • 在 UNIX 系统上,Gitea 应使用专用的非 root 系统账户运行。
    • 注意:Gitea 管理 ~/.ssh/authorized_keys 文件。以普通用户身份运行 Gitea 可能会破坏该用户的登录能力。
  • Git 需要 2.0.0 或更高版本。
    • Git Large File Storage 如果启用,且 Git 版本大于等于 2.1.2,则该选项可用
    • 如果 Git 版本大于等于 2.18,将自动启用 Git 提交历史图形化展示功能

对比 Gitea 与其它 Git 托管工具

与其他代码仓库的对比可以参考官网的相关信息

https://docs.gitea.cn/installation/comparison#主要特性

安装部署

docker compose部署

环境

系统 docker版本 docker-compose版本 gitea版本 数据库
ubuntu 22.04 27.5.1 v2.32.4 1.23.4 mysql 8.0

docker compose资源清单文件

networks:
  gitea:
    external: false

services:
  server:
    image: docker.gitea.com/gitea:1.23.4
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=mysql
      - GITEA__database__HOST=db:3306
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=gitea
      - GITEA__webhook__ALLOWED_HOST_LIST=*
      # 一定要设置好下面的两个环境变量,如果不设置好,使用的时候可能ssh克隆的时候会有问题
      - SSH_PORT=20022
      - SSH_LISTEN_PORT=22
      # 设置应用程序名称,在页面标题中使用.
      - APP_NAME="这里是标题"
      # 日志部分
      - GITEA__log__MODE=file
      - GITEA__log__ROOT_PATH=/data/gitea/log
      - GITEA__log__LEVEL=Debug
      - GITEA__log__FILE_NAME=gitea.log
      - GITEA__log__MAX_DAYS=7
      # 左移20表示1M 左移23就是8M
      - GITEA__log__MAX_SIZE_SHIFT=23
    restart: always
    networks:
      - gitea
    volumes:
      - ./gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "30000:3000"
      - "20022:22"
    depends_on:
      - db
  db:
    image: mysql:8.0
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=gitea
      - MYSQL_USER=gitea
      - MYSQL_PASSWORD=gitea
      - MYSQL_DATABASE=gitea
    networks:
      - gitea
    command:
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_bin
    volumes:
      - ./mysql:/var/lib/mysql

这里需要注意的是设置环境变量
SSH_PORT 是克隆 URL 中显示的 SSH 端口。
SSH_LISTEN_PORT 内置 SSH 服务器的端口
建议最好明确指定,而且如果指定,必须两个同时指定
因为 SSH_PORT 的默认值是22 而 SSH_LISTEN_PORT 的默认值是 %(SSH_PORT)s
也就是引用的 SSH_PORT 的值
当然,也可以只指定 SSH_PORT,然后在端口映射的时候将映射的端口改成 容器内外的都是指定的 SSH_PORT 值

日志部分
如果不设置,那默认只在控制台输出日志,并且级别是info
日志的配置可以参考 https://docs.gitea.cn/administration/logging-config

相关环境变量参数

可以通过环境变量配置 Gitea 的一些设置:

(默认值以粗体显示)

  • APP_NAME“Gitea: Git with a cup of tea”:应用程序名称,在页面标题中使用。
  • RUN_MODEprod:应用程序运行模式,会影响性能和调试。"dev","prod"或"test"。
  • DOMAINlocalhost:此服务器的域名,用于 Gitea UI 中显示的 http 克隆 URL。
  • SSH_DOMAINlocalhost:该服务器的域名,用于 Gitea UI 中显示的 ssh 克隆 URL。如果启用了安装页面,则 SSH 域服务器将采用以下形式的 DOMAIN 值(保存时将覆盖此设置)。
  • SSH_PORT22:克隆 URL 中显示的 SSH 端口。
  • SSH_LISTEN_PORT%(SSH_PORT)s:内置 SSH 服务器的端口。
  • DISABLE_SSHfalse:如果不可用,请禁用 SSH 功能。如果要禁用 SSH 功能,则在安装 Gitea 时应将 SSH 端口设置为 0。
  • HTTP_PORT3000:HTTP 监听端口。
  • ROOT_URL"":覆盖自动生成的公共 URL。如果内部 URL 和外部 URL 不匹配(例如在 Docker 中),这很有用。
  • LFS_START_SERVERfalse:启用 git-lfs 支持。
  • DB_TYPEsqlite3:正在使用的数据库类型[mysql,postgres,mssql,sqlite3]。
  • DB_HOSTlocalhost:3306:数据库主机地址和端口。
  • DB_NAMEgitea:数据库名称。
  • DB_USERroot:数据库用户名。
  • DB_PASSWD"empty" :数据库用户密码。如果您在密码中使用特殊字符,请使用“您的密码”进行引用。
  • INSTALL_LOCKfalse:禁止访问安装页面。
  • SECRET_KEY"" :全局密钥。这应该更改。如果它具有一个值并且 INSTALL_LOCK 为空,则 INSTALL_LOCK 将自动设置为 true。
  • DISABLE_REGISTRATIONfalse:禁用注册,之后只有管理员才能为用户创建帐户。
  • REQUIRE_SIGNIN_VIEWfalse:启用此选项可强制用户登录以查看任何页面。
  • USER_UID1000:在容器内运行 Gitea 的用户的 UID(Unix 用户 ID)。如果使用主机卷,则将其与 /data 卷的所有者的 UID 匹配(对于命名卷,则不需要这样做)。
  • USER_GID1000:在容器内运行 Gitea 的用户的 GID(Unix 组 ID)。如果使用主机卷,则将其与 /data 卷的所有者的 GID 匹配(对于命名卷,则不需要这样做)。

使用环境变量管理部署

上面的那些变量是可以直接引用的环境变量

但是并不全面,app.ini 中的任何设置都可以使用以下形式的环境变量进行设置或覆盖:GITEA__SECTION_NAME__KEY_NAME

每次 docker 容器启动时都会应用这些设置。

例如

app.ini 中数据库的配置上是

[database]
PATH = /data/gitea/gitea.db
DB_TYPE = mysql
HOST = db:3306
NAME = gitea
USER = gitea
PASSWD = gitea
LOG_SQL = false
SCHEMA = 
SSL_MODE = disable

那么我们的环境变量就可以配置成

...
services:
  server:
    environment:
      - GITEA__database__DB_TYPE=mysql
      - GITEA__database__HOST=db:3306
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=gitea
      - GITEA__webhook__ALLOWED_HOST_LIST=*

如果我们希望修改邮箱

app.ini 中邮箱的配置上是

[mailer]
ENABLED = true
SMTP_ADDR = smtp.xxx.com
SMTP_PORT = 465
FROM = xxx@xxx.com
USER = xxx@xxx.com
PASSWD = xxxxxxxxx

那么我们的yaml文件就可以写成

...
services:
  server:
    environment:
      - GITEA__mailer__SMTP_ADDR=smtp.xxx.com
      - GITEA__mailer__SMTP_PORT=465
      - GITEA__mailer__FROM=xxx@xxx.com
      - GITEA__mailer__USER=xxx@xxx.com
      - GITEA__mailer__PASSWD=xxxxxxxxx

Gitea 将为每次新安装自动生成新的 SECRET_KEY 并将它们写入 app.ini

如果您想手动设置 SECRET_KEY,您可以使用以下 docker 命令来使用 Gitea 内置的方法生成 SECRET_KEY

安装后请妥善保管您的 SECRET_KEY,如若丢失则无法解密已加密的数据。

以下命令将向 stdout 输出一个新的 SECRET_KEYINTERNAL_TOKEN,然后您可以将其放入环境变量中。

docker run -it --rm docker.gitea.com/gitea:1.23.4 gitea generate secret SECRET_KEY
docker run -it --rm docker.gitea.com/gitea:1.23.4 gitea generate secret INTERNAL_TOKEN

设置成环境变量

...
services:
  server:
    environment:
      - GITEA__security__SECRET_KEY=[generate secret SECRET_KEY执行的返回值]
      - GITEA__security__INTERNAL_TOKEN=[generate secret INTERNAL_TOKEN 执行的返回值]

运行

docker compose up -d

配置https

准备域名,准备证书

networks:
  gitea:
    external: false

services:
  server:
    image: docker.gitea.com/gitea:1.23.4
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=mysql
      - GITEA__database__HOST=db:3306
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=gitea
      - GITEA__webhook__ALLOWED_HOST_LIST=*
      # 添加下面的部分
      # 添加设置域名
      - GITEA__server__DOMAIN=xxx.xxx
      # 设置通过ssh拉取代码的域名
      - GITEA__server__SSH_DOMAIN=xxx.xxx
      # 设置哪些域名或IP地址是被允许迁移到本gitea上的
      - GITEA__migrations__ALLOWED_DOMAINS=10.0.0.200,*.gitee.com,gitee.com,github.com,*.github.com
      # 把协议修改成https
      - GITEA__server__PROTOCOL=https
      # 这里需要设置容器外部访问的url  端口也是映射到宿主机的端口
      - GITEA__server__ROOT_URL=https://xxx.xxx:30000/
      # 这里是设置容器内部的端口
      - GITEA__server__HTTP_PORT=3000
      # 下面两个是设置证书,挂载上来的证书
      - GITEA__server__CERT_FILE=/data/ssl/fullchain.pem
      - GITEA__server__KEY_FILE=/data/ssl/privkey.pem


      - SSH_PORT=20022
      - SSH_LISTEN_PORT=22
      - GITEA__log__MODE=file
      - GITEA__log__ROOT_PATH=/data/gitea/log
      - GITEA__log__LEVEL=Debug
      - GITEA__log__FILE_NAME=gitea.log
      - GITEA__log__MAX_DAYS=7
      # 左移20表示1M 左移23就是8M
      - GITEA__log__MAX_SIZE_SHIFT=23
    restart: always
    networks:
      - gitea
    volumes:
      - ./gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
      # 将证书文件夹挂载上来
      - ./../xxx.xxx.ssl:/data/ssl
    ports:
      - "30000:3000"
      - "20022:22"
    depends_on:
      - db
  db:
    image: mysql:8.0
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=gitea
      - MYSQL_USER=gitea
      - MYSQL_PASSWORD=gitea
      - MYSQL_DATABASE=gitea
    networks:
      - gitea
    command:
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_bin
    volumes:
      - ./mysql:/var/lib/mysql

二进制方式安装

前提是需要准备好数据库 需要准备好数据库以及创建拥有权限的用户

所有打包的二进制程序均包含 SQLite,MySQL 和 PostgreSQL 的数据库连接支持,同时网站的静态资源均已嵌入到可执行程序中,这一点和曾经的 Gogs 有所不同。

下载

https://dl.gitea.com/gitea/

选择适合的版本

这里以64-bit 的 Intel/AMD 平台 的Linux为例

wget -O gitea https://dl.gitea.com/gitea/1.23.4/gitea-1.23.4-linux-amd64
chmod +x gitea

验证GPG签名

Gitea 对打包的二进制文件使用 GPG密钥 签名以防止篡改。 请根据对应文件名 .asc 中包含的校验码检验文件的一致性。

gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
gpg --verify gitea-1.23.4-linux-amd64.asc gitea-1.23.4-linux-amd64

校验正确时的信息为 Good signature from "Teabot <teabot@gitea.io>"

校验错误时的信息为 This key is not certified with a trusted signature!

准备环境

检查是否安装 Git。要求 Git 版本 >= 2.0

git --version

创建用户(推荐使用名称 git

# On Ubuntu/Debian:
adduser \
   --system \
   --shell /bin/bash \
   --gecos 'Git Version Control' \
   --group \
   --disabled-password \
   --home /home/git \
   git

# On Fedora/RHEL/CentOS:
groupadd --system git
adduser \
   --system \
   --shell /bin/bash \
   --comment 'Git Version Control' \
   --gid git \
   --home-dir /home/git \
   --create-home \
   git

创建工作路径

mkdir -p /var/lib/gitea/{custom,data,log}
chown -R git:git /var/lib/gitea/
chmod -R 750 /var/lib/gitea/
mkdir /etc/gitea
chown root:git /etc/gitea
chmod 770 /etc/gitea

注意: 为了让 Web 安装程序可以写入配置文件,我们临时为 /etc/gitea 路径授予了组外用户 git 写入权限。建议在安装结束后将配置文件的权限设置为只读。

chmod 750 /etc/gitea
chmod 640 /etc/gitea/app.ini

如果不希望通过 Web 安装程序创建配置文件,可以将配置文件设置为仅供 Gitea 用户只读( owner/group root:git, mode 0640)并手工创建配置文件:

  • 设置 INSTALL_LOCK=true 关闭安装界面
  • 手动配置数据库连接参数
  • 使用 gitea generate secret 创建 SECRET_KEYINTERNAL_TOKEN
  • 提供所有必要的密钥

获取密钥的方式可以参考官方文档的命令

https://docs.gitea.cn/administration/command-line/#generate

配置 Gitea 工作路径

提示: 如果使用 Systemd 管理 Gitea 的 Linux 服务,你可以采用 WorkingDirectory 参数来配置工作路径。 否则,使用环境变量 GITEA_WORK_DIR 来明确指出程序工作和数据存放路径。

export GITEA_WORK_DIR=/var/lib/gitea/

复制二进制文件到全局位置

cp gitea /usr/local/bin/gitea

添加 bash/zsh 自动补全(从 1.19 版本开始)

可以在 contrib/autocompletion/bash_autocomplete 找到启用 bash 自动补全的脚本。可以将其复制到 /usr/share/bash-completion/completions/gitea,或在 .bashrc 中引用。

同样地,zsh 自动补全的脚本可以在 contrib/autocompletion/zsh_autocomplete 找到。您可以将其复制到 /usr/share/zsh/_gitea,或在您的 .zshrc 中引用。

运行 Gitea

1. 创建服务自动启动 Gitea(推荐)

使用systemd 管理

2. 通过命令行终端运行

GITEA_WORK_DIR=/var/lib/gitea/ /usr/local/bin/gitea web -c /etc/gitea/app.ini

安装界面

这里以docker compose部署的为例

访问 本机的30000端口,因为映射的端口是30000

设置数据库

不要修改,因为这些参数是在docker compose资源清单文件中设置的,数据库初始化就是新建的这个用户和密码

如果修改了,也需要在mysql数据库中新建对应的用户并给权限

参考命令

SET old_passwords=0;
-- 创建用户
CREATE USER 'gitea'@'192.0.2.10' IDENTIFIED BY 'gitea';

-- 创建数据库
CREATE DATABASE giteadb CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';

-- 授权
GRANT ALL PRIVILEGES ON giteadb.* TO 'gitea'@'192.0.2.10';
FLUSH PRIVILEGES;

设置网站相关

这里端口部分一定不要改动,因为在容器的映射端口已经设置好了,在这里改动,就无法正常访问了,所以如果是容器部署的话,这里的端口一定不要动

邮箱部分的配置

其他的一些配置

管理员账号的设置

注意这里不能使用admin账户,会提示禁止使用

最后点击立即安装



界面

首页

登录后的首页

后台管理页

个人主页

swagger API的页面

需要访问 /api/swagger 例如我这里 http://10.0.0.200:30000/api/swagger

posted @ 2024-03-12 17:40  厚礼蝎  阅读(2073)  评论(0)    收藏  举报