戴明辰 2da936ba8c [DIP-1][Fix][WeChat] SignUp before Sending Activation Email
* [Fix] wechat signup before sending activation email
2024-11-08 04:03:21 +00:00
2024-07-30 12:46:01 +00:00
2024-05-03 23:53:18 -04:00
2024-07-30 12:46:01 +00:00
2024-02-14 18:19:57 +00:00
2024-06-05 09:22:38 +08:00
2024-06-19 19:42:06 +00:00
2022-07-28 09:22:47 +08:00
2024-06-20 20:04:09 +00:00
2024-06-11 18:47:45 +00:00
2024-04-19 06:08:30 +00:00
2023-01-24 18:52:38 +00:00
2024-09-03 13:01:06 +08:00
2016-11-08 08:42:05 +01:00
2024-07-30 12:46:01 +00:00
2024-06-20 20:04:09 +00:00
2024-06-20 20:04:09 +00:00
2024-05-16 19:40:57 +00:00
2024-06-20 20:04:09 +00:00

DevStar Studio

DevStar Studio 是 Gitea 发行版

1. 快速开始

1.1 单机版

1.1.1 Linux部署

1.1.2 Docker容器部署

  • 数据库准备可选sqlite不需要配置参考网址
  • 环境准备
  • 镜像准备(可选镜像文件方式或远程拉取方式)
    • 下载镜像文件压缩包
      • tar -xzvf 解压缩得到镜像文件
      • 加载镜像docker load -i <镜像文件名>
      • docker images 验证
    • docker pull devstar.cn/devstar/devstar-studio:latest
  • 运行容器区分windows和linux
    • windows
      • cmd运行docker run --restart=always --name <容器名> -d -p 3000:3000 <镜像名/ID> docker ps 验证
      • 浏览 http://localhost:3000进行数据库配置,配置成功即可看到登录注册页面
      • docker desktop配置打开 Expose daemon on tcp://localhost:2375 without TLS 选项
      • docker desktop在容器界面找到文件系统中 /etc/gitea/app.ini修改配置文件(见下表)
      • 重启容器
      • docker desktop对应容器页面的log页面可见日志
    • linux
      • docker run --restart=always --name <容器名> -d -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock <镜像名>
      • 浏览 http://localhost:3000进行数据库配置,配置成功即可看到登录注册页面
      • sudo chmod 666 /var/run/docker.sock修改host文件权限
      • docker cp <容器名/ID>:/etc/gitea/app.ini ./app.ini 修改配置文件(见下表) docker cp ./app.ini <容器名/ID>:/etc/gitea/app.ini
      • docker restart <容器名/ID>重启容器
      • docker logs -f <容器名/ID> 可见日志

配置文件添加/修改 下列小节键:

[database]
CHARSET_COLLATION = utf8mb4_bin

[devstar.ssh_key_pair]
KEY_SIZE = <写入希望生成的SSH密钥长度比如 4096 ,默认值 2048>

[cors]
ENABLED = true
ALLOW_DOMAIN = *
METHODS = GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS
HEADERS = Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization
MAX_AGE = 10m

[ui.admin]
;; Dev Container 分页参数(每页展示 DevContainer 个数),若未指定,默认值 50
DEV_CONTAINERS_PAGING_NUM = 50

[devstar.devcontainer]
ENABLED = true
AGENT = docker
TIMEOUT_SECONDS = 120
;; 修改为部署host地址
HOST = 192.168.88.88
;; docker desktop必须添加linux docker环境删除
DOCKER_HOST = tcp://host.docker.internal:2375

1.1.3 开发容器功能使用

  1. 添加publickey用户-设置-SSH / GPG 密钥-管理 SSH 密钥
  2. 创建仓库,新增 .devcontainer/devcontainer.json文件添加 image 字段,例如:"image":"..."必须是自带OpenSSH服务的镜像
  3. 创建开发容器:仓库-开发容器-创建开发容器

1.2 Kubernetes 集群部署

