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
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"` // 如 docker-registry.ideapsound.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
|
|
}
|
|
|