diff --git a/README.md b/README.md index c8f1734e4b0bb9b542da9b5c9ac7c1aedc134bff..6d90d31d7d35d1557a12f4260e6126333c209868 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,13 @@ go-admin-server是go-admin项目的服务端程序,基于RBAC的权限模型 - GitHub: https://github.com/MarchGe/go-admin-server - Gitee: https://gitee.com/go-admin_1/go-admin-server +#### 在线体验 +- https://go-admin.dy-technology.com + ```text + 账号:root@example.com + 密码:123456 + ``` + #### go-admin-server - 配置文件 - 支持使用nacos做配置中心或直接指定本地配置文件两种方式,以本地配置文件为例,启动示例: diff --git a/app/admin/model/dvmodel/app.go b/app/admin/model/dvmodel/app.go index cf54f4e80b68c75f175dbdced3b54d0b11127cc4..fb4fb7e41e92a9312cbf1d3edd90308990df8a37 100644 --- a/app/admin/model/dvmodel/app.go +++ b/app/admin/model/dvmodel/app.go @@ -6,7 +6,7 @@ type App struct { model.Base Name string `json:"name" gorm:"type:varchar(50);not null;index:idx_n_v,unique,priority:1;comment:名称"` Version string `json:"version" gorm:"type:varchar(50);not null;index:idx_n_v,unique,priority:2;comment:版本"` - Port int16 `json:"port" gorm:"type:int;not null;comment:应用端口"` + Port int32 `json:"port" gorm:"type:int;not null;comment:应用端口"` Key string `json:"key" gorm:"type:varchar(255);not null;comment:部署包的路劲"` FileName string `json:"fileName" gorm:"type:varchar(100);not null;comment:部署包的文件名"` } diff --git a/app/admin/model/dvmodel/host.go b/app/admin/model/dvmodel/host.go index 4ed0a62a78cb970db2bfb93c06b37e629914b695..3b3d50b56aeb5ea6c7f37825e834ab603c6f1b6e 100644 --- a/app/admin/model/dvmodel/host.go +++ b/app/admin/model/dvmodel/host.go @@ -6,7 +6,7 @@ type Host struct { model.Base Name string `json:"name" gorm:"type:varchar(50);not null;index:idx_name;comment:名称"` Ip string `json:"ip" gorm:"type:varchar(50);not null;index:idx_ip,unique;comment:IP"` - Port int16 `json:"port" gorm:"type:int;not null;comment:ssh端口"` + Port int32 `json:"port" gorm:"type:int;not null;comment:ssh端口"` User string `json:"user" gorm:"type:varchar(50);not null;comment:ssh用户名"` Password string `json:"password" gorm:"type:varchar(255);not null;comment:ssh密码"` SortNum int32 `json:"sortNum" gorm:"type:int;default:0;comment:顺序"` diff --git a/app/admin/service/dvservice/app.go b/app/admin/service/dvservice/app.go index 86351512d6395d83663d3a08a21b011de3fe29d8..4c003f6dc4bb4029151a2e76c694412241ee7202 100644 --- a/app/admin/service/dvservice/app.go +++ b/app/admin/service/dvservice/app.go @@ -56,7 +56,7 @@ func (s *AppService) moveTmpPkg(tmpKey, key string) error { cfg := config.GetConfig() tmpFile := s.GetUploadTmpDir(cfg.WorkDir) + "/" + tmpKey pkgFile := path.Clean(cfg.UploadPkgPath) + "/" + key - if err := os.MkdirAll(path.Dir(pkgFile), 0644); err != nil { + if err := os.MkdirAll(path.Dir(pkgFile), 0755); err != nil { return fmt.Errorf("create directory %s error, %w", path.Dir(pkgFile), err) } if err := os.Rename(tmpFile, pkgFile); err != nil { @@ -69,7 +69,7 @@ func (s *AppService) movePkg(oldKey, newKey string) error { cfg := config.GetConfig() oldFile := path.Clean(cfg.UploadPkgPath) + "/" + oldKey newFile := path.Clean(cfg.UploadPkgPath) + "/" + newKey - if err := os.MkdirAll(path.Dir(newFile), 0644); err != nil { + if err := os.MkdirAll(path.Dir(newFile), 0755); err != nil { return fmt.Errorf("create directory %s error, %w", path.Dir(newFile), err) } if err := os.Rename(oldFile, newFile); err != nil { diff --git a/app/admin/service/dvservice/dto/req/app_upsert_req.go b/app/admin/service/dvservice/dto/req/app_upsert_req.go index f35a4826536f01231770bfaea746efc8cc8a51c1..59cdfd0caf2bf8603c33802939cde0a63e35d13f 100644 --- a/app/admin/service/dvservice/dto/req/app_upsert_req.go +++ b/app/admin/service/dvservice/dto/req/app_upsert_req.go @@ -4,7 +4,7 @@ const AppPkgFileNameMaxLength = 100 // 跟结构体里的FileName字段长度限 type AppUpsertReq struct { Name string `json:"name" binding:"required,max=50" label:"名称"` Version string `json:"version" binding:"required,max=50" label:"版本"` - Port int16 `json:"port" binding:"required,min=1,max=65535" label:"端口"` + Port int32 `json:"port" binding:"required,min=1,max=65535" label:"端口"` Key string `json:"key" binding:"required,max=255" label:"部署包"` FileName string `json:"fileName" binding:"required,max=100" label:"文件名"` } diff --git a/app/admin/service/dvservice/dto/req/host_upsert_req.go b/app/admin/service/dvservice/dto/req/host_upsert_req.go index 67e3fb2b9e14b45ba523a17a1307fe70c40861ae..2bf09158e39fb1d471f9c4addec80dbddbfcd47c 100644 --- a/app/admin/service/dvservice/dto/req/host_upsert_req.go +++ b/app/admin/service/dvservice/dto/req/host_upsert_req.go @@ -3,7 +3,7 @@ package req type HostUpsertReq struct { Name string `json:"name" binding:"required,max=50" label:"名称"` Ip string `json:"ip" binding:"required,max=50" label:"ip地址"` - Port int16 `json:"port" binding:"required,min=1,max=65535" label:"端口"` + Port int32 `json:"port" binding:"required,min=1,max=65535" label:"端口"` User string `json:"user" binding:"required,max=50" label:"用户名"` Password string `json:"password" binding:"required" label:"密码"` SortNum int32 `json:"sortNum" binding:"omitempty" label:"排序"` diff --git a/app/admin/service/dvservice/dto/req/ssh_connect_test_params.go b/app/admin/service/dvservice/dto/req/ssh_connect_test_params.go index 944e9964b829795c40c944df1ff995e303110ace..6703264451ebb3585b316dee8ae9f7be41e5467e 100644 --- a/app/admin/service/dvservice/dto/req/ssh_connect_test_params.go +++ b/app/admin/service/dvservice/dto/req/ssh_connect_test_params.go @@ -4,7 +4,7 @@ const HostUpdateMode = 1 type SshConnectTestParams struct { Ip string `form:"ip" json:"ip" binding:"required,max=50" label:"ip地址"` - Port int16 `form:"port" json:"port" binding:"required,min=1,max=65535" label:"端口"` + Port int32 `form:"port" json:"port" binding:"required,min=1,max=65535" label:"端口"` User string `form:"user" json:"user" binding:"required,max=50" label:"用户名"` Password string `form:"password" json:"password" binding:"required" label:"密码"` Mode int8 `form:"mode" json:"mode" binding:"omitempty,oneof=0 1" label:"模式"` diff --git a/app/admin/service/dvservice/task/deploy_task.go b/app/admin/service/dvservice/task/deploy_task.go index 0a041f13abf4bcaa0f6b3c76bb1b1b6864840411..e937ef9bf366f9e65df407029f0a635b9ea38aff 100644 --- a/app/admin/service/dvservice/task/deploy_task.go +++ b/app/admin/service/dvservice/task/deploy_task.go @@ -343,16 +343,17 @@ func (s *DeployTaskService) uploadFile(sftpClient *sftp.Client, localPath, remot if errors.Is(err, os.ErrNotExist) { return fmt.Errorf("app package %s not found", localPath) } else { - return fmt.Errorf("open local file error, %w", err) + return fmt.Errorf("open local file %s error, %w", localPath, err) } } defer func() { _ = localFile.Close() }() - if err = sftpClient.MkdirAll(path.Dir(remotePath)); err != nil { - return fmt.Errorf("sftp create remote dir error, %w", err) + remoteDir := path.Dir(remotePath) + if err = sftpClient.MkdirAll(remoteDir); err != nil { + return fmt.Errorf("sftp create remote dir %s error, %w", remoteDir, err) } remoteFile, err := sftpClient.Create(remotePath) if err != nil { - return fmt.Errorf("sftp create remote file error, %w", err) + return fmt.Errorf("sftp create remote file %s error, %w", remotePath, err) } defer func() { _ = remoteFile.Close() }() _, err = io.Copy(remoteFile, localFile) diff --git a/app/admin/service/dvservice/task/task_log.go b/app/admin/service/dvservice/task/task_log.go index 075e4e1293a1b5df8f624f7dc91a47937f9528a2..aab66fb9c50bbb1eba9212b74b6a639ffe769d32 100644 --- a/app/admin/service/dvservice/task/task_log.go +++ b/app/admin/service/dvservice/task/task_log.go @@ -38,7 +38,7 @@ type ManifestEntry struct { func (s *LogService) createManifestLogFile(taskId int64) (*os.File, error) { dir := s.getManifestLogDir(taskId) - if err := os.MkdirAll(dir, 666); err != nil { + if err := os.MkdirAll(dir, 0755); err != nil { return nil, err } fileName := "manifest-" + time.Now().Format("2006-01-02+15_04_05") @@ -47,7 +47,7 @@ func (s *LogService) createManifestLogFile(taskId int64) (*os.File, error) { func (s *LogService) createHostLogFile(taskId int64, host, fileName string) (*os.File, error) { dir := s.getHostLogDir(taskId, host) - if err := os.MkdirAll(dir, 666); err != nil { + if err := os.MkdirAll(dir, 0755); err != nil { return nil, err } return os.Create(dir + "/" + fileName) diff --git a/config/config.go b/config/config.go index d3160a32e840586eebee35b22a497c6255912edb..a3598ef1e4f51f227693839c176d976463f641ab 100644 --- a/config/config.go +++ b/config/config.go @@ -52,11 +52,11 @@ type CookieConfig struct { type Pprof struct { Enable bool `mapstructure:"enable"` // 是否开启pprof性能分析 - Port int16 `mapstructure:"port"` // pprof性能分析服务监听的端口 + Port int32 `mapstructure:"port"` // pprof性能分析服务监听的端口 } type MysqlConfig struct { Host string `mapstructure:"host"` - Port int16 `mapstructure:"port"` + Port int32 `mapstructure:"port"` Username string `mapstructure:"username"` Password string `mapstructure:"password"` Database string `mapstructure:"database"` diff --git a/ml_admin.sql b/ml_admin.sql index 74ad8789396f6c75f278bd2bbe250c45dd47e2cf..ab80e21202cfe88a7a80638479be84f3b61cd72a 100644 --- a/ml_admin.sql +++ b/ml_admin.sql @@ -46,7 +46,7 @@ CREATE TABLE `dv_app` ( `version` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '版本', `key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '部署包的路劲', `file_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '部署包的文件名', - `port` smallint(0) NOT NULL COMMENT '应用端口', + `port` int(0) NOT NULL COMMENT '应用端口', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `idx_n_v`(`name`, `version`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 33 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; @@ -75,7 +75,7 @@ CREATE TABLE `dv_host` ( `update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '更新时间', `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '名称', `ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'IP', - `port` smallint(0) NOT NULL COMMENT 'ssh端口', + `port` int(0) NOT NULL COMMENT 'ssh端口', `user` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'ssh用户名', `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'ssh密码', `sort_num` int(0) NULL DEFAULT 0 COMMENT '顺序', @@ -397,7 +397,6 @@ INSERT INTO `ops_menu` VALUES (57, 'menu:update', '编辑', '', 300, '', 0, 0, 4 INSERT INTO `ops_menu` VALUES (58, 'menu:delete', '删除', '', 400, '', 0, 0, 4, '2024-03-13 00:00:36', '2024-03-13 00:00:36', 0); INSERT INTO `ops_menu` VALUES (59, '', '常用网站', 'tijikongjian', 300, '', 1, 0, 0, '2024-03-13 23:05:56', '2024-04-14 01:25:07', 0); INSERT INTO `ops_menu` VALUES (60, '', 'Element-Plus', 'zhinanzhidao', 1000, 'https://element-plus.org/zh-CN/', 1, 1, 59, '2024-03-13 23:07:07', '2024-04-04 04:01:24', 1); -INSERT INTO `ops_menu` VALUES (62, 'icon:all', '查询全部图标', '', 500, '', 0, 0, 4, '2024-03-14 01:49:58', '2024-04-22 01:13:34', 0); INSERT INTO `ops_menu` VALUES (70, 'job:list', '列表', '', 100, '', 0, 0, 35, '2024-03-15 02:41:43', '2024-03-15 02:41:53', 0); INSERT INTO `ops_menu` VALUES (71, 'job:add', '新增', '', 200, '', 0, 0, 35, '2024-03-15 02:42:14', '2024-03-15 02:42:14', 0); INSERT INTO `ops_menu` VALUES (72, 'job:update', '编辑', '', 300, '', 0, 0, 35, '2024-03-15 02:42:31', '2024-03-15 02:42:31', 0);