package console import ( "yunyan/comm" "yunyan/lego/sys/postgres" ) // AppEnvironment 部署环境/节点:一行 = 一台部署服务器(如 上海/日本/新加坡节点)。 // 存 console 主库(postgres.GetSys(),即 supabase 单库),与 app_registry 同库。 // // 只放「节点级、该服务器上各应用共用」的东西:SSH 登录、私有镜像仓库、Docker 网络、共享集群服务(etcd/nats/redis 地址)。 // **应用维度的部署配置(部署目录 deploy_dir、业务库 DSN、镜像名/tag、redis 库号 等)不放这里**, // 而是在「部署某应用到该节点」时填、存到 app_registry 部署行——见 model_registry.go 的 DeployDir/ImageName/ImageTag/ServiceDsn。 // // 密钥字段(SshPrivateKey / RegistryPass / RedisPwd)以 AES-256-GCM 密文落库 // (复用 api_svcconfig.go 的 svcEncrypt/svcDecrypt,密钥 this.options.EncryptKey),返回前端前脱敏为 "[encrypted]"。 type AppEnvironment struct { Id uint32 `gorm:"primaryKey;autoIncrement;column:id" json:"id"` Name string `gorm:"column:name;size:64" json:"name"` // 显示名,如 "上海生产" Code string `gorm:"column:code;size:32;index" json:"code"` // 区域码,对齐 prod-deploy.sh REGIONS:shanghai/japan/singapore Remark string `gorm:"column:remark;size:255" json:"remark"` Enabled bool `gorm:"column:enabled" json:"enabled"` // 是否启用(停用的不在应用「部署到目标环境」下拉展示) // ── SSH 部署目标(登录该服务器;节点级)── SshHost string `gorm:"column:ssh_host;size:128" json:"ssh_host"` // DEPLOY_HOST,远端 IP SshPort int `gorm:"column:ssh_port" json:"ssh_port"` // DEPLOY_PORT,默认 22 SshUser string `gorm:"column:ssh_user;size:64" json:"ssh_user"` // DEPLOY_USER,如 root SshPrivateKey string `gorm:"column:ssh_private_key;type:text" json:"ssh_private_key"` // DEPLOY_KEY 私钥内容(PEM)【加密】 // ── 私有镜像仓库 + Docker 网络(节点级共享;镜像名/tag 是应用维度,放部署行)── Registry string `gorm:"column:registry;size:255" json:"registry"` // 如 registry.ymaikj.com RegistryUser string `gorm:"column:registry_user;size:64" json:"registry_user"` // RegistryPass string `gorm:"column:registry_pass;size:255" json:"registry_pass"` // 【加密】 DockerNetwork string `gorm:"column:docker_network;size:64" json:"docker_network"` // 如 1panel-network // ── 节点共享集群服务(该服务器上各应用共用的地址;各应用自己的 DB/库号在部署行)── EtcdServers string `gorm:"column:etcd_servers;size:255" json:"etcd_servers"` // ETCD_SERVERS,如 etcd:2379 RedisAddr string `gorm:"column:redis_addr;size:255" json:"redis_addr"` // REDIS_ADDR(共享 redis 服务器;库号按应用分,放部署行) RedisPwd string `gorm:"column:redis_pwd;size:255" json:"redis_pwd"` // 【加密】 NatsUrl string `gorm:"column:nats_url;size:255" json:"nats_url"` // NATS_URL,如 nats://nats:4222 Createtime int64 `gorm:"column:createtime" json:"createtime"` Updatetime int64 `gorm:"column:updatetime" json:"updatetime"` } func (AppEnvironment) TableName() string { return comm.TableAppEnvironment } // ---- 环境表 CRUD(走 console 主库 postgres,与 app_registry 同库同套 helper)---- // listEnvs 返回全部环境(按 id 升序)。 func (this *modelComp) listEnvs() (models []*AppEnvironment, err error) { models = make([]*AppEnvironment, 0) err = postgres.Find(comm.TableAppEnvironment, &models, "") return } // getEnv 按 id 取环境。 func (this *modelComp) getEnv(id uint32) (model *AppEnvironment, err error) { model = &AppEnvironment{} err = postgres.FindOne(comm.TableAppEnvironment, model, "id=?", id) return } // addEnv 新增环境(Insert 后 model.Id 被回填)。 func (this *modelComp) addEnv(model *AppEnvironment) (err error) { err = postgres.Insert(comm.TableAppEnvironment, model) return } // saveEnv 更新环境。 func (this *modelComp) saveEnv(model *AppEnvironment) (err error) { err = postgres.Save(comm.TableAppEnvironment, model) return } // delEnv 删除环境。 func (this *modelComp) delEnv(id uint32) (err error) { err = postgres.Delete(comm.TableAppEnvironment, "id=?", id) return }