From ccf05b8c427a511899a146a71ebef14b998182a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Fri, 28 Mar 2025 22:23:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9Eminio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/cli/wire_gen.go | 4 +- cmd/web/wire_gen.go | 4 +- internal/apps/apps.go | 2 + internal/apps/minio/app.go | 47 ++++++++ internal/apps/minio/request.go | 5 + internal/bootstrap/apps.go | 4 +- web/pnpm-workspace.yaml | 4 + web/src/api/apps/minio/index.ts | 8 ++ web/src/views/apps/minio/IndexView.vue | 143 +++++++++++++++++++++++++ web/src/views/apps/minio/route.ts | 23 ++++ 10 files changed, 241 insertions(+), 3 deletions(-) create mode 100644 internal/apps/minio/app.go create mode 100644 internal/apps/minio/request.go create mode 100644 web/pnpm-workspace.yaml create mode 100644 web/src/api/apps/minio/index.ts create mode 100644 web/src/views/apps/minio/IndexView.vue create mode 100644 web/src/views/apps/minio/route.ts diff --git a/cmd/cli/wire_gen.go b/cmd/cli/wire_gen.go index 9afc42e2..714de26f 100644 --- a/cmd/cli/wire_gen.go +++ b/cmd/cli/wire_gen.go @@ -14,6 +14,7 @@ import ( "github.com/tnb-labs/panel/internal/apps/frp" "github.com/tnb-labs/panel/internal/apps/gitea" "github.com/tnb-labs/panel/internal/apps/memcached" + "github.com/tnb-labs/panel/internal/apps/minio" "github.com/tnb-labs/panel/internal/apps/mysql" "github.com/tnb-labs/panel/internal/apps/nginx" "github.com/tnb-labs/panel/internal/apps/php74" @@ -76,6 +77,7 @@ func initCli() (*app.Cli, error) { fail2banApp := fail2ban.NewApp(websiteRepo) frpApp := frp.NewApp() giteaApp := gitea.NewApp() + minioApp := minio.NewApp() memcachedApp := memcached.NewApp() mysqlApp := mysql.NewApp(settingRepo) nginxApp := nginx.NewApp() @@ -94,7 +96,7 @@ func initCli() (*app.Cli, error) { s3fsApp := s3fs.NewApp(settingRepo) supervisorApp := supervisor.NewApp() toolboxApp := toolbox.NewApp() - loader := bootstrap.NewLoader(benchmarkApp, dockerApp, fail2banApp, frpApp, giteaApp, memcachedApp, mysqlApp, nginxApp, php74App, php80App, php81App, php82App, php83App, php84App, phpmyadminApp, podmanApp, postgresqlApp, pureftpdApp, redisApp, rsyncApp, s3fsApp, supervisorApp, toolboxApp) + loader := bootstrap.NewLoader(benchmarkApp, dockerApp, fail2banApp, frpApp, giteaApp, minioApp, memcachedApp, mysqlApp, nginxApp, php74App, php80App, php81App, php82App, php83App, php84App, phpmyadminApp, podmanApp, postgresqlApp, pureftpdApp, redisApp, rsyncApp, s3fsApp, supervisorApp, toolboxApp) appCli := app.NewCli(command, gormigrate, loader) return appCli, nil } diff --git a/cmd/web/wire_gen.go b/cmd/web/wire_gen.go index 6a9aa81a..da5916db 100644 --- a/cmd/web/wire_gen.go +++ b/cmd/web/wire_gen.go @@ -14,6 +14,7 @@ import ( "github.com/tnb-labs/panel/internal/apps/frp" "github.com/tnb-labs/panel/internal/apps/gitea" "github.com/tnb-labs/panel/internal/apps/memcached" + "github.com/tnb-labs/panel/internal/apps/minio" "github.com/tnb-labs/panel/internal/apps/mysql" "github.com/tnb-labs/panel/internal/apps/nginx" "github.com/tnb-labs/panel/internal/apps/php74" @@ -115,6 +116,7 @@ func initWeb() (*app.Web, error) { fail2banApp := fail2ban.NewApp(websiteRepo) frpApp := frp.NewApp() giteaApp := gitea.NewApp() + minioApp := minio.NewApp() memcachedApp := memcached.NewApp() mysqlApp := mysql.NewApp(settingRepo) nginxApp := nginx.NewApp() @@ -133,7 +135,7 @@ func initWeb() (*app.Web, error) { s3fsApp := s3fs.NewApp(settingRepo) supervisorApp := supervisor.NewApp() toolboxApp := toolbox.NewApp() - loader := bootstrap.NewLoader(benchmarkApp, dockerApp, fail2banApp, frpApp, giteaApp, memcachedApp, mysqlApp, nginxApp, php74App, php80App, php81App, php82App, php83App, php84App, phpmyadminApp, podmanApp, postgresqlApp, pureftpdApp, redisApp, rsyncApp, s3fsApp, supervisorApp, toolboxApp) + loader := bootstrap.NewLoader(benchmarkApp, dockerApp, fail2banApp, frpApp, giteaApp, minioApp, memcachedApp, mysqlApp, nginxApp, php74App, php80App, php81App, php82App, php83App, php84App, phpmyadminApp, podmanApp, postgresqlApp, pureftpdApp, redisApp, rsyncApp, s3fsApp, supervisorApp, toolboxApp) http := route.NewHttp(userService, dashboardService, taskService, websiteService, databaseService, databaseServerService, databaseUserService, backupService, certService, certDNSService, certAccountService, appService, cronService, processService, safeService, firewallService, sshService, containerService, containerComposeService, containerNetworkService, containerImageService, containerVolumeService, fileService, monitorService, settingService, systemctlService, loader) wsService := service.NewWsService(koanf, sshRepo) ws := route.NewWs(wsService) diff --git a/internal/apps/apps.go b/internal/apps/apps.go index ad7882f8..dd9bc608 100644 --- a/internal/apps/apps.go +++ b/internal/apps/apps.go @@ -9,6 +9,7 @@ import ( "github.com/tnb-labs/panel/internal/apps/frp" "github.com/tnb-labs/panel/internal/apps/gitea" "github.com/tnb-labs/panel/internal/apps/memcached" + "github.com/tnb-labs/panel/internal/apps/minio" "github.com/tnb-labs/panel/internal/apps/mysql" "github.com/tnb-labs/panel/internal/apps/nginx" "github.com/tnb-labs/panel/internal/apps/php74" @@ -34,6 +35,7 @@ var ProviderSet = wire.NewSet( fail2ban.NewApp, frp.NewApp, gitea.NewApp, + minio.NewApp, memcached.NewApp, mysql.NewApp, nginx.NewApp, diff --git a/internal/apps/minio/app.go b/internal/apps/minio/app.go new file mode 100644 index 00000000..a077a4a1 --- /dev/null +++ b/internal/apps/minio/app.go @@ -0,0 +1,47 @@ +package minio + +import ( + "net/http" + + "github.com/go-chi/chi/v5" + + "github.com/tnb-labs/panel/internal/service" + "github.com/tnb-labs/panel/pkg/io" + "github.com/tnb-labs/panel/pkg/systemctl" +) + +type App struct{} + +func NewApp() *App { + return &App{} +} + +func (s *App) Route(r chi.Router) { + r.Get("/env", s.GetEnv) + r.Post("/env", s.UpdateEnv) +} + +func (s *App) GetEnv(w http.ResponseWriter, r *http.Request) { + env, _ := io.Read("/etc/default/minio") + service.Success(w, env) +} + +func (s *App) UpdateEnv(w http.ResponseWriter, r *http.Request) { + req, err := service.Bind[UpdateEnv](r) + if err != nil { + service.Error(w, http.StatusUnprocessableEntity, "%v", err) + return + } + + if err = io.Write("/etc/default/minio", req.Env, 0600); err != nil { + service.Error(w, http.StatusInternalServerError, "%v", err) + return + } + + if err = systemctl.Restart("minio"); err != nil { + service.Error(w, http.StatusInternalServerError, "%v", err) + return + } + + service.Success(w, nil) +} diff --git a/internal/apps/minio/request.go b/internal/apps/minio/request.go new file mode 100644 index 00000000..a16372ed --- /dev/null +++ b/internal/apps/minio/request.go @@ -0,0 +1,5 @@ +package minio + +type UpdateEnv struct { + Env string `form:"env" json:"env" validate:"required"` +} diff --git a/internal/bootstrap/apps.go b/internal/bootstrap/apps.go index 5a76dfd6..1ea7d522 100644 --- a/internal/bootstrap/apps.go +++ b/internal/bootstrap/apps.go @@ -7,6 +7,7 @@ import ( "github.com/tnb-labs/panel/internal/apps/frp" "github.com/tnb-labs/panel/internal/apps/gitea" "github.com/tnb-labs/panel/internal/apps/memcached" + "github.com/tnb-labs/panel/internal/apps/minio" "github.com/tnb-labs/panel/internal/apps/mysql" "github.com/tnb-labs/panel/internal/apps/nginx" "github.com/tnb-labs/panel/internal/apps/php74" @@ -33,6 +34,7 @@ func NewLoader( fail2ban *fail2ban.App, frp *frp.App, gitea *gitea.App, + minio *minio.App, memcached *memcached.App, mysql *mysql.App, nginx *nginx.App, @@ -53,6 +55,6 @@ func NewLoader( toolbox *toolbox.App, ) *apploader.Loader { loader := new(apploader.Loader) - loader.Add(benchmark, docker, fail2ban, frp, gitea, memcached, mysql, nginx, php74, php80, php81, php82, php83, php84, phpmyadmin, podman, postgresql, pureftpd, redis, rsync, s3fs, supervisor, toolbox) + loader.Add(benchmark, docker, fail2ban, frp, gitea, minio, memcached, mysql, nginx, php74, php80, php81, php82, php83, php84, phpmyadmin, podman, postgresql, pureftpd, redis, rsync, s3fs, supervisor, toolbox) return loader } diff --git a/web/pnpm-workspace.yaml b/web/pnpm-workspace.yaml new file mode 100644 index 00000000..d3a3ea9d --- /dev/null +++ b/web/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +onlyBuiltDependencies: + - '@parcel/watcher' + - esbuild + - vue-demi diff --git a/web/src/api/apps/minio/index.ts b/web/src/api/apps/minio/index.ts new file mode 100644 index 00000000..34d03a0e --- /dev/null +++ b/web/src/api/apps/minio/index.ts @@ -0,0 +1,8 @@ +import { http } from '@/utils' + +export default { + // 获取环境变量 + env: (): any => http.Get('/apps/minio/env'), + // 保存环境变量 + saveEnv: (env: string): any => http.Post('/apps/minio/env', { env }) +} diff --git a/web/src/views/apps/minio/IndexView.vue b/web/src/views/apps/minio/IndexView.vue new file mode 100644 index 00000000..9533b844 --- /dev/null +++ b/web/src/views/apps/minio/IndexView.vue @@ -0,0 +1,143 @@ + + + diff --git a/web/src/views/apps/minio/route.ts b/web/src/views/apps/minio/route.ts new file mode 100644 index 00000000..e6a026ea --- /dev/null +++ b/web/src/views/apps/minio/route.ts @@ -0,0 +1,23 @@ +import type { RouteType } from '~/types/router' + +const Layout = () => import('@/layout/IndexView.vue') + +export default { + name: 'minio', + path: '/apps/minio', + component: Layout, + isHidden: true, + children: [ + { + name: 'apps-minio-index', + path: '', + component: () => import('./IndexView.vue'), + meta: { + title: 'Minio', + icon: 'simple-icons:minio', + role: ['admin'], + requireAuth: true + } + } + ] +} as RouteType