侧边栏壁纸
博主头像
高压锅里的小白 博主等级

行动起来,活在当下

  • 累计撰写 65 篇文章
  • 累计创建 26 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Docker部署使用Gitea

高压锅里的小白
2024-08-04 / 0 评论 / 0 点赞 / 43 阅读 / 0 字
温馨提示:
本文最后更新于2024-08-14,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

项目简介

​ ​ Gitea 是一个轻量级的 DevOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。包括 Git 托管、代码审查、团队协作、软件包注册和 CI/CD。它与 GitHub、Bitbucket 和 GitLab 等比较类似。 Gitea 最初是从 Gogs 分支而来,几乎所有代码都已更改。

安装环境

工具 版本
系统 CentOS 7
Docker 25.0.4
Docker-Compose 2.24.7
Gitea 1.22.1

安装步骤

安装Docker

具体安装步骤见:Docker安装教程

安装docker-compose

具体安装步骤见:Docker-Compose安装教程

安装Gitea

新建目录

mkdir -p /你的路径/gitea/gitea/data /你的路径/gitea/postgresql/data

编写docker-compose.yml文件

在gitea目录下新建docker-compose.yml文件,并填写以下内容

version: "3"

networks:
  gitea:
    external: false

services:
  server:
    image: gitea/gitea:1.22.1
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=postgres
      - GITEA__database__HOST=db:5432
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=xxxxxxxxxx
    restart: always
    networks:
      - gitea
    volumes:
      - $PWD/gitea/data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "8002:3000"
      - "9001:22"
    depends_on:
      - db

  db:
    image: postgres:14
    restart: always
    environment:
      - POSTGRES_USER=gitea
      - POSTGRES_PASSWORD=xxxxxxxx
      - POSTGRES_DB=gitea
    networks:
      - gitea
    volumes:
      - $PWD/postgresql/data:/var/lib/postgresql/data
      - /etc/localtime:/etc/localtime:ro

启动容器

在docker-compose.yml文件所在目录下执行

docker-compose up -d

实时查看日志:

docker-compose logs -f

至此Gitea就安装好了。

反向代理(非必须)

我们这里使用Nginx

server {
    listen       443 ssl;
    listen       [::]:443 ssl;
    server_name  xxx.xxx.com;
    charset utf-8;
    access_log off;

    ssl_certificate      /home/cert/fullchain.cer;
    ssl_certificate_key  /home/cert/xxx.com.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    client_max_body_size 1024m;

    location / {
        proxy_pass http://localhost:8002;
        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;
    }
}

server {
    listen 80;
    listen [::]:80;
    server_name xxx.xxx.com;

    # 核心代码
    rewrite ^(.*)$ https://${server_name}$1 permanent;
}

使用教程

官方文档

Gitea Actions

从Gitea 1.19版本开始,Gitea Actions成为了内置的CI/CD解决方案。

使用 Docker compose 运行 Runner

新建目录

mkdir -p /你的路径/gitea/runner/data /你的路径/gitea/runner/conf

编写docker-compose.yml文件

在gitea目录下新建docker-compose.yml文件,并填写以下内容

version: "3.8"
services:
  runner:
    image: gitea/act_runner:nightly
    environment:
      CONFIG_FILE: /config.yaml
      GITEA_INSTANCE_URL: "${INSTANCE_URL}"
      GITEA_RUNNER_REGISTRATION_TOKEN: "${REGISTRATION_TOKEN}"
      GITEA_RUNNER_NAME: "${RUNNER_NAME}"
      GITEA_RUNNER_LABELS: "${RUNNER_LABELS}"
    volumes:
      - $PWD/runner/conf/config.yaml:/config.yaml
      - $PWD/runner/data:/data
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
参数解释
  1. CONFIG_FILE

    是您的Gitea实例的地址,如 http://192.168.8.8:3000https://gitea.com。 Runner和Job容器(由Runner启动以执行Job)将连接到此地址。 这意味着它可能与用于Web访问的 ROOT_URL不同。 使用回环地址(例如 127.0.0.1localhost)是一个不好的选择。 如果不确定使用哪个地址,通常选择局域网地址即可。

  2. GITEA_RUNNER_REGISTRATION_TOKEN

    用于身份验证和标识,例如 P2U1U0oB4XaRCi8azcngmPCLbRpUGapalhmddh23。 它只能使用一次,并且不能用于注册多个Runner。 您可以从以下位置获取不同级别的 token,从而创建出相应级别的 runner

    • 实例级别:管理员设置页面,例如 <your_gitea.com>/admin/actions/runners
    • 组织级别:组织设置页面,例如 <your_gitea.com>/<org>/settings/actions/runners
    • 存储库级别:存储库设置页面,例如 <your_gitea.com>/<owner>/<repo>/settings/actions/runners
  3. GITEA_RUNNER_NAME

    Runner名称(可选)。如果留空,将使用主机名。

  4. GITEA_RUNNER_LABELS

    Runner标签(可选)。如果留空,将使用默认标签。

