You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

80 lines
4.3 KiB

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
}