main.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "log"
  6. "net/http"
  7. "os"
  8. "github.com/porter-dev/porter/internal/repository/gorm"
  9. "github.com/porter-dev/porter/server/api"
  10. "github.com/porter-dev/porter/internal/adapter"
  11. "github.com/porter-dev/porter/internal/config"
  12. lr "github.com/porter-dev/porter/internal/logger"
  13. "github.com/porter-dev/porter/server/router"
  14. prov "github.com/porter-dev/porter/internal/kubernetes/provisioner"
  15. )
  16. // Version will be linked by an ldflag during build
  17. var Version string = "dev"
  18. func main() {
  19. var versionFlag bool
  20. flag.BoolVar(&versionFlag, "version", false, "print version and exit")
  21. flag.Parse()
  22. // Exit safely when version is used
  23. if versionFlag {
  24. fmt.Println(Version)
  25. os.Exit(0)
  26. }
  27. appConf := config.FromEnv()
  28. logger := lr.NewConsole(appConf.Debug)
  29. db, err := adapter.New(&appConf.Db)
  30. if err != nil {
  31. logger.Fatal().Err(err).Msg("")
  32. return
  33. }
  34. err = gorm.AutoMigrate(db)
  35. if err != nil {
  36. logger.Fatal().Err(err).Msg("")
  37. return
  38. }
  39. var key [32]byte
  40. for i, b := range []byte(appConf.Db.EncryptionKey) {
  41. key[i] = b
  42. }
  43. repo := gorm.NewRepository(db, &key)
  44. a, err := api.New(&api.AppConfig{
  45. Version: Version,
  46. Logger: logger,
  47. Repository: repo,
  48. ServerConf: appConf.Server,
  49. RedisConf: &appConf.Redis,
  50. CapConf: appConf.Capabilities,
  51. DBConf: appConf.Db,
  52. })
  53. if err != nil {
  54. logger.Fatal().Err(err).Msg("")
  55. }
  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, a.AnalyticsClient, errorChan)
  65. }
  66. appRouter := router.New(a)
  67. address := fmt.Sprintf(":%d", appConf.Server.Port)
  68. logger.Info().Msgf("Starting server %v", address)
  69. s := &http.Server{
  70. Addr: address,
  71. Handler: appRouter,
  72. ReadTimeout: appConf.Server.TimeoutRead,
  73. WriteTimeout: appConf.Server.TimeoutWrite,
  74. IdleTimeout: appConf.Server.TimeoutIdle,
  75. }
  76. if err := s.ListenAndServe(); err != nil && err != http.ErrServerClosed {
  77. log.Fatal("Server startup failed", err)
  78. }
  79. }