启动容器

在docker-compose.yml文件所在目录下执行

docker-compose up -d

启动后可以在管理页面上看到新的Runner。

使用Actions

存储库启用Actions

即使对于启用了Gitea实例的Actions,存储库仍默认禁用Actions。

要启用它,请转到存储库的设置页面,例如 your_gitea.com/<owner>/repo/settings,然后启用 Enable Repository Actions

Actions语法

Gitea Actions 基本和 Github Actions的语法一模一样。

GitHub Actions Docs

我们可以从一个简单的演示开始:

# 工作流的名称
name: Gitea Actions Demo
# 从工作流生成的工作流运行的名称
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
# 若要自动触发工作流,请使用 on 定义哪些事件可以触发工作流运行
on: [push]
# 工作流运行由一个或多个 jobs 组成,默认情况下并行运行
jobs:
  # 使用 jobs.<job_id> 为作业提供唯一标识符
  Explore-Gitea-Actions:
    # 每个作业在 runs-on 指定的运行器环境中运行
    runs-on: ubuntu-latest
    steps:
      - run: echo "🎉 The job was automatically triggered by a ${{ gitea.event_name }} event."
      - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
      - run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
      - name: Check out repository code
        uses: actions/checkout@v4
      - run: echo "💡 The ${{ gitea.repository }} repository has been cloned to the runner."
      - run: echo "🖥️ The workflow is now ready to test your code on the runner."
      - name: List files in the repository
        run: |
          ls ${{ gitea.workspace }}
      - run: echo "🍏 This job's status is ${{ job.status }}."

您可以将上述示例上传为一个以 .yaml扩展名的文件,放在存储库的 .gitea/workflows/目录中,例如 .gitea/workflows/demo.yaml

请注意,演示文件中包含一些表情符号。 请确保您的数据库支持它们,特别是在使用MySQL时。 如果字符集不是 utf8mb4,将出现错误,例如 Error 1366 (HY000): Incorrect string value: '\\xF0\\x9F\\x8E\\x89 T...' for column 'name' at row 1。 有关更多信息,请参阅数据库准备工作

on: [push] 这一行表示当您向该存储库推送提交时,工作流将被触发。 然而,当您上传 YAML 文件时,它也会推送一个提交,所以您应该在"Actions"标签中看到一个新的任务。

现在就已经成功开始使用Actions。

variables(变量)

您可以创建用户、组织和仓库级别的变量。变量的级别取决于创建它的位置。当创建变量时,变量的名称会被 转换为大写,在yaml文件中引用时需要使用大写。

命名规则

以下规则适用于变量名:

  • 变量名称只能包含字母数字字符 ([a-z], [A-Z], [0-9]) 或下划线 (_)。不允许使用空格。
  • 变量名称不能以 GITHUB_GITEA_ 前缀开头。
  • 变量名称不能以数字开头。
  • 变量名称不区分大小写。
  • 变量名称在创建它们的级别上必须是唯一的。
  • 变量名称不能为 CI
使用

创建配置变量后,它们将自动填充到 vars 上下文中。您可以在工作流中使用类似 ${{ vars.VARIABLE_NAME }} 这样的表达式来使用它们。

优先级

如果同名变量存在于多个级别,则级别最低的变量优先。 仓库级别的变量总是比组织或者用户级别的变量优先被选中。

注意

