Back to Sealos

Desktop 前端 Helm Chart

frontend/desktop/deploy/README_CN.md

5.1.115.4 KB
Original Source

Desktop 前端 Helm Chart

Sealos Desktop 前端使用 Helm Chart 部署,支持自动配置。

快速开始

基础用法(自动配置)

bash
# 默认部署(从 sealos-system/sealos-config 自动配置)
sealos run desktop-frontend:latest

# 自定义域名
sealos run desktop-frontend:latest -e CLOUD_DOMAIN=cloud.example.com

# 中文版本 + GitHub 登录
sealos run desktop-frontend:latest \
  -e HELM_OPTIONS="--set desktopConfig.version=cn --set desktopConfig.githubEnabled=true --set desktopConfig.githubClientId=xxx --set desktopConfig.githubClientSecret=yyy"

# 英文版本 + Google 登录 + GTM
sealos run desktop-frontend:latest \
  -e HELM_OPTIONS="--set desktopConfig.googleEnabled=true --set desktopConfig.googleClientId=xxx --set desktopConfig.googleClientSecret=yyy --set desktopConfig.gtmId=GTM-XXX"

环境变量

Google Tag Manager

变量默认值描述
GTM_ID""Google Tag Manager ID

功能开关

变量默认值描述
GUIDE_ENABLEDfalse启用用户引导
API_ENABLEDfalse启用 API 访问
RECHARGE_ENABLEDfalse启用充值功能
ENTERPRISE_REAL_NAME_AUTH_ENABLEDfalse启用企业实名认证
TRACKING_ENABLEDfalse启用追踪/统计
REAL_NAME_AUTH_ENABLEDfalse启用实名认证
LICENSE_CHECK_ENABLEDfalse启用 License 检查

OAuth 提供商

GitHub OAuth

变量默认值描述
GITHUB_ENABLEDfalse启用 GitHub OAuth
GITHUB_CLIENT_ID""GitHub OAuth 客户端 ID
GITHUB_CLIENT_SECRET""GitHub OAuth 客户端密钥

微信 OAuth

变量默认值描述
WECHAT_ENABLEDfalse启用微信 OAuth
WECHAT_CLIENT_ID""微信 OAuth 客户端 ID
WECHAT_CLIENT_SECRET""微信 OAuth 客户端密钥

Google OAuth

变量默认值描述
GOOGLE_ENABLEDfalse启用 Google OAuth
GOOGLE_CLIENT_ID""Google OAuth 客户端 ID
GOOGLE_CLIENT_SECRET""Google OAuth 客户端密钥

通用 OAuth2

变量默认值描述
OAUTH2_ENABLEDfalse启用通用 OAuth2
OAUTH2_CALLBACK_URL""OAuth2 回调 URL
OAUTH2_CLIENT_ID""OAuth2 客户端 ID
OAUTH2_CLIENT_SECRET""OAuth2 客户端密钥
OAUTH2_AUTH_URL""OAuth2 授权 URL
OAUTH2_TOKEN_URL""OAuth2 令牌 URL
OAUTH2_USER_INFO_URL""OAuth2 用户信息 URL

验证码配置

变量默认值描述
TURNSTILE_ENABLEDfalse启用 Cloudflare Turnstile
TURNSTILE_SITE_KEY""Turnstile 站点密钥
TURNSTILE_SECRET_KEY""Turnstile 密钥

自定义覆盖变量

变量默认值描述
CLOUD_DOMAIN""覆盖云域名(自动从 sealos-config 获取)
CLOUD_PORT""覆盖云端口(自动从 sealos-config 获取)
CERT_SECRET_NAMEwildcard-certTLS 证书 Secret 名称
REGION_UID""覆盖区域 UID(自动从 sealos-config 获取)
DATABASE_MONGODB_URI""覆盖 MongoDB URI(自动从 sealos-config 获取)
DATABASE_GLOBAL_COCKROACHDB_URI""覆盖全局数据库 URI(自动从 sealos-config 获取)
DATABASE_LOCAL_COCKROACHDB_URI""覆盖本地数据库 URI(自动从 sealos-config 获取)
PASSWORD_SALT""覆盖密码盐(自动从 sealos-config 获取)
JWT_INTERNAL""覆盖内部 JWT(自动从 sealos-config 获取)
JWT_REGIONAL""覆盖区域 JWT(自动从 sealos-config 获取)
JWT_GLOBAL""覆盖全局 JWT(自动从 sealos-config 获取)