DevStar Studio 在 Kubernetes集群中部署需要使用 Helm Charts可参考 官方示例

推荐将 DevStar Studio 与 Dev Container 进行基于 namespace 的资源 隔离: 由于 k8s RBAC 限制,建议将 DevStar Studio 的主应用程序,数据库和缓存 与 Dev Container 部署在同一个 namespace 下

  • devstar-studio-ns:
    • 指定方式:部署 Helm Charts 时候执行
      helm install  devstar-studio . --namespace devstar-studio-ns --create-namespace
      
    • 引用方式{{ .Release.Namespace }},例如:
      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: devstar-studio-gitea-repository-app-ini-configmap
        namespace: {{ .Release.Namespace }}
      data:
        repository: |
          MAX_CREATION_LIMIT = 0
      

1.2.1 client-go 版本适配 Kubernetes 集群

注意:部署在 k8s 之上要根据 Kubernetes 版本调整 k8s.io/client-go 版本。例如部署在 Kubernetes 1.23.10 之上,需要执行下列指令调整 go packages:

# 移除旧版本 client-go 的信息
go get k8s.io/client-go@none

# 安装适配于 Kubernetes 1.23.10 版本的 client-go
go get k8s.io/client-go@kubernetes-1.23.10

1.2.2 应用配置 app.ini 信息挂载

在 Helm Charts 目录下创建文件夹 templates/devstar-studio-app.ini/,用于存储 Gitea 配置信息,请参考 Docker 版 ini 配置文件字段,使用 ConfigMaps 或者 Secrets 类型资源描述。

对于 ConfigMaps 类型,参考:

apiVersion: v1
kind: ConfigMap
metadata:
  name: devstar-studio-gitea-app-ini-configmap
  namespace: {{ .Release.Namespace }}
data:
  database: |
    CHARSET_COLLATION = utf8mb4_bin

  cors: |
    CONTENT_SECURITY_POLICY = default-src 'self' data: 'unsafe-inline' https://mp.weixin.qq.com; img-src * data:

  ui.admin: |
    DEV_CONTAINERS_PAGING_NUM = 50

  devstar.devcontainer: |
    ENABLED = true
    AGENT = k8s
    TIMEOUT_SECONDS = 120
    HOST = <k8s 暴露访问域名或IP比如 devcontainer.devstar.cn >
    NAMESPACE = <k8s DevStar Studio 部署 namespace比如 devstar-studio-ns >

  devstar.ssh_key_pair: |
    KEY_SIZE = <写入希望生成的SSH密钥长度比如 4096 ,默认值 2048>

  devstar.cloud: |
    ENABLED = true
    PROVIDER = tencent

对于 Secrets 类型,参考:

apiVersion: v1
kind: Secret
metadata:
  name: devstar-studio-gitea-app-ini-secrets
  namespace: {{ .Release.Namespace }}
type: Opaque
stringData:
  wechat: |
    WECHAT_OFFICIAL_ACCOUNT_TEMP_QR_EXPIRE_SECONDS=60
    WECHAT_OFFICIAL_ACCOUNT_APP_ID=<微信公众号APPID>
    WECHAT_OFFICIAL_ACCOUNT_APP_SECRET=<微信公众号SECRET>
    WECHAT_OFFICIAL_ACCOUNT_MESSAGE_TOKEN = <微信公众号自定义Token>
    WECHAT_OFFICIAL_ACCOUNT_MESSAGE_AES_KEY = <微信公众号AES加密密钥>

  devstar.cloud.tencent: |
    ENDPOINT = <API访问端点名称例如 vpc.tencentcloudapi.com>
    REGION = <区域代码,例如 ap-shanghai>
    NAT_GATEWAY_ID = <腾讯云控制台使用的 NAT网关 ID>
    PUBLIC_IP_ADDRESS = <公网IP>
    PRIVATE_IP_ADDRESS = <内网IP>
    IP_PROTOCOL = TCP
    SECRET_ID = <腾讯云密钥ID>
    SECRET_KEY = <腾讯云密钥内容>

