-
支持 CDN 在
modules/storage/minio.go
中新增newMinioStorage
函数,扩展现有MinioStorage
逻辑,使其支持华为云。若配置文件中配置了MINIO_BUCKET_DOMAIN
参数,则使用华为云存储。 新增modules/storage/hwcloud.go
,调用华为云 obs 接口,将大文件上传到 obs 桶。 -
更换基础镜像 把
Dockerfile.rootless_cdn
作为当前使用的Dockerfile
,相较之前的Dockerfile.rootless
,基础镜像由docker.io/library/golang:1.21-alpine3.18
改为openeuler/openeuler:22.03
,随后因软件包管理工具的改变,更换了部分软件包的下载方式。
使用git lfs
:
-
下载:
git lfs install
-
追踪要使用
git lfs
进行上传的文件:git lfs track <file>
。可以是确定的文件名,也可以是某一类文件,如*.bin
。追踪后会生成一个.gitattributes
文件 -
正常使用
add、commit、push、clone
进行上传、下载
-
准备数据库 可参照https://docs.gitea.com/zh-cn/installation/database-prep准备数据库
-
构建镜像 克隆仓库
git clone https://github.com/openmerlin/gitea.git
构建镜像
docker build -f ./Dockerfile.rootless_cdn -t gitea .
- 配置文件
app.ini
(可选)
- 若不提前配置,则第一次启动 gitea 服务会有“安装界面”,可以在此界面进行数据库及其他路径的配置,完成后会自动生成相应的
app.ini
文件。若有其他需求可以再修改此文件,如要配置 obs 桶等。配置文件默认路径为/etc/gitea/app.ini
- 若希望提前配置,同时不希望出现“安装界面”
- 设置
INSTALL_LOCK=true
关闭安装界面 - 手动配置数据库连接参数
- 使用
gitea generate secret
分别创建JWT_SECRET
、SECRET_KEY
和INTERNAL_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 =
- 启动容器和服务
# 挂载配置文件
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
配置好数据库应该可以解决,后续的命令不需要再加
- 访问服务
浏览器访问
<主机ip>:8080
。 若未配置app.ini
文件或INSTALL_LOCK
的值为false
,则会出现安装界面;若已确认配置正确但仍然出现安装界面,可能需要再启动 gitea 服务时加--config /path/to/app.ini
来手动指定配置文件。 若数据库中无任何用户,则在网页上第一个注册的用户自动成为管理员用户,否则为普通用户。
-
namespace.yaml 创建一个
gitea-repo
命名空间,用于隔离 Gitea 的部署。 -
pvc.yaml 创建持久卷声明,定义 Gitea 数据的持久化存储,使数据在 Pod 重新调度或重启时仍然保留。
-
deployment.yaml 部署 Gitea,定义了容器镜像、端口(3000)以及持久卷的声明等,/var/lib/gitea/
-
service.yaml 创建 gitea 服务:使用 TCP 协议,在端口 3000 监听请求,并将请求转发到后端名为“gitea-repo”的 pod,其他组件可以通过集群内部的 Cluster IP 访问该服务。
-
ingress.yaml 通过 Ingress 公开 Gitea 服务,将<gitea.test.osinfra.cn>的请求通过 HTTPS/TLS 加密转发到命名空间
gitea-repo
中的服务。 -
tls.yaml 配置 TLS 证书和密钥。
-
kustomization.yaml 一次性创建多个 Kubernetes 资源,应用上述配置文件。
暂不清楚如何通过负载均衡器或其他方式实现外部访问集群内服务,可能需要域名解析或公网 ip 来实现。
- 创建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
- 创建命名空间
kubectl create namespace gitea
- 创建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
- 创建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
- 访问gitea服务
# 查看节点 IP
kubectl get nodes -o wide
# 发送 HTTP 请求
curl <ip>:30080
想要在其他主机访问该服务,则可能需要用到负载均衡器或域名解析。可以参考部署文件中的ingress.yaml
配置自定义域名。