自动配置的值

以下值会自动从 sealos-system/sealos-config ConfigMap 获取无需手动配置(除非需要覆盖):

ConfigMap 键目标值描述
cloudDomaindesktopConfig.cloudDomain云域名
cloudPortdesktopConfig.cloudPort云端口
jwtInternaldesktopConfig.jwtInternal内部 JWT 密钥
jwtRegionaldesktopConfig.jwtRegional区域 JWT 密钥
jwtGlobaldesktopConfig.jwtGlobal全局 JWT 密钥
regionUIDdesktopConfig.regionUID区域 UID
databaseMongodbURIdesktopConfig.databaseMongodbURIMongoDB 连接 URI
databaseGlobalCockroachdbURIdesktopConfig.databaseGlobalCockroachdbURI全局 CockroachDB URI
databaseLocalCockroachdbURIdesktopConfig.databaseLocalCockroachdbURI本地 CockroachDB URI
passwordSaltdesktopConfig.passwordSalt密码哈希盐

ConfigMap 结构

生成的 sealos-desktop-config ConfigMap 包含以下结构:

yaml
cloud:
  domain: "cloud.example.com"
  port: ""
  regionUID: "randomRegionUID"
  certSecretName: "wildcard-cert"
  proxyDomain: "cloud.example.com"
  allowedOrigins:
    - "https://applaunchpad.cloud.example.com"
    - "https://dbprovider.cloud.example.com"
    - "https://costcenter.cloud.example.com"
    - "https://cronjob.cloud.example.com"
    - "https://objectstorage.cloud.example.com"
    - "https://template.cloud.example.com"
    - "https://terminal.cloud.example.com"
    - "https://kubepanel.cloud.example.com"
    - "https://license.cloud.example.com"
    - "https://devbox.cloud.example.com"
    - "https://aiproxy-web.cloud.example.com"
    - "https://aiproxy.cloud.example.com"
    - "https://sealaf-api.cloud.example.com"
    - "https://sealaf.cloud.example.com"

common:
  guideEnabled: false
  apiEnabled: false
  rechargeEnabled: false
  enterpriseRealNameAuthEnabled: false
  trackingEnabled: false
  realNameAuthEnabled: false
  licenseCheckEnabled: false
  realNameReward: 0
  realNameCallbackUrl: "https://cloud.example.org/api/account/faceIdRealNameAuthCallback"
  templateUrl: "https://template.example.org"
  applaunchpadUrl: "https://applaunchpad.example.org"
  dbproviderUrl: "https://dbprovider.example.org"
  objectstorageUrl: "https://objectstorage.example.org"
  cfSiteKey: ""

database:
  mongodbURI: "mongodb://..."
  globalCockroachdbURI: "postgres://..."
  regionalCockroachdbURI: "postgres://..."

desktop:
  layout:
    version: "en"
    title: "Sealos Cloud"
    logo: "/logo.svg"
    backgroundImage: "/images/bg-light.svg"
    forcedLanguage: "en"  # 自动根据 version 配置: "cn"→"zh", "en"→"en"
    customerServiceURL: ""
    discordInviteLink: ""  # 自动根据 version 配置: "en"时显示, "cn"时为空
    gtmId: null
    currencySymbol: "usd"  # 自动根据 version 配置: "cn"→"shellCoin", "en"→"usd"
    meta:
      title: "Sealos Cloud"
      description: "Sealos Cloud"
      keywords: "Sealos Cloud"
      scripts: []
      noscripts: []
    common:
      githubStarEnabled: true
      accountSettingEnabled: true
      docsUrl: "https://sealos.run/docs/Intro/"
      aiAssistantEnabled: false
      bannerEnabled: false
      subscriptionEnabled: false
      guestModeEnabled: false
      emailAlertEnabled: false
      phoneAlertEnabled: false
      announcementEnabled: false
  auth:
    proxyAddress: ""
    callbackURL: "https://cloud.example.com/callback"
    signUpEnabled: true
    baiduToken: ""
    hasBaiduToken: false
    jwt:
      internal: "..."
      regional: "..."
      global: "..."
    idp:
      password:
        enabled: true
        salt: "..."
      github:
        enabled: false
        proxyAddress: ""
        clientID: ""
        clientSecret: ""
      wechat:
        enabled: false
        proxyAddress: ""
        clientID: ""
        clientSecret: ""
      google:
        enabled: false
        proxyAddress: ""
        clientID: ""
        clientSecret: ""
      oauth2:
        enabled: false
        callbackURL: ""
        clientID: ""
        proxyAddress: ""
        clientSecret: ""
        authURL: ""
        tokenURL: ""
        userInfoURL: ""
      sms:
        enabled: false
      email:
        enabled: false
    captcha:
      turnstile:
        enabled: false
        siteKey: ""
        secretKey: ""
    billingUrl: "http://account-service.account-system.svc:2333"
    billingToken: ""
  teamManagement:
    maxTeamCount: 0
    maxTeamMemberCount: 0

