config.go 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package config
  2. import (
  3. "log"
  4. "time"
  5. "github.com/joeshaw/envdecode"
  6. )
  7. // Conf is the configuration for the Go server
  8. type Conf struct {
  9. Debug bool `env:"DEBUG,default=false"`
  10. Server ServerConf
  11. Db DBConf
  12. K8s K8sConf
  13. Redis RedisConf
  14. }
  15. // ServerConf is the server configuration
  16. type ServerConf struct {
  17. ServerURL string `env:"SERVER_URL,default=http://localhost:8080"`
  18. Port int `env:"SERVER_PORT,default=8080"`
  19. StaticFilePath string `env:"STATIC_FILE_PATH,default=/porter/static"`
  20. CookieName string `env:"COOKIE_NAME,default=porter"`
  21. CookieSecrets []string `env:"COOKIE_SECRETS,default=random_hash_key_;random_block_key"`
  22. TokenGeneratorSecret string `env:"TOKEN_GENERATOR_SECRET,default=secret"`
  23. TimeoutRead time.Duration `env:"SERVER_TIMEOUT_READ,default=5s"`
  24. TimeoutWrite time.Duration `env:"SERVER_TIMEOUT_WRITE,default=10s"`
  25. TimeoutIdle time.Duration `env:"SERVER_TIMEOUT_IDLE,default=15s"`
  26. IsLocal bool `env:"IS_LOCAL,default=false"`
  27. IsTesting bool `env:"IS_TESTING,default=false"`
  28. AppRootDomain string `env:"APP_ROOT_DOMAIN,default=porter.run"`
  29. DefaultHelmRepoURL string `env:"HELM_REPO_URL,default=https://porter-dev.github.io/chart-repo/"`
  30. GithubClientID string `env:"GITHUB_CLIENT_ID"`
  31. GithubClientSecret string `env:"GITHUB_CLIENT_SECRET"`
  32. SendgridAPIKey string `env:"SENDGRID_API_KEY"`
  33. SendgridPWResetTemplateID string `env:"SENDGRID_PW_RESET_TEMPLATE_ID"`
  34. SendgridPWGHTemplateID string `env:"SENDGRID_PW_GH_TEMPLATE_ID"`
  35. SendgridVerifyEmailTemplateID string `env:"SENDGRID_VERIFY_EMAIL_TEMPLATE_ID"`
  36. SendgridProjectInviteTemplateID string `env:"SENDGRID_INVITE_TEMPLATE_ID"`
  37. SendgridSenderEmail string `env:"SENDGRID_SENDER_EMAIL"`
  38. DOClientID string `env:"DO_CLIENT_ID"`
  39. DOClientSecret string `env:"DO_CLIENT_SECRET"`
  40. ProvisionerImageTag string `env:"PROV_IMAGE_TAG,default=latest"`
  41. SegmentClientKey string `env:"SEGMENT_CLIENT_KEY"`
  42. }
  43. // DBConf is the database configuration: if generated from environment variables,
  44. // it assumes the default docker-compose configuration is used
  45. type DBConf struct {
  46. // EncryptionKey is the key to use for sensitive values that are encrypted at rest
  47. EncryptionKey string `env:"ENCRYPTION_KEY,default=__random_strong_encryption_key__"`
  48. Host string `env:"DB_HOST,default=postgres"`
  49. Port int `env:"DB_PORT,default=5432"`
  50. Username string `env:"DB_USER,default=porter"`
  51. Password string `env:"DB_PASS,default=porter"`
  52. DbName string `env:"DB_NAME,default=porter"`
  53. SQLLite bool `env:"SQL_LITE,default=false"`
  54. SQLLitePath string `env:"SQL_LITE_PATH,default=/porter/porter.db"`
  55. }
  56. // K8sConf is the global configuration for the k8s agents
  57. type K8sConf struct {
  58. IsTesting bool `env:"K8S_IS_TESTING,default=false"`
  59. }
  60. // FromEnv generates a configuration from environment variables
  61. func FromEnv() *Conf {
  62. var c Conf
  63. if err := envdecode.StrictDecode(&c); err != nil {
  64. log.Fatalf("Failed to decode server conf: %s", err)
  65. }
  66. return &c
  67. }