ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Magento Helm Chart 部署实战:在 Kubernetes 上安装与配置 Magento 电商平台

2026/10/8 1:36:50 拓冰建站 浏览量
Magento Helm Chart 部署实战:在 Kubernetes 上安装与配置 Magento 电商平台 【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载本文以 charts 仓库 stable/magento 的官方 README 与模板源码为基础系统讲解如何通过 Helm 在 Kubernetes 集群中部署 Magento 电商平台包括安装卸载流程、全部可配置参数、数据库与 Elasticsearch 接入方式、持久化与 Ingress 配置、监控指标采集以及跨大版本升级的注意事项。阅读完本文你将能够独立完成 Magento 的 Helm 化部署、按需定制 values 配置并理解 chart 内部参数到容器环境变量的映射机制。1. Chart 概览与弃用状态说明Magento 是一套功能丰富且灵活的电商解决方案内置交易选项、多商店multi-store能力、会员忠诚度计划、商品分类与消费者筛选、促销规则等特性。本仓库中的stable/magentochart 用于在 Kubernetes 集群上通过 Helm 包管理器引导一个 Magento 部署其核心镜像为 Bitnami 维护的bitnami/magento。需要特别注意的是该 chart 在仓库中已标记为弃用deprecated。依据 Chart.yaml 中的声明弃用原因是当前版本的 Magento 需要 Elasticsearch 作为搜索服务而 Bitnami 要求其维护的 chart 中所有依赖都必须由 Bitnami 自身维护这与其无法满足 Helm 技术规范中所有 Chart 依赖都应独立提交的要求相冲突。因此 Bitnami 官方维护的 Magento Helm chart 已迁移至bitnami/charts仓库中继续演进。从 Chart.yaml 可以看到该 chart 的版本信息chart 版本6.0.0应用版本appVersion: 2.3.1即默认部署的 Magento 版本为 2.3.1。尽管该 chart 已弃用其模板结构、参数体系和依赖管理方式仍具有完整的学习与参考价值本文后续内容基于本仓库实际代码展开。2. 前置条件在安装本 chart 之前需要确保集群满足以下条件Kubernetes 1.4且已启用 Beta APIs底层基础设施支持PV provisioner用于持久化卷的自动供给此外chart 依赖管理声明于 requirements.yaml包含两个可选依赖依赖版本范围启用条件mariadb7.x.xmariadb.enabled为 true 时elasticsearch1.x.xelasticsearch.enabled为 true 时其中 MariaDB chart 用于引导一个作为 Magento 应用数据库的 MariaDB 部署。若你已有现成的数据库或搜索服务可关闭对应依赖并改用外部连接参数。3. 安装与卸载 Chart3.1 快速安装使用默认配置直接安装$ helm install stable/magento以自定义 release 名称安装示例 release 名为my-release$ helm install --name my-release stable/magento该命令会以默认配置将 Magento 部署到 Kubernetes 集群中。安装完成后可通过helm list查看所有已部署的 release。3.2 卸载$ helm delete my-release该命令会移除与 chart 关联的所有 Kubernetes 组件并删除对应 release。3.3 安装后访问信息安装完成后chart 会通过 NOTES.txt 模板输出访问指引。根据服务类型不同获取访问信息的方式有所差异LoadBalancer 类型需要先等待负载均衡器 IP 就绪可通过kubectl get svc -w release-magento观察状态然后用以下命令取得主机地址与管理员密码export APP_HOST$(kubectl get svc --namespace NAMESPACE RELEASE-magento --template {{range (index .status.loadBalancer.ingress 0)}}{{.}}{{end}}) export APP_PASSWORD$(kubectl get secret --namespace NAMESPACE RELEASE-magento -o jsonpath{.data.magento-password} | base64 --decode) echo Store URL: http://$APP_HOST/ echo Admin URL: http://$APP_HOST/admin echo Username: user echo Password: $APP_PASSWORDClusterIP 类型可使用端口转发访问kubectl port-forward --namespace NAMESPACE svc/RELEASE-magento 8080:80 echo Store URL: http://127.0.0.1:8080/ echo Admin URL: http://127.0.0.1:8080/admin4. 配置参数全解本 chart 的全部配置参数及其默认值如下表所示。这些参数映射到 bitnami/magento。参数描述默认值global.imageRegistry全局 Docker 镜像仓库nilglobal.imagePullSecrets全局 Docker registry 密钥名数组[]不向 Pod 添加 image pull secretsimage.registryMagento 镜像仓库docker.ioimage.repositoryMagento 镜像名bitnami/magentoimage.tagMagento 镜像标签{TAG_NAME}实际默认2.3.1-debian-9-r56image.debug是否开启 debug 值falseimage.pullPolicy镜像拉取策略imageTag为latest时为Always否则IfNotPresentimage.pullSecretsdocker-registry 密钥名数组[]magentoHost用于生成应用 URL 的 Magento 主机名nilmagentoLoadBalancerIPMagento Service 的loadBalancerIPnilmagentoUsername应用管理员用户名usermagentoPassword应用管理员密码随机 10 位字母数字字符串magentoEmail管理员邮箱userexample.commagentoFirstNameMagento 管理员名字FirstNamemagentoLastNameMagento 管理员姓氏LastNamemagentoModeMagento 运行模式developermagentoAdminUriMagento 后台访问前缀adminallowEmptyPassword是否允许数据库空密码yesingress.enabled是否启用 Ingress 资源falseingress.annotationsIngress 注解[]ingress.certManager是否为 cert-manager 添加注解falseingress.hosts[0].nameMagento 安装的主机名magento.localingress.hosts[0].pathURL 结构中的路径/ingress.hosts[0].tlsIngress 是否启用 TLS 后端falseingress.hosts[0].tlsHostsIngress 的 TLS 主机数组为nil时默认使用ingress.hosts[0].namenilingress.hosts[0].tlsSecretTLS Secret证书magento.local-tls-secretingress.secrets[0].nameTLS Secret 名称nilingress.secrets[0].certificateTLS Secret 证书nilingress.secrets[0].keyTLS Secret 密钥nilexternalDatabase.host外部数据库主机nilexternalDatabase.port外部数据库端口3306externalDatabase.user外部数据库已有用户名bn_magentoexternalDatabase.password上述用户的密码nilexternalDatabase.database已有数据库名bitnami_magentoexternalElasticsearch.host外部 Elasticsearch 服务器主机nilexternalElasticsearch.port外部 Elasticsearch 服务器端口nilmariadb.enabled是否使用 MariaDB charttruemariadb.rootUser.passwordMariaDB 管理员密码nilmariadb.db.name创建的数据库名bitnami_magentomariadb.db.user创建的数据库用户bn_magentomariadb.db.password数据库密码随机 10 位字母数字字符串elasticsearch.enabled是否使用 Elasticsearch chart 作为搜索引擎falseservice.typeKubernetes Service 类型LoadBalancerservice.portService HTTP 端口80service.httpsPortService HTTPS 端口443nodePorts.httpsKubernetes https 节点端口service.externalTrafficPolicy是否保留客户端源 IPClusterservice.nodePorts.httpKubernetes http 节点端口service.nodePorts.httpsKubernetes https 节点端口service.loadBalancerIPMagento Service 的loadBalancerIPnillivenessProbe.enabled是否启用存活探针truelivenessProbe.initialDelaySeconds存活探针启动延迟1000livenessProbe.periodSeconds存活探针执行间隔10livenessProbe.timeoutSeconds存活探针超时时间5livenessProbe.successThreshold存活探针最小连续成功次数1livenessProbe.failureThreshold存活探针最小连续失败次数6readinessProbe.enabled是否启用就绪探针truereadinessProbe.initialDelaySeconds就绪探针启动延迟30readinessProbe.periodSeconds就绪探针执行间隔5readinessProbe.timeoutSeconds就绪探针超时时间3readinessProbe.successThreshold就绪探针最小连续成功次数1readinessProbe.failureThreshold就绪探针最小连续失败次数3persistence.enabled是否使用 PVC 启用持久化truepersistence.magento.storageClassMagento 卷的 PVC Storage Classnil使用 alpha storage annotationpersistence.magento.accessModeMagento 卷的 PVC 访问模式ReadWriteOncepersistence.magento.sizeMagento 卷的 PVC 存储请求8GiresourcesCPU/内存资源 requests/limitsMemory:512MiCPU:300mpodAnnotationsPod 注解{}metrics.enabled是否启动 side-car Prometheus exporterfalsemetrics.image.registryApache exporter 镜像仓库docker.iometrics.image.repositoryApache exporter 镜像名lusotycoon/apache-exportermetrics.image.tagApache exporter 镜像标签v0.5.0metrics.image.pullPolicy镜像拉取策略IfNotPresentmetrics.image.pullSecretsdocker-registry 密钥名数组[]metrics.podAnnotationsMetrics exporter Pod 的附加注解{prometheus.io/scrape: true, prometheus.io/port: 9117}metrics.resourcesExporter 资源 requests/limits{}4.1 通过 --set 指定参数使用helm install的--set keyvalue[,keyvalue]参数逐项指定。例如设置 Magento 管理员账号与密码并同时设置 MariaDB root 用户密码$ helm install --name my-release \ --set magentoUsernameadmin,magentoPasswordpassword,mariadb.mariadbRootPasswordsecretpassword \ stable/magento上述命令将 Magento 管理员账号用户名与密码分别设为admin与password并将 MariaDB root 用户密码设为secretpassword。4.2 通过 values 文件指定参数也可以编写 YAML 文件一次性提供全部参数$ helm install --name my-release -f values.yaml stable/magento仓库提供了两个可直接参考的配置文件stable/magento/values.yaml默认配置Elasticsearch 关闭elasticsearch.enabled: falseMetrics 关闭metrics.enabled: falsestable/magento/values-production.yaml生产环境推荐配置其中elasticsearch.enabled: true、metrics.enabled: true4.3 关键注意事项必须指定magentoHost为使 Magento 正常运行应通过magentoHost参数指定 Magento 服务的 FQDN推荐或公网 IP 地址。预留公网 IP可选可通过magentoLoadBalancerIP参数为 Magento Service 分配保留 IP该特性仅在部分云厂商如 GKE可用。在 GKE 上预留公网 IP 的命令为$ gcloud compute addresses create magento-public-ip然后将返回的保留 IP 作为magentoLoadBalancerIP的值在安装时指定。开启 Elasticsearch 需谨慎将elasticsearch.enabled设为true默认会额外启动七个 Pod请根据集群资源审慎使用。4.4 参数到环境变量的源码映射从 deployment.yaml 可以看到values 中的配置会被转换成 Bitnami Magento 容器的一组环境变量values 参数注入的环境变量取值逻辑mariadb.enabled/externalDatabase.hostMARIADB_HOST启用 MariaDB 时取RELEASE-mariadb服务名否则取externalDatabase.hostmariadb.enabled/externalDatabase.portMARIADB_PORT_NUMBER启用 MariaDB 时为3306否则取externalDatabase.portelasticsearch.enabled/externalElasticsearch.hostELASTICSEARCH_HOST启用时取 ES 客户端服务名否则取外部 host为空则置空字符串elasticsearch.enabled/externalElasticsearch.portELASTICSEARCH_PORT_NUMBER启用时为9200否则取外部端口mariadb.db.name/externalDatabase.databaseMAGENTO_DATABASE_NAME按数据库来源二选一mariadb.db.user/externalDatabase.userMAGENTO_DATABASE_USER按数据库来源二选一数据库密码MAGENTO_DATABASE_PASSWORD通过secretKeyRef从对应 Secret 读取见下节magentoHost/service.portMAGENTO_HOST主机名 非 80 端口时附加端口号magentoUsernameMAGENTO_USERNAME直接取值magentoPasswordMAGENTO_PASSWORD通过secretKeyRef从 Secret 读取magentoEmailMAGENTO_EMAIL直接取值magentoAdminUriMAGENTO_ADMINURI直接取值magentoFirstNameMAGENTO_FIRSTNAME直接取值magentoLastNameMAGENTO_LASTNAME直接取值magentoModeMAGENTO_MODE直接取值此外当image.debug为 true 时容器还会注入BASH_DEBUG1与NAMI_DEBUG1以输出更多调试日志见 deployment.yaml。4.5 密码的随机生成与 Secret 管理密码类参数未显式指定时由 secrets.yaml 与 _helpers.tpl 中的magento.randomPassword模板函数生成先随机生成 9 位字母数字字符再追加 1 位数字构成 10 位字符串追加数字是为了规避密码校验规则。生成的密码以 base64 形式存放于名为release-magento的 Opaque Secret 中并通过secretKeyRef注入 Pod避免密码明文出现在 Deployment 清单中。当使用外部数据库时mariadb.enabled: falseexternaldb-secrets.yaml 会额外创建名为release-magento-externaldb的 Secret 存放db-password供 Deployment 中的MAGENTO_DATABASE_PASSWORD环境变量引用。5. 数据库与搜索引擎接入Magento 的运行依赖数据库MariaDB与搜索引擎Elasticsearch本 chart 支持两种接入方式。5.1 使用内置依赖默认默认情况下mariadb.enabled: truechart 会随 Magento 一起部署一个 MariaDB 实例依赖版本 7.x.x并自动创建数据库bitnami_magento与用户bn_magento。默认配置关闭了 MariaDB 的复制功能mariadb.replication.enabled: false见 values.yaml并为其配置了独立的 8Gi 持久卷。Elasticsearch 默认关闭elasticsearch.enabled: false。若需启用直接设为 true 即可部署配套的 Elasticsearch 依赖版本 1.x.x或参考 values-production.yaml 的生产配置。5.2 使用外部数据库与外部 Elasticsearch将mariadb.enabled设为false并配置externalDatabase组参数即可让 Magento 连接已有的外部 MariaDB/MySQL 实例mariadb: enabled: false externalDatabase: host: my-db.example.com port: 3306 user: bn_magento password: my-db-password database: bitnami_magento同理将elasticsearch.enabled设为false并配置externalElasticsearch.host/externalElasticsearch.port即可接入外部 Elasticsearch 服务。5.3 外部数据库部署完整示例若集群中没有内置 MariaDB可参考以下完整安装命令含 release 命名、数据库连接与主机配置$ helm install --name my-release stable/magento \ --set mariadb.enabledfalse \ --set externalDatabase.hostYOUR_EXTERNAL_DATABASE_HOST \ --set externalDatabase.userYOUR_EXTERNAL_DATABASE_USER \ --set externalDatabase.passwordYOUR_EXTERNAL_DATABASE_PASSWORD \ --set externalDatabase.databaseYOUR_EXTERNAL_DATABASE_NAME \ --set magentoHostYOUR_MAGENTO_HOST \ --set magentoPasswordYOUR_MAGENTO_PASSWORD \ --set service.typeLoadBalancer6. 数据持久化Bitnami Magento 镜像将 Magento 数据与配置存储在容器的/bitnami/magento路径下对应 deployment.yaml 中的volumeMounts。chart 通过 Persistent Volume ClaimsPVC保证数据在重新部署后依然保留persistence.enabled是否启用 PVC默认truepersistence.magento.storageClassStorage Class设置为-时storageClassName为空字符串禁用动态供给未定义或为null时不设置 storageClassName使用默认 provisionerAWS 上为 gp2GKE/AWS/OpenStack 上为 standardpersistence.magento.accessMode默认ReadWriteOncepersistence.magento.size默认8Gi对应的 PVC 清单由 magento-pvc.yaml 渲染生成。关闭持久化persistence.enabled: false时Deployment 会改用emptyDir卷挂载数据见 deployment.yaml数据在 Pod 重建后会丢失。需要注意一个已知问题在跨可用区的 EBS 集群中PVC 可能无法正常挂载。确保集群已正确配置为在节点所在可用区内创建卷。Kubernetes 1.12 通过Volume Binding Mode特性解决了该问题。7. Ingress 与 TLS 配置通过 Ingress 可将 Magento 暴露到自定义域名。启用方式ingress: enabled: true hosts: - name: magento.local path: / tls: falseingress.annotations以 key:value 形式配置 Ingress 注解如kubernetes.io/ingress.class: nginxingress.certManager设为true时自动添加kubernetes.io/tls-acme: true注解配合 cert-manager 自动签发证书ingress.hosts[].tls设为true时启用 TLS需通过tlsSecret指定存放证书的 Secretingress.hosts[].tlsHosts可选的 TLS 主机列表适用于 Ingress controller 支持 www 域名跳转的场景不指定时默认使用ingress.hosts[].nameingress.secrets[]提供自有证书时可在此以 base64 形式声明证书与私钥内容需以-----BEGIN CERTIFICATE-----或-----BEGIN RSA PRIVATE KEY-----开头name需与上方的tlsSecret对应若使用 cert-manager则无需手动创建 Secret实际渲染逻辑见 ingress.yamlcert-manager 开启时注入kubernetes.io/tls-acme注解每个 host 生成一条路由规则后端指向release-magentoService 的http端口tls: true的 host 会生成对应的 TLS 配置段。8. Service 与探针配置8.1 Service默认service.type: LoadBalancer。对 minikube 等本地环境可改为NodePort。相关参数service.port/service.httpsPortHTTP/HTTPS 端口默认 80/443service.nodePorts.http/service.nodePorts.httpsNodePort 模式下可显式指定节点端口范围 30000-32767留空则由集群自动分配service.externalTrafficPolicy默认Cluster可改为Local以保留客户端源 IPservice.loadBalancerIP为 LoadBalancer 指定预留 IP对应的 Service 清单见 svc.yaml。8.2 健康探针chart 为 Magento 主容器配置了 liveness 与 readiness 探针均通过 HTTP GET 访问/index.php并携带Host请求头指向magento.host进行健康检查见 deployment.yaml。livenessProbe默认initialDelaySeconds: 1000、periodSeconds: 10、timeoutSeconds: 5、successThreshold: 1、failureThreshold: 6。较长的初始延迟是因为 Magento 首次启动时需要完成初始化安装耗时较长。readinessProbe默认initialDelaySeconds: 30、periodSeconds: 5、timeoutSeconds: 3、successThreshold: 1、failureThreshold: 3。两个探针均可通过livenessProbe.enabled/readinessProbe.enabled整体开关控制。9. Prometheus 监控指标当metrics.enabled: true时chart 会以 side-car 方式启动一个 Apache exporter 容器镜像lusotycoon/apache-exporter:v0.5.0用于采集 Magento 所在 Apache 服务器的访问指标exporter 容器监听9117端口启动命令为apache_exporter -scrape_uri http://status.localhost:80/server-status/?auto其抓取数据依赖容器内127.0.0.1 status.localhost的 hostAliases 映射见 deployment.yaml 与 deployment.yamlmetrics.podAnnotations默认携带prometheus.io/scrape: true与prometheus.io/port: 9117供 Prometheus 自动发现与抓取exporter 自身也配置了独立于主容器的 liveness/readiness 探针分别请求/metrics路径默认的 values.yaml 中metrics.enabled为false生产配置 values-production.yaml 中已开启。10. 版本升级注意事项本 chart 跨大版本升级涉及以下兼容性要点升级前务必评估。10.1 升级到 6.0.06.0.0 将 Deployment 资源的apiVersion从旧的extensions/v1beta1更新为apps/v1。Helm 会基于资源的 GroupVersionKindGVK即 group / version / kind 组合执行对象查找而变更 GVK 在 Kubernetes 视角下属于兼容性破坏变更无法对既有对象进行原地升级。早期版本的 Helm 3 未正确执行该查找现已按规范修复。此大版本即用于标记这一变更。从源码看deployment.yaml 通过magento.deployment.apiVersion模板函数决定 apiVersion集群版本低于 1.14 时使用extensions/v1beta1否则使用apps/v1见 _helpers.tpl。10.2 升级到 5.0.0若希望将 Elasticsearch 6 配置为 Magento 搜索引擎需要手动干预在 Magento 后台将Search Engine设置为Elasticsearch 6.0。如果使用本 chart 内置的 Elasticsearch可用以下命令获取其 hostname 与 port$ kubectl get svc -l appelasticsearch,componentclient,releaseRELEASE_NAME -o jsonpath{.items[0].metadata.name} $ kubectl get svc -l appelasticsearch,componentclient,releaseRELEASE_NAME -o jsonpath{.items[0].spec.ports[0].port}其中RELEASE_NAME为 release 名称可通过helm list查询。10.3 升级到 3.0.0从 3.0.0 之前的版本升级不保证向后兼容除非修改 chart Deployment 上使用的 labels。以下示例假设 release 名为magento$ kubectl patch deployment magento-magento --typejson -p[{op: remove, path: /spec/selector/matchLabels/chart}] $ kubectl delete statefulset magento-mariadb --cascadefalse11. 镜像 Tag 策略建议在生产环境中强烈建议使用**不可变标签immutable tags**而非滚动标签rolling tags。使用不可变标签可确保当同一 tag 被更新为不同镜像时你的部署不会随之自动变化。Bitnami 会在主容器发布新版本、发生重大变更或存在关键安全漏洞时发布新版 chart 以更新其容器。仓库中的 NOTES.txt 模板会在检测到镜像 tag 非-r数字结尾且非 sha256 摘要时输出滚动标签警告。当前默认 tag2.3.1-debian-9-r56即属于带修订号的不可变标签而latest这类 tag 应避免在生产环境使用。12. 模板实现要点速览为便于深入理解 chart 内部机制将核心模板文件整理如下templates/deployment.yaml主 Deployment包含环境变量注入、探针、volumeMounts 与可选 metrics side-cartemplates/_helpers.tpl名称渲染magento.fullname、随机密码生成magento.randomPassword、镜像拼接magento.image、服务 IP 与 host 推断magento.serviceIP/magento.host、Deployment apiVersion 判定templates/secrets.yaml存放 Magento 管理员密码的 Secrettemplates/externaldb-secrets.yaml外部数据库密码 Secret仅在mariadb.enabled: false时生成templates/magento-pvc.yamlMagento 数据卷 PVCtemplates/svc.yamlService 清单LoadBalancer / NodePort / ClusterIPtemplates/ingress.yamlIngress 与 TLS 配置templates/NOTES.txt安装完成后的访问指引与滚动 tag 警告其中magento.host的推断逻辑值得一提当 Service 类型为 ClusterIP 时返回127.0.0.1否则返回magentoHost或loadBalancerIP见 _helpers.tpl。同时 Deployment 的渲染还有一个前置条件必须同时满足 host 已配置且存在数据库来源mariadb.enabled为 true 或externalDatabase.host已设置否则 Deployment 不会生成见 deployment.yaml。这也是为什么安装时必须提供magentoHost或数据库连接信息——NOTES.txt 中会相应输出引导性的helm upgrade补全命令。13. 快速参考一份可运行的完整配置综合以上内容给出一个接入 Ingress、外部数据库与监控的完整 values 示例image: registry: docker.io repository: bitnami/magento tag: 2.3.1-debian-9-r56 pullPolicy: IfNotPresent magentoHost: shop.example.com magentoUsername: admin magentoEmail: adminexample.com magentoAdminUri: admin magentoMode: developer mariadb: enabled: false externalDatabase: host: mariadb.example.internal port: 3306 user: bn_magento password: change-me database: bitnami_magento elasticsearch: enabled: false externalElasticsearch: host: elasticsearch.example.internal port: 9200 ingress: enabled: true certManager: true hosts: - name: shop.example.com path: / tls: true tlsSecret: magento-tls service: type: ClusterIP port: 80 persistence: enabled: true magento: storageClass: standard accessMode: ReadWriteOnce size: 8Gi metrics: enabled: true resources: requests: memory: 512Mi cpu: 300m将该文件保存为my-values.yaml后执行$ helm install --name my-release -f my-values.yaml stable/magento即可完成一次带域名访问、外部数据库/搜索服务、持久化与 Prometheus 监控的 Magento 部署。安装完成后通过kubectl get secret my-release-magento -o jsonpath{.data.magento-password} | base64 --decode获取管理员初始密码。赞分享【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载相关推荐Kubernetes 上部署 Moodle 学习平台Helm Chart 安装、参数配置与运维实战Kubernetes 上部署 Moodle 学习平台Helm Chart 安装、参数配置与运维实战 导读 本文基于 helm/charts 仓库中 stabl使用 Helm Chart 在 Kubernetes 上部署 Istio 0.2.12安装、RBAC 与配置实战使用 Helm Chart 在 Kubernetes 上部署 Istio 0.2.12安装、RBAC 与配置实战 Istio 是一个为微服务提供统一连接、管理Redmine Helm Chart 部署实战在 Kubernetes 上安装与配置项目管理系统Redmine Helm Chart 部署实战在 Kubernetes 上安装与配置项目管理系统 导读 Redmine 是一款免费开源、基于 Web 的项目管上一篇Ghidriff vs Bindiff终极二进制差异分析工具对比评测下一篇HandBrake Web预设管理终极教程导入、创建与优化编码配置创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考