tracking:
  websiteId: ""
  hostUrl: ""
  scriptUrl: ""

realNameOSS:
  accessKey: ""
  accessKeySecret: ""
  endpoint: ""
  ssl: false
  port: 0
  realNameBucket: ""
  enterpriseRealNameBucket: ""

Helm Chart 参数

参数描述默认值
replicaCount副本数1
image容器镜像ghcr.io/labring/sealos-desktop-frontend:latest
imagePullPolicy镜像拉取策略IfNotPresent
fullnameOverride覆盖完整资源名称sealos-desktop
serviceAccount.create创建服务账号true
serviceAccount.name服务账号名称desktop-frontend
service.port服务端口3000
resources.requests.cpuCPU 请求100m
resources.requests.memory内存请求128Mi
resources.limits.cpuCPU 限制2000m
resources.limits.memory内存限制2048Mi
ingress.enabled启用 Ingresstrue
ingress.classNameIngress 类nginx
autoConfigEnabled从 sealos-config 自动配置true

故障排查

检查部署状态

bash
# 检查 helm 发布
helm status desktop-frontend -n sealos

# 检查 pods
kubectl get pods -n sealos -l app.kubernetes.io/name=desktop-frontend

# 检查 configmap
kubectl get configmap sealos-desktop-config -n sealos -o yaml

# 检查 ingress
kubectl get ingress sealos-desktop -n sealos

# 查看日志
kubectl logs -n sealos -l app.kubernetes.io/name=desktop-frontend --tail=100 -f

常见问题

问题: Ingress 返回 404 或 502

  • 解决: 检查 service 是否存在且端口正确:kubectl get svc sealos-desktop -n sealos

问题: Pod 处于 CrashLoopBackOff 状态

  • 解决: 查看日志,检查数据库连接错误或缺失的环境变量

问题: OAuth 回调失败

  • 解决: 验证配置中的 callbackURL 是否与 OAuth 应用设置匹配

问题: 现有资源阻止安装

  • 解决: 脚本会自动通过添加 Helm 标签来接纳现有资源

高级用法

使用 Helm Values 自定义配置

所有 config.yaml 设置都可以通过 HELM_OPTIONS 环境变量传递 Helm --set 参数来自定义。完整文档请参阅 HELM_VALUES_GUIDE_CN.md

快速示例:

bash
# UI 自定义通过 HELM_OPTIONS
sealos run desktop-frontend:latest \
  -e HELM_OPTIONS="--set desktopConfig.layoutTitle=\"我的云平台\" --set desktopConfig.metaTitle=\"我的云平台\""

# OAuth 提供商
sealos run desktop-frontend:latest \
  -e HELM_OPTIONS="--set desktopConfig.githubEnabled=true --set desktopConfig.githubClientId=your-client-id --set desktopConfig.githubClientSecret=your-client-secret"

# 功能和通讯配置
sealos run desktop-frontend:latest \
  -e HELM_OPTIONS="--set desktopConfig.guideEnabled=true --set desktopConfig.rechargeEnabled=true --set desktopConfig.smsEnabled=true --set desktopConfig.emailEnabled=true --set desktopConfig.emailHost=smtp.example.com --set desktopConfig.emailPort=587"

# 结合环境变量和 HELM_OPTIONS
sealos run desktop-frontend:latest \
  -e HELM_OPTIONS="--set desktopConfig.layoutTitle=\"我的云平台\"" \
  -e CLOUD_DOMAIN=override.example.com \
  -e GITHUB_ENABLED=true

