main.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "net/http"
  6. "github.com/porter-dev/porter/internal/models"
  7. "github.com/porter-dev/porter/internal/repository/gorm"
  8. "github.com/porter-dev/porter/server/api"
  9. "github.com/porter-dev/porter/internal/adapter"
  10. "github.com/porter-dev/porter/internal/config"
  11. lr "github.com/porter-dev/porter/internal/logger"
  12. "github.com/porter-dev/porter/server/router"
  13. prov "github.com/porter-dev/porter/internal/kubernetes/provisioner"
  14. ints "github.com/porter-dev/porter/internal/models/integrations"
  15. )
  16. func main() {
  17. appConf := config.FromEnv()
  18. logger := lr.NewConsole(appConf.Debug)
  19. db, err := adapter.New(&appConf.Db)
  20. if err != nil {
  21. logger.Fatal().Err(err).Msg("")
  22. return
  23. }
  24. err = db.AutoMigrate(
  25. &models.Project{},
  26. &models.Role{},
  27. &models.User{},
  28. &models.Session{},
  29. &models.GitRepo{},
  30. &models.Registry{},
  31. &models.HelmRepo{},
  32. &models.Cluster{},
  33. &models.ClusterCandidate{},
  34. &models.ClusterResolver{},
  35. &models.AWSInfra{},
  36. &ints.KubeIntegration{},
  37. &ints.BasicIntegration{},
  38. &ints.OIDCIntegration{},
  39. &ints.OAuthIntegration{},
  40. &ints.GCPIntegration{},
  41. &ints.AWSIntegration{},
  42. &ints.TokenCache{},
  43. &ints.ClusterTokenCache{},
  44. &ints.RegTokenCache{},
  45. &ints.HelmRepoTokenCache{},
  46. )
  47. if err != nil {
  48. logger.Fatal().Err(err).Msg("")
  49. return
  50. }
  51. var key [32]byte
  52. for i, b := range []byte(appConf.Db.EncryptionKey) {
  53. key[i] = b
  54. }
  55. repo := gorm.NewRepository(db, &key)
  56. if appConf.Redis.Enabled {
  57. redis, err := adapter.NewRedisClient(&appConf.Redis)
  58. if err != nil {
  59. logger.Fatal().Err(err).Msg("")
  60. return
  61. }
  62. prov.InitGlobalStream(redis)
  63. errorChan := make(chan error)
  64. go prov.GlobalStreamListener(redis, *repo, errorChan)
  65. }
  66. a, _ := api.New(&api.AppConfig{
  67. Logger: logger,
  68. Repository: repo,
  69. ServerConf: appConf.Server,
  70. RedisConf: &appConf.Redis,
  71. })
  72. appRouter := router.New(a)
  73. address := fmt.Sprintf(":%d", appConf.Server.Port)
  74. logger.Info().Msgf("Starting server %v", address)
  75. s := &http.Server{
  76. Addr: address,
  77. Handler: appRouter,
  78. ReadTimeout: appConf.Server.TimeoutRead,
  79. WriteTimeout: appConf.Server.TimeoutWrite,
  80. IdleTimeout: appConf.Server.TimeoutIdle,
  81. }
  82. if err := s.ListenAndServe(); err != nil && err != http.ErrServerClosed {
  83. log.Fatal("Server startup failed", err)
  84. }
  85. }