为了使 Gitea启动时能将配置信息同步到 app.ini 文件中,需要在 Helm Charts /values.yaml 中的 additionalConfigSources 中挂载创建的 ConfigMapsSecrets 资源,示例格式:

  ## @param gitea.additionalConfigSources Additional configuration from secret or configmap
  additionalConfigSources:
    - secret:
        secretName: devstar-studio-gitea-app-ini-secrets
    - configMap:
        name: devstar-studio-gitea-app-ini-configmap

1.2.3 Kubernetes RBAC 配置

为了能够在运行时创建 Dev Container需要配置基于角色的访问控制(Role-Based Access Control, RBAC)。

首先需要再 DevStar Studio 的 Helm Chart 中指定名称为 devstar-studio-gitea-serviceaccount 的 ServiceAccount

修改 values.yaml 文件内容如下:

## @section ServiceAccount

## @param serviceAccount.create Enable the creation of a ServiceAccount
## @param serviceAccount.name Name of the created ServiceAccount, defaults to release name. Can also link to an externally provided ServiceAccount that should be used.
## @param serviceAccount.automountServiceAccountToken Enable/disable auto mounting of the service account token
## @param serviceAccount.imagePullSecrets Image pull secrets, available to the ServiceAccount
## @param serviceAccount.annotations Custom annotations for the ServiceAccount
## @param serviceAccount.labels Custom labels for the ServiceAccount
serviceAccount:
  create: true
  name: "devstar-studio-gitea-serviceaccount"
  automountServiceAccountToken: true
  imagePullSecrets: []
  # - name: private-registry-access
  annotations: {}
  labels: {}

当 Helm Chart 部署成功后,可通过下列命令查看 devstar-studio-gitea-serviceaccount 的实际内容:

kubectl get serviceaccount -n devstar-studio-ns devstar-studio-gitea-serviceaccount -o yaml
apiVersion: v1
automountServiceAccountToken: true
kind: ServiceAccount
metadata:
  annotations:
    meta.helm.sh/release-name: devstar-studio
    meta.helm.sh/release-namespace: devstar-studio-ns
  creationTimestamp: "2024-10-01T06:49:56Z"
  labels:
    app: gitea
    app.kubernetes.io/instance: devstar-studio
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: gitea
    app.kubernetes.io/version: rootless-dev-1fa57bca2dc6922b093157e17f16d5652de1420d
    helm.sh/chart: gitea-0.0.0
    version: rootless-dev-1fa57bca2dc6922b093157e17f16d5652de1420d
  name: devstar-studio-gitea-serviceaccount
  namespace: devstar-studio-ns
  resourceVersion: "92197844"
  uid: 71960972-c76e-4b6a-98b5-9f66f90aefca
secrets:
  - name: devstar-studio-gitea-serviceaccount-token-d499q

下一步,需要创建关联该 ServiceAccount 的 RoleBinding

  1. ClusterRole

通过运行命令查看编辑 DevcontainerApp 的 ClusterRole

kubectl get clusterrole devcontainer-operator-devcontainerapp-editor-role -o yaml

显示结果如下

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    app.kubernetes.io/managed-by: kustomize
    app.kubernetes.io/name: devcontainer-operator
  name: devcontainer-operator-devcontainerapp-editor-role
rules:
  - apiGroups:
      - devcontainer.devstar.cn
    resources:
      - devcontainerapps
    verbs:
      - create
      - delete
      - get
      - list
      - patch
      - update
      - watch
  - apiGroups:
      - devcontainer.devstar.cn
    resources:
      - devcontainerapps/status
    verbs:
      - get

上述结果表明ClusterRole devcontainer-operator-devcontainerapp-editor-role 具有如下权限:

  • 对于 k8s CRD 资源 DevcontainerApp:创建、删除、获取、列举、部分更新、全量更新、监听
  • 对于 k8s CRD 资源 DevcontainerApp 的 status 域: 获取
  1. 创建 ClusterRoleBinding