若变量值包含特殊字符,如$等,需使用 \转义,如 123d\$fdf4,不然使用可能会出现问题。

密钥管理

密钥管理允许您在用户、组织或仓库中存储敏感信息。 密钥管理在 Gitea 1.19+ 版本中可用。

命名规则

以下规则适用于密钥名称:

  • 密钥名称只能包含字母数字字符 ([a-z], [A-Z], [0-9]) 或下划线 (_)。不允许使用空格。
  • 密钥名称不能以 GITHUB_GITEA_ 前缀开头。
  • 密钥名称不能以数字开头。
  • 密钥名称不区分大小写。
  • 密钥名称在创建它们的级别上必须是唯一的。

例如,对于在仓库级别创建的密钥,它在该仓库中必须具有唯一的名称;对于在组织级别创建的密钥,它在该级别上必须具有唯一的名称。

使用

创建配置密钥后,它们将自动填充到 secrets 上下文中。您可以在工作流中使用类似 ${{ secrets.PASSWORD }} 这样的表达式来使用它们。

优先级

如果在多个级别上存在具有相同名称的密钥,则最低级别的密钥优先生效。例如,如果组织级别的密钥与仓库级别的密钥具有相同的名称,则仓库级别的密钥将优先生效。

注意

若密钥值包含特殊字符,如$等,需使用 \转义,如 123d\$fdf4,不然使用可能会出现问题。

软件包

从Gitea 1.17版本开始,软件包注册表可以用作常见软件包管理器的公共或私有注册表。

容器注册表

为您的用户或组织发布符合 Open Container Initiative(OCI) 规范的镜像。 该容器注册表遵循 OCI 规范,并支持所有兼容的镜像类型,如 DockerHelm Charts

要使用容器注册表,您可以使用适用于特定镜像类型的工具。 以下示例使用 docker 客户端。

登录容器注册表

要推送镜像或者如果镜像位于私有注册表中,您需要进行身份验证:

docker login gitea.example.com

如果您使用的是 2FA 或 OAuth,请使用个人访问令牌替代密码进行身份验证。

镜像命名约定

镜像必须遵循以下命名约定:

{registry}/{owner}/{image}

例如,以下是所有者为 testuser 的有效镜像名称示例:

gitea.example.com/testuser/myimage

gitea.example.com/testuser/my-image

gitea.example.com/testuser/my/image

注意: 该注册表仅支持大小写不敏感的标签名称。因此,image:tagimage:Tag 将被视为相同的镜像和标签。

推送镜像

通过执行以下命令来推送镜像:

docker push gitea.example.com/{owner}/{image}:{tag}
参数 描述
owner 镜像的所有者
image 镜像的名称
tag 镜像的标签

例如:

docker push gitea.example.com/testuser/myimage:latest

拉取镜像

通过执行以下命令来拉取镜像:

docker pull gitea.example.com/{owner}/{image}:{tag}
Parameter Description
owner 镜像的所有者
image 镜像的名称
tag 镜像的标签

例如:

docker pull gitea.example.com/testuser/myimage:latest

Maven 软件包注册表

为您的用户或组织发布 Maven 软件包。

要求

要使用 Maven 软件包注册表,您可以使用 MavenGradle。 以下示例使用 MavenGradle Groovy

配置软件包注册表

要注册软件包注册表,首先需要将访问令牌添加到 settings.xml 文件中:

<settings>
  <servers>
    <server>
      <id>gitea</id>
      <configuration>
        <httpHeaders>
          <property>
            <name>Authorization</name>
            <value>token {access_token}</value>
          </property>
        </httpHeaders>
      </configuration>
    </server>
  </servers>
</settings>

然后在项目的 pom.xml 文件中添加以下部分:

<repositories>
  <repository>
    <id>gitea</id>
    <url>https://gitea.example.com/api/packages/{owner}/maven</url>
  </repository>
</repositories>
<distributionManagement>
  <repository>
    <id>gitea</id>
    <url>https://gitea.example.com/api/packages/{owner}/maven</url>
  </repository>
  <snapshotRepository>
    <id>gitea</id>
    <url>https://gitea.example.com/api/packages/{owner}/maven</url>
  </snapshotRepository>
