Skip to content

Latest commit

 

History

History
294 lines (238 loc) · 8.51 KB

说明文档.md

File metadata and controls

294 lines (238 loc) · 8.51 KB

修改

  1. 支持 CDN 在modules/storage/minio.go中新增newMinioStorage函数,扩展现有MinioStorage逻辑,使其支持华为云。若配置文件中配置了MINIO_BUCKET_DOMAIN参数,则使用华为云存储。 新增modules/storage/hwcloud.go,调用华为云 obs 接口,将大文件上传到 obs 桶。

  2. 更换基础镜像 把Dockerfile.rootless_cdn作为当前使用的Dockerfile,相较之前的Dockerfile.rootless,基础镜像由docker.io/library/golang:1.21-alpine3.18改为openeuler/openeuler:22.03,随后因软件包管理工具的改变,更换了部分软件包的下载方式。

上传文件到 OBS 桶

使用git lfs:

  1. 下载:git lfs install

  2. 追踪要使用git lfs进行上传的文件:git lfs track <file>。可以是确定的文件名,也可以是某一类文件,如*.bin。追踪后会生成一个.gitattributes文件

  3. 正常使用add、commit、push、clone进行上传、下载

本地部署gitea服务(容器中)

  1. 准备数据库 可参照https://docs.gitea.com/zh-cn/installation/database-prep准备数据库

  2. 构建镜像 克隆仓库

git clone https://github.com/openmerlin/gitea.git

构建镜像

docker build -f ./Dockerfile.rootless_cdn -t gitea . 
  1. 配置文件app.ini(可选)
  • 若不提前配置,则第一次启动 gitea 服务会有“安装界面”,可以在此界面进行数据库及其他路径的配置,完成后会自动生成相应的app.ini文件。若有其他需求可以再修改此文件,如要配置 obs 桶等。配置文件默认路径为/etc/gitea/app.ini
  • 若希望提前配置,同时不希望出现“安装界面”
    • 设置INSTALL_LOCK=true关闭安装界面
    • 手动配置数据库连接参数
    • 使用gitea generate secret分别创建JWT_SECRETSECRET_KEYINTERNAL_TOKEN。这一步可在启动容器之后,在容器内执行gitea generate secret JWT_SECRET等命令,再向app.ini添加相应字段
点击展开/折叠

APP_NAME = Gitea: Git with a cup of tea
RUN_USER = git
RUN_MODE = prod
WORK_PATH = /var/lib/gitea

[repository]
ROOT = /var/lib/gitea/git/repositories

[repository.local]
LOCAL_COPY_PATH = /tmp/gitea/local-repo

[repository.upload] TEMP_PATH = /tmp/gitea/uploads