在 Helm Charts 目录下 创建文件夹 templates/devstar-devcontainer-rbac/,创建下列 ClusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    app.kubernetes.io/name: devcontainer-operator
    app.kubernetes.io/managed-by: kustomize
  name: devstar-devcontainerapps-editor-role-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: devcontainer-operator-devcontainerapp-editor-role
subjects:
  - kind: ServiceAccount
    name: {{ include "gitea.serviceAccountName" . }}
    namespace: {{ .Release.Namespace | quote }}

注意 RBAC 应当对 Gitea 透明,即不得将 RBAC 信息挂载到 /values.yaml 中如 1.2.2 小节所示的 additionalConfigSources 字段

至此DevStar Studio 已被赋予 k8s CRD 资源 DevcontainerApp 的操作权限,即可操作集群,创建或修改 DevContainer

补充 DevStar Studio 获取集群的控制权限

// GetKubernetesClient
func GetKubernetesClient(ctx *context.Context) (dynamicclient.Interface, error) {

	// 1. 尝试从集群外获取 kubectl 配置信息
	config, err := clientcmd.BuildConfigFromFlags("", clientgocmdtools.RecommendedHomeFile)
	if err != nil {
		// 1.1 集群外尝试失败,改从集群内获取 kubectl 配置信息
		log.Warn("Failed to obtain Kubernetes config outside of cluster: " + clientgocmdtools.RecommendedHomeFile)
		config, err = clientgorest.InClusterConfig()
		if err != nil {
			log.Error("Failed to obtain Kubernetes config both inside/outside of cluster, the DevContainer is Disabled")
			setting.Devstar.Devcontainer.Enabled = false
			return nil, err
		}
	}

	// 2. 根据 k8s 配置信息构建 ClientSet
	dynamicClient, err := dynamicclient.NewForConfig(config)
	if err != nil {
		return nil, err
	}
	return dynamicClient, err
}

上述代码考虑了集群内、外两种情况配置 k8s 连接信息:

  • 集群之外/Pod 之外:通过 ~/.kube/config 获取 Token 与 CA 证书文件
  • 集群 Pod 之内:通过 Pod 内部密钥挂载目录 /var/run/secrets/kubernetes.io/serviceaccount/ 获取 Token 与 CA 证书文件

Gitea

Contribute with Gitpod

View this document in English

目标

Gitea 的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务。我们采用 Go 作为后端语言,这使我们只要生成一个可执行程序即可。并且他还支持跨平台,支持 Linux, macOS 和 Windows 以及各种架构,除了 x86amd64还包括 ARM 和 PowerPC。

如果你想试用在线演示和报告问题,请访问 demo.gitea.com

如果你想使用免费的 Gitea 服务(有仓库数量限制),请访问 gitea.com

如果你想在 Gitea Cloud 上快速部署你自己独享的 Gitea 实例,请访问 cloud.gitea.com 开始免费试用。

提示

  1. 开始贡献代码之前请确保你已经看过了 贡献者向导(英文).
  2. 所有的安全问题,请私下发送邮件给 security@gitea.io。谢谢!
  3. 如果你要使用API请参见 API 文档.

文档

关于如何安装请访问我们的 文档站,如果没有找到对应的文档,你也可以通过 Discord - 英文 和 QQ群 328432459 来和我们交流。

贡献流程

Fork -> Patch -> Push -> Pull Request

翻译

多语言翻译是基于Crowdin进行的. Crowdin

作者

授权许可

本项目采用 MIT 开源授权许可证,完整的授权说明已放置在 LICENSE 文件中。

截图

Dashboard User Profile Global Issues
Branches Web Editor Activity
New Migration Migrating Pull Request View
Pull Request Dark Diff Review Dark Diff Dark
Description
No description provided
Readme Multiple Licenses 285 MiB
Languages
Go 81.6%
Handlebars 8.7%
TypeScript 3.3%
CSS 2.6%
JavaScript 1.9%
Other 1.7%