server.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package server
  2. import (
  3. "github.com/getsentry/sentry-go"
  4. "github.com/langgenius/dify-plugin-daemon/internal/cluster"
  5. "github.com/langgenius/dify-plugin-daemon/internal/core/persistence"
  6. "github.com/langgenius/dify-plugin-daemon/internal/core/plugin_manager"
  7. "github.com/langgenius/dify-plugin-daemon/internal/db"
  8. "github.com/langgenius/dify-plugin-daemon/internal/oss"
  9. "github.com/langgenius/dify-plugin-daemon/internal/oss/local"
  10. "github.com/langgenius/dify-plugin-daemon/internal/oss/s3"
  11. "github.com/langgenius/dify-plugin-daemon/internal/types/app"
  12. "github.com/langgenius/dify-plugin-daemon/internal/utils/log"
  13. "github.com/langgenius/dify-plugin-daemon/internal/utils/routine"
  14. )
  15. func initOSS(config *app.Config) oss.OSS {
  16. // init oss
  17. var oss oss.OSS
  18. var err error
  19. if config.PluginStorageType == "aws_s3" {
  20. oss, err = s3.NewS3Storage(
  21. config.S3UseAwsManagedIam,
  22. config.S3Endpoint,
  23. config.AWSAccessKey,
  24. config.AWSSecretKey,
  25. config.PluginStorageOSSBucket,
  26. config.AWSRegion,
  27. )
  28. if err != nil {
  29. log.Panic("Failed to create s3 storage: %s", err)
  30. }
  31. } else if config.PluginStorageType == "local" {
  32. oss = local.NewLocalStorage(config.PluginStorageLocalRoot)
  33. } else {
  34. log.Panic("Invalid plugin storage type: %s", config.PluginStorageType)
  35. }
  36. return oss
  37. }
  38. func (app *App) Run(config *app.Config) {
  39. // init routine pool
  40. if config.SentryEnabled {
  41. routine.InitPool(config.RoutinePoolSize, sentry.ClientOptions{
  42. Dsn: config.SentryDSN,
  43. AttachStacktrace: config.SentryAttachStacktrace,
  44. TracesSampleRate: config.SentryTracesSampleRate,
  45. SampleRate: config.SentrySampleRate,
  46. EnableTracing: config.SentryTracingEnabled,
  47. })
  48. } else {
  49. routine.InitPool(config.RoutinePoolSize)
  50. }
  51. // init db
  52. db.Init(config)
  53. // init oss
  54. oss := initOSS(config)
  55. // create manager
  56. manager := plugin_manager.InitGlobalManager(oss, config)
  57. // create cluster
  58. app.cluster = cluster.NewCluster(config, manager)
  59. // register plugin lifetime event
  60. manager.AddPluginRegisterHandler(app.cluster.RegisterPlugin)
  61. // init manager
  62. manager.Launch(config)
  63. // init persistence
  64. persistence.InitPersistence(oss, config)
  65. // launch cluster
  66. app.cluster.Launch()
  67. // start http server
  68. app.server(config)
  69. // block
  70. select {}
  71. }