[server]
APP_DATA_PATH = /var/lib/gitea/data
SSH_DOMAIN = %(DOMAIN)s
HTTP_PORT = 3000
ROOT_URL =%(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/
DISABLE_SSH = false
; In rootless gitea container only internal ssh server is supported
START_SSH_SERVER = true
SSH_PORT = 2222
SSH_LISTEN_PORT = 2222
BUILTIN_SSH_SERVER_USER = git
LFS_START_SERVER = false
DOMAIN = localhost
OFFLINE_MODE = false

[attachment]
PATH = /var/lib/gitea/data/attachments

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

[session]
PROVIDER_CONFIG = /var/lib/gitea/data/sessions
PROVIDER = file

[picture]
AVATAR_UPLOAD_PATH = /var/lib/gitea/data/avatars
REPOSITORY_AVATAR_UPLOAD_PATH = /var/lib/gitea/data/repo-avatars

[log]
ROOT_PATH = /var/lib/gitea/data/log
MODE = console
LEVEL = info

[security]
INSTALL_LOCK = true
SECRET_KEY =
REVERSE_PROXY_LIMIT = 1
REVERSE_PROXY_TRUSTED_PROXIES = *
INTERNAL_TOKEN =
PASSWORD_HASH_ALGO = pbkdf2

[service]
DISABLE_REGISTRATION = false
REQUIRE_SIGNIN_VIEW = false
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL = false
ALLOW_ONLY_EXTERNAL_REGISTRATION = false
ENABLE_CAPTCHA = false
DEFAULT_KEEP_EMAIL_PRIVATE = false
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
DEFAULT_ENABLE_TIMETRACKING = true
NO_REPLY_ADDRESS = noreply.localhost

[lfs]
PATH = /var/lib/gitea/git/lfs

[mailer]
ENABLED = false

[openid]
ENABLE_OPENID_SIGNIN = true
ENABLE_OPENID_SIGNUP = true

[cron.update_checker]
ENABLED = false

[repository.pull-request]
DEFAULT_MERGE_STYLE = merge

[repository.signing]
DEFAULT_TRUST_MODEL = committer

[oauth2]
JWT_SECRET =

  1. 启动容器和服务
# 挂载配置文件
docker run -v ./app.ini:/etc/gitea/app.ini --name gitea -itdp 8088:3000 gitea --config=/etc/gitea/app.ini
# 不挂载
docker run --name gitea -itdp 8080:3000 gitea

进入容器后可能会用到的一些命令:

# 查看所有用户,加 --admin 仅查看管理员用户
gitea admin user list

# 创建用户,加 --admin 创建管理员用户
gitea admin user create --username myname --password asecurepassword --email [email protected]

# 删除用户(--username、--email、--id提供一个即可;可以删除管理员;需提前删除该用户所拥有的仓库)
gitea admin user delete --id 1

# 生成随机值和令牌。INTERNAL_TOKEN: 用于内部 API 调用身份验证的令牌;JWT_SECRET: 用于 LFS 和 OAUTH2 JWT 身份验证的密钥(LFS_JWT_SECRET 是此选项的别名,用于向后兼容);SECRET_KEY: 全局密钥
gitea generate secret INTERNAL_TOKEN
gitea generate secret JWT_SECRET
gitea generate secret SECRET_KEY

可在https://docs.gitea.com/zh-cn/administration/command-line查看所有可使用命令

若第一次使用 gitea 命令行出现配置文件或数据库相关错误,在命令末尾加--config /path/to/app.ini配置好数据库应该可以解决,后续的命令不需要再加

  1. 访问服务 浏览器访问<主机ip>:8080。 若未配置app.ini文件或INSTALL_LOCK的值为false,则会出现安装界面;若已确认配置正确但仍然出现安装界面,可能需要再启动 gitea 服务时加--config /path/to/app.ini来手动指定配置文件。 若数据库中无任何用户,则在网页上第一个注册的用户自动成为管理员用户,否则为普通用户。

k8s部署文件

部署文件:https://github.com/opensourceways/infra-common/tree/master/common-applications/test-environment/gitea-repo。各文件作用:

  1. namespace.yaml 创建一个gitea-repo命名空间,用于隔离 Gitea 的部署。

  2. pvc.yaml 创建持久卷声明,定义 Gitea 数据的持久化存储,使数据在 Pod 重新调度或重启时仍然保留。

  3. deployment.yaml 部署 Gitea,定义了容器镜像、端口(3000)以及持久卷的声明等,/var/lib/gitea/

  4. service.yaml 创建 gitea 服务:使用 TCP 协议,在端口 3000 监听请求,并将请求转发到后端名为“gitea-repo”的 pod,其他组件可以通过集群内部的 Cluster IP 访问该服务。

  5. ingress.yaml 通过 Ingress 公开 Gitea 服务,将<gitea.test.osinfra.cn>的请求通过 HTTPS/TLS 加密转发到命名空间gitea-repo中的服务。

  6. tls.yaml 配置 TLS 证书和密钥。

  7. kustomization.yaml 一次性创建多个 Kubernetes 资源,应用上述配置文件。

通过kind搭建本地集群环境

暂不清楚如何通过负载均衡器或其他方式实现外部访问集群内服务,可能需要域名解析或公网 ip 来实现。

  1. 创建kind集群
cat << EOF > cluster-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        node-labels: "ingress-ready=true"
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    protocol: TCP
  - containerPort: 443
    hostPort: 443
    protocol: TCP
  - containerPort: 30000
    hostPort: 30000
    protocol: TCP
EOF

kind create cluster --name gitea --config ./kind-clusters-mutil-config.yaml
  1. 创建命名空间
kubectl create namespace gitea
  1. 创建gitea部署
cat << EOF > deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gitea
  namespace: gitea
spec:
  replicas: 1
  selector:
    matchLabels:
      app: gitea
  template:
    metadata:
      labels:
        app: gitea
    spec:
      containers:
        - name: gitea
          image: gitea-cdn:latest  # 使用本地镜像
          # image: gitea/gitea:latest  # 选择其他镜像版本
          ports:
            - containerPort: 3000
EOF

kubectl apply -f deployment.yaml
  1. 创建gitea服务
cat << EOF > service.yaml
apiVersion: v1
kind: Service
metadata:
  name: gitea-service
  namespace: gitea
spec:
  type: NodePort
  selector:
    app: gitea
  ports:
    - port: 80
      targetPort: 3000
      nodePort: 30080  # 根据需要选择适当的节点端口
EOF

kubectl apply -f service.yaml
  1. 访问gitea服务
# 查看节点 IP
kubectl get nodes -o wide
# 发送 HTTP 请求
curl <ip>:30080

想要在其他主机访问该服务,则可能需要用到负载均衡器或域名解析。可以参考部署文件中的ingress.yaml配置自定义域名。