常用自定义选项:

  • UI 自定义: layoutTitle, layoutLogo, metaTitle, metaDescription, customerServiceURL
  • OAuth 提供商: githubEnabled, googleEnabled, wechatEnabled, oauth2Enabled 及其对应的 *ClientId, *ClientSecret
  • 功能开关: guideEnabled, rechargeEnabled, trackingEnabled, apiEnabled, realNameAuthEnabled
  • 通讯配置: smsEnabled, emailEnabled, emailHost, emailPort, emailUser, emailPassword
  • URL 配置: templateUrl, applaunchpadUrl, dbproviderUrl, objectstorageUrl, workorderUrl
  • 数据库配置: databaseMongodbURI, databaseGlobalCockroachdbURI, databaseLocalCockroachdbURI
  • 团队管理: maxTeamCount, maxTeamMemberCount

查看 23 个分类共 60+ 可配置参数,请参阅 HELM_VALUES_GUIDE_CN.md

禁用自动配置

bash
sealos run desktop-frontend:latest \
  -e AUTO_CONFIG_ENABLED=false \
  -e CLOUD_DOMAIN=cloud.example.com \
  -e DATABASE_MONGODB_URI=mongodb://...

自定义 Helm 选项

bash
sealos run desktop-frontend:latest -e HELM_OPTIONS="--timeout 10m --install"

覆盖命名空间

bash
sealos run desktop-frontend:latest -e RELEASE_NAMESPACE=my-namespace

构建镜像

bash
sealos build -t docker.io/labring/sealos-cloud-desktop:latest -f Kubefile .

常见问题

1. 如何配置中文/英文版本?

中文版本:

bash
sealos run desktop-frontend:latest \
  -e HELM_OPTIONS="--set desktopConfig.version=cn"

英文版本:

bash
sealos run desktop-frontend:latest \
  -e HELM_OPTIONS="--set desktopConfig.version=en"

2. 如何启用第三方登录?

方式 1: 使用环境变量(推荐)

bash
sealos run desktop-frontend:latest \
  -e GITHUB_ENABLED=true \
  -e GITHUB_CLIENT_ID=your-client-id \
  -e GITHUB_CLIENT_SECRET=your-client-secret

方式 2: 使用 HELM_OPTIONS(推荐用于复杂配置)

bash
sealos run desktop-frontend:latest \
  -e HELM_OPTIONS="--set desktopConfig.githubEnabled=true --set desktopConfig.githubClientId=your-client-id --set desktopConfig.githubClientSecret=your-client-secret"

3. 如何更新配置?

方式 1: 使用环境变量(推荐用于少量配置)

bash
sealos run desktop-frontend:latest -e CLOUD_DOMAIN=new.example.com

方式 2: 使用 HELM_OPTIONS(推荐用于多个配置)

bash
sealos run desktop-frontend:latest \
  -e HELM_OPTIONS="--set desktopConfig.cloudDomain=new.example.com --set desktopConfig.layoutTitle=\"New Title\" --set desktopConfig.guideEnabled=true"

方式 3: 直接编辑 ConfigMap

bash
kubectl edit configmap sealos-desktop-config -n sealos
kubectl rollout restart deployment sealos-desktop -n sealos

4. 配置文件在哪里?

配置存储在 sealos-desktop-config ConfigMap 中,挂载到 Pod 的 /app/data/config.yaml

查看配置:

bash
kubectl get configmap sealos-desktop-config -n sealos -o yaml
kubectl exec -n sealos deployment/sealos-desktop -- cat /app/data/config.yaml

5. 环境变量和 HELM_OPTIONS 的区别和优先级?

使用场景:

  • 环境变量: 少量配置、快速测试、常用配置项
  • HELM_OPTIONS: 多个配置、生产部署、访问所有 60+ 参数

优先级从高到低:

  1. 环境变量(如 CLOUD_DOMAIN
  2. HELM_OPTIONS 中的 --set 参数
  3. values.yaml 默认值

示例:

bash
# 环境变量会覆盖 HELM_OPTIONS 的值
sealos run desktop-frontend:latest \
  -e HELM_OPTIONS="--set desktopConfig.cloudDomain=from-helm.com" \
  -e CLOUD_DOMAIN=from-env.com  # 这个值会生效

技术支持