envconfs.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package env
  2. import "time"
  3. // ServerConf is the server configuration
  4. type ServerConf struct {
  5. Debug bool `env:"DEBUG,default=false"`
  6. ServerURL string `env:"SERVER_URL,default=http://localhost:8080"`
  7. // The instance name is used to set a name for integrations linked only by a project ID,
  8. // in order to differentiate between the same project ID on different instances. For example,
  9. // when writing a Github secret with `PORTER_TOKEN_<PROJECT_ID>`, setting this value will change
  10. // this to `PORTER_TOKEN_<INSTANCE_NAME>_<PROJECT_ID>`
  11. InstanceName string `env:"INSTANCE_NAME"`
  12. Port int `env:"SERVER_PORT,default=8080"`
  13. StaticFilePath string `env:"STATIC_FILE_PATH,default=/porter/static"`
  14. CookieName string `env:"COOKIE_NAME,default=porter"`
  15. CookieSecrets []string `env:"COOKIE_SECRETS,default=random_hash_key_;random_block_key"`
  16. TokenGeneratorSecret string `env:"TOKEN_GENERATOR_SECRET,default=secret"`
  17. TimeoutRead time.Duration `env:"SERVER_TIMEOUT_READ,default=5s"`
  18. TimeoutWrite time.Duration `env:"SERVER_TIMEOUT_WRITE,default=10s"`
  19. TimeoutIdle time.Duration `env:"SERVER_TIMEOUT_IDLE,default=15s"`
  20. IsLocal bool `env:"IS_LOCAL,default=false"`
  21. IsTesting bool `env:"IS_TESTING,default=false"`
  22. AppRootDomain string `env:"APP_ROOT_DOMAIN,default=porter.run"`
  23. DefaultApplicationHelmRepoURL string `env:"HELM_APP_REPO_URL,default=https://charts.dev.getporter.dev"`
  24. DefaultAddonHelmRepoURL string `env:"HELM_ADD_ON_REPO_URL,default=https://chart-addons.dev.getporter.dev"`
  25. BasicLoginEnabled bool `env:"BASIC_LOGIN_ENABLED,default=true"`
  26. GithubClientID string `env:"GITHUB_CLIENT_ID"`
  27. GithubClientSecret string `env:"GITHUB_CLIENT_SECRET"`
  28. GithubLoginEnabled bool `env:"GITHUB_LOGIN_ENABLED,default=true"`
  29. GithubAppClientID string `env:"GITHUB_APP_CLIENT_ID"`
  30. GithubAppClientSecret string `env:"GITHUB_APP_CLIENT_SECRET"`
  31. GithubAppName string `env:"GITHUB_APP_NAME"`
  32. GithubAppWebhookSecret string `env:"GITHUB_APP_WEBHOOK_SECRET"`
  33. GithubAppID string `env:"GITHUB_APP_ID"`
  34. GithubAppSecretPath string `env:"GITHUB_APP_SECRET_PATH"`
  35. GoogleClientID string `env:"GOOGLE_CLIENT_ID"`
  36. GoogleClientSecret string `env:"GOOGLE_CLIENT_SECRET"`
  37. GoogleRestrictedDomain string `env:"GOOGLE_RESTRICTED_DOMAIN"`
  38. SendgridAPIKey string `env:"SENDGRID_API_KEY"`
  39. SendgridPWResetTemplateID string `env:"SENDGRID_PW_RESET_TEMPLATE_ID"`
  40. SendgridPWGHTemplateID string `env:"SENDGRID_PW_GH_TEMPLATE_ID"`
  41. SendgridVerifyEmailTemplateID string `env:"SENDGRID_VERIFY_EMAIL_TEMPLATE_ID"`
  42. SendgridProjectInviteTemplateID string `env:"SENDGRID_INVITE_TEMPLATE_ID"`
  43. SendgridSenderEmail string `env:"SENDGRID_SENDER_EMAIL"`
  44. SlackClientID string `env:"SLACK_CLIENT_ID"`
  45. SlackClientSecret string `env:"SLACK_CLIENT_SECRET"`
  46. IronPlansAPIKey string `env:"IRON_PLANS_API_KEY"`
  47. IronPlansServerURL string `env:"IRON_PLANS_SERVER_URL"`
  48. WhitelistedUsers []uint `env:"WHITELISTED_USERS"`
  49. DOClientID string `env:"DO_CLIENT_ID"`
  50. DOClientSecret string `env:"DO_CLIENT_SECRET"`
  51. // Options for the provisioner jobs
  52. ProvisionerImageTag string `env:"PROV_IMAGE_TAG,default=latest"`
  53. ProvisionerImagePullSecret string `env:"PROV_IMAGE_PULL_SECRET"`
  54. ProvisionerJobNamespace string `env:"PROV_JOB_NAMESPACE,default=default"`
  55. ProvisionerBackendURL string `env:"PROV_BACKEND_URL"`
  56. ProvisionerCredExchangeURL string `env:"PROV_CRED_EXCHANGE_URL,default=http://porter:8080"`
  57. SegmentClientKey string `env:"SEGMENT_CLIENT_KEY"`
  58. // PowerDNS client API key and the host of the PowerDNS API server
  59. PowerDNSAPIServerURL string `env:"POWER_DNS_API_SERVER_URL"`
  60. PowerDNSAPIKey string `env:"POWER_DNS_API_KEY"`
  61. // Email for an admin user. On a self-hosted instance of Porter, the
  62. // admin user is the only user that can log in and register. After the admin
  63. // user has logged in, registration is turned off.
  64. AdminEmail string `env:"ADMIN_EMAIL"`
  65. SentryDSN string `env:"SENTRY_DSN"`
  66. SentryEnv string `env:"SENTRY_ENV,default=dev"`
  67. ProvisionerCluster string `env:"PROVISIONER_CLUSTER"`
  68. IngressCluster string `env:"INGRESS_CLUSTER"`
  69. SelfKubeconfig string `env:"SELF_KUBECONFIG"`
  70. WelcomeFormWebhook string `env:"WELCOME_FORM_WEBHOOK"`
  71. // Token for internal retool to authenticate to internal API endpoints
  72. RetoolToken string `env:"RETOOL_TOKEN"`
  73. // Enable pprof profiling endpoints
  74. PprofEnabled bool `env:"PPROF_ENABLED,default=false"`
  75. // Disable filtering for project creation
  76. DisableAllowlist bool `env:"DISABLE_ALLOWLIST,default=false"`
  77. }
  78. // DBConf is the database configuration: if generated from environment variables,
  79. // it assumes the default docker-compose configuration is used
  80. type DBConf struct {
  81. // EncryptionKey is the key to use for sensitive values that are encrypted at rest
  82. EncryptionKey string `env:"ENCRYPTION_KEY,default=__random_strong_encryption_key__"`
  83. Host string `env:"DB_HOST,default=postgres"`
  84. Port int `env:"DB_PORT,default=5432"`
  85. Username string `env:"DB_USER,default=porter"`
  86. Password string `env:"DB_PASS,default=porter"`
  87. DbName string `env:"DB_NAME,default=porter"`
  88. ForceSSL bool `env:"DB_FORCE_SSL,default=false"`
  89. SQLLite bool `env:"SQL_LITE,default=false"`
  90. SQLLitePath string `env:"SQL_LITE_PATH,default=/porter/porter.db"`
  91. VaultPrefix string `env:"VAULT_PREFIX,default=production"`
  92. VaultAPIKey string `env:"VAULT_API_KEY"`
  93. VaultServerURL string `env:"VAULT_SERVER_URL"`
  94. }
  95. // RedisConf is the redis config required for the provisioner container
  96. type RedisConf struct {
  97. // if redis should be used
  98. Enabled bool `env:"REDIS_ENABLED,default=true"`
  99. Host string `env:"REDIS_HOST,default=redis"`
  100. Port string `env:"REDIS_PORT,default=6379"`
  101. Username string `env:"REDIS_USER"`
  102. Password string `env:"REDIS_PASS"`
  103. DB int `env:"REDIS_DB,default=0"`
  104. }