</distributionManagement>
参数 描述
access_token 您的个人访问令牌
owner 软件包的所有者

Gradle variant

如果您计划在项目中添加来自 Gitea 实例的一些软件包,请将其添加到 repositories 部分中:

repositories {
    // other repositories
    maven { url "https://gitea.example.com/api/packages/{owner}/maven" }
}

在 Groovy gradle 中,您可以在发布部分中包含以下脚本:

publishing {
    // 其他发布设置
    repositories {
        maven {
            name = "Gitea"
            url = uri("https://gitea.example.com/api/packages/{owner}/maven")

            credentials(HttpHeaderCredentials) {
                name = "Authorization"
                value = "token {access_token}"
            }

            authentication {
                header(HttpHeaderAuthentication)
            }
        }
    }
}

发布软件包

要发布软件包,只需运行以下命令:

mvn deploy

或者,如果您使用的是 Gradle,请使用 gradle 命令和 publishAllPublicationsToGiteaRepository 任务:

./gradlew publishAllPublicationsToGiteaRepository

如果您想要将预构建的软件包发布到注册表中,可以使用 mvn deploy:deploy-file 命令:

mvn deploy:deploy-file -Durl=https://gitea.example.com/api/packages/{owner}/maven -DrepositoryId=gitea -Dfile=/path/to/package.jar
参数 描述
owner 软件包的所有者

如果存在相同名称和版本的软件包,您无法发布该软件包。您必须先删除现有的软件包。

安装软件包

要从软件包注册表中安装 Maven 软件包,请在项目的 pom.xml 文件中添加新的依赖项:

<dependency>
  <groupId>com.test.package</groupId>
  <artifactId>test_project</artifactId>
  <version>1.0.0</version>
</dependency>

Gradle Groovy 中类似的操作如下:

implementation "com.test.package:test_project:1.0.0"

然后运行:

mvn install

支持的命令

mvn install
mvn deploy
mvn dependency:get:

npm Package Registry

为您的用户或组织发布 npm 包。

要求

要使用 npm 包注册表,您需要安装 Node.js 以及与之配套的软件包管理器,例如 Yarnnpm 本身。

该注册表支持作用域和非作用域软件包。

以下示例使用具有作用域 @testnpm 工具。

配置软件包注册表

要注册软件包注册表,您需要配置一个新的软件包源。

npm config set {scope}:registry=https://gitea.example.com/api/packages/{owner}/npm/
npm config set -- '//gitea.example.com/api/packages/{owner}/npm/:_authToken' "{token}"
参数 描述
scope 软件包的作用域
owner 软件包的所有者
token 您的个人访问令牌

例如:

npm config set @test:registry=https://gitea.example.com/api/packages/testuser/npm/
npm config set -- '//gitea.example.com/api/packages/testuser/npm/:_authToken' "personal_access_token"

或者,不使用作用域:

npm config set registry https://gitea.example.com/api/packages/testuser/npm/
npm config set -- '//gitea.example.com/api/packages/testuser/npm/:_authToken' "personal_access_token"

发布软件包

在项目中运行以下命令发布软件包:

npm publish

如果已经存在相同名称和版本的软件包,您无法发布该软件包。您必须先删除现有的软件包。

删除软件包

通过运行以下命令删除软件包:

npm unpublish {package_name}[@{package_version}]
参数 描述
package_name 软件包名称
package_version 软件包版本

例如

npm unpublish @test/test_package
npm unpublish @test/test_package@1.0.0

安装软件包

要从软件包注册表中安装软件包,请执行以下命令:

npm install {package_name}
参数 描述
package_name 软件包名称

例如:

npm install @test/test_package

给软件包打标签

该注册表支持版本标签,可以通过 npm dist-tag 管理:

npm dist-tag add {package_name}@{version} {tag}
参数 描述
package_name 软件包名称
version 软件包版本
tag 软件包标签

例如:

npm dist-tag add test_package@1.0.2 release

标签名称不能是有效的版本。所有可解析为版本的标签名称都将被拒绝。

搜索软件包

该注册表支持搜索,但不支持像 author:gitea 这样的特殊搜索限定符。

支持的命令

npm install
npm ci
npm publish
npm unpublish
npm dist-tag
npm view
npm search
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区