server.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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/oss/tencent_cos"
  12. "github.com/langgenius/dify-plugin-daemon/internal/types/app"
  13. "github.com/langgenius/dify-plugin-daemon/internal/utils/log"
  14. "github.com/langgenius/dify-plugin-daemon/internal/utils/routine"
  15. )
  16. func initOSS(config *app.Config) oss.OSS {
  17. // init oss
  18. var oss oss.OSS
  19. var err error
  20. if config.PluginStorageType == "aws_s3" {
  21. oss, err = s3.NewS3Storage(
  22. config.S3UseAwsManagedIam,
  23. config.S3Endpoint,
  24. config.S3UsePathStyle,
  25. config.AWSAccessKey,
  26. config.AWSSecretKey,
  27. config.PluginStorageOSSBucket,
  28. config.AWSRegion,
  29. )
  30. if err != nil {
  31. log.Panic("Failed to create s3 storage: %s", err)
  32. }
  33. } else if config.PluginStorageType == "local" {
  34. oss = local.NewLocalStorage(config.PluginStorageLocalRoot)
  35. } else if config.PluginStorageType == "tencent_cos" {
  36. oss, err = tencent_cos.NewTencentCOSStorage(
  37. config.TencentCOSSecretId,
  38. config.TencentCOSSecretKey,
  39. config.TencentCOSRegion,
  40. config.PluginStorageOSSBucket)
  41. if err != nil {
  42. log.Panic("Failed to create tencent cos storage: %s", err)
  43. }
  44. } else {
  45. log.Panic("Invalid plugin storage type: %s", config.PluginStorageType)
  46. }
  47. return oss
  48. }
  49. func (app *App) Run(config *app.Config) {
  50. // init routine pool
  51. if config.SentryEnabled {
  52. routine.InitPool(config.RoutinePoolSize, sentry.ClientOptions{
  53. Dsn: config.SentryDSN,
  54. AttachStacktrace: config.SentryAttachStacktrace,
  55. TracesSampleRate: config.SentryTracesSampleRate,
  56. SampleRate: config.SentrySampleRate,
  57. EnableTracing: config.SentryTracingEnabled,
  58. })
  59. } else {
  60. routine.InitPool(config.RoutinePoolSize)
  61. }
  62. // init db
  63. db.Init(config)
  64. // init oss
  65. oss := initOSS(config)
  66. // create manager
  67. manager := plugin_manager.InitGlobalManager(oss, config)
  68. // create cluster
  69. app.cluster = cluster.NewCluster(config, manager)
  70. // register plugin lifetime event
  71. manager.AddPluginRegisterHandler(app.cluster.RegisterPlugin)
  72. // init manager
  73. manager.Launch(config)
  74. // init persistence
  75. persistence.InitPersistence(oss, config)
  76. // launch cluster
  77. app.cluster.Launch()
  78. // start http server
  79. app.server(config)
  80. // block
  81. select {}
  82. }