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 @@
+
+
+
+
+
+
+
+ 保存
+
+
+
+
+
+
+
+ 自启动开
+ 自启动关
+
+
+
+
+ {{ statusStr }}
+
+
+
+
+ 启动
+
+
+
+
+
+ 停止
+
+
+ 确定要停止 Minio 吗?
+
+
+
+ 重启
+
+
+
+
+
+
+
+
+ 此处修改的是 Minio 环境变量文件
+ /etc/default/minio,如果您不了解各参数的含义,请不要随意修改!
+
+
+
+
+
+
+
+
+
+
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