You've already forked golang-saas-starter-kit
mirror of
https://github.com/raseels-repos/golang-saas-starter-kit.git
synced 2025-06-17 00:17:59 +02:00
Switch file sync for auto cert to impliment Cache interface
This commit is contained in:
@ -92,7 +92,6 @@ func main() {
|
|||||||
HostPrimary string `envconfig:"HOST_PRIMARY" example:"example-project.com"`
|
HostPrimary string `envconfig:"HOST_PRIMARY" example:"example-project.com"`
|
||||||
HostNames []string `envconfig:"HOST_NAMES" example:"subdomain.example-project.com"`
|
HostNames []string `envconfig:"HOST_NAMES" example:"subdomain.example-project.com"`
|
||||||
TemplateDir string `default:"./templates" envconfig:"TEMPLATE_DIR"`
|
TemplateDir string `default:"./templates" envconfig:"TEMPLATE_DIR"`
|
||||||
ConfigDir string `default:"" envconfig:"CONFIG_DIR"`
|
|
||||||
DebugHost string `default:"0.0.0.0:4000" envconfig:"DEBUG_HOST"`
|
DebugHost string `default:"0.0.0.0:4000" envconfig:"DEBUG_HOST"`
|
||||||
ShutdownTimeout time.Duration `default:"5s" envconfig:"SHUTDOWN_TIMEOUT"`
|
ShutdownTimeout time.Duration `default:"5s" envconfig:"SHUTDOWN_TIMEOUT"`
|
||||||
}
|
}
|
||||||
@ -123,7 +122,6 @@ func main() {
|
|||||||
S3BucketPrivate string `envconfig:"S3_BUCKET_PRIVATE"`
|
S3BucketPrivate string `envconfig:"S3_BUCKET_PRIVATE"`
|
||||||
S3BucketPublic string `envconfig:"S3_BUCKET_PUBLIC"`
|
S3BucketPublic string `envconfig:"S3_BUCKET_PUBLIC"`
|
||||||
SecretsManagerConfigPrefix string `default:"" envconfig:"SECRETS_MANAGER_CONFIG_PREFIX"`
|
SecretsManagerConfigPrefix string `default:"" envconfig:"SECRETS_MANAGER_CONFIG_PREFIX"`
|
||||||
SecretsManagerConfigSyncInterval time.Duration `default:"5m" envconfig:"SECRETS_MANAGER_CONFIG_SYNC_INTERVAL"`
|
|
||||||
|
|
||||||
// Get an AWS session from an implicit source if no explicit
|
// Get an AWS session from an implicit source if no explicit
|
||||||
// configuration is provided. This is useful for taking advantage of
|
// configuration is provided. This is useful for taking advantage of
|
||||||
@ -198,20 +196,6 @@ func main() {
|
|||||||
cfg.App.BaseUrl = baseUrl
|
cfg.App.BaseUrl = baseUrl
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the default config directory used to store config files locally that will be sync'd to AWS Secrets Manager
|
|
||||||
// and distributed to all other running services. This include Let's Encrypt for HTTPS when not using an Elastic
|
|
||||||
// Load Balancer.
|
|
||||||
// Note: All files stored in this directory are uploaded to AWS Secrets Manager.
|
|
||||||
if cfg.App.ConfigDir == "" {
|
|
||||||
if cfg.App.ConfigDir == "" {
|
|
||||||
cfg.App.ConfigDir = filepath.Join(os.TempDir(), cfg.App.Name, "cfg")
|
|
||||||
|
|
||||||
if err := os.MkdirAll(cfg.App.ConfigDir, os.ModePerm); err != nil {
|
|
||||||
log.Fatalf("main : Make config directory : %s : %+v", cfg.App.ConfigDir, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
// Log App Info
|
// Log App Info
|
||||||
@ -386,24 +370,6 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// =========================================================================
|
|
||||||
// ECS Task registration for services that don't use an AWS Elastic Load Balancer.
|
|
||||||
if awsSession != nil {
|
|
||||||
syncPrefix := filepath.Join(cfg.Aws.SecretsManagerConfigPrefix, "sync-config")
|
|
||||||
|
|
||||||
// Download all config files from Secret Manager.
|
|
||||||
f, err := devops.SyncCfgInit(log, awsSession, syncPrefix, cfg.App.ConfigDir, cfg.Aws.SecretsManagerConfigSyncInterval)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("main : AWS Secrets Manager config download : %+v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start the watcher worker.
|
|
||||||
if f != nil {
|
|
||||||
go f()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
// ECS Task registration for services that don't use an AWS Elastic Load Balancer.
|
// ECS Task registration for services that don't use an AWS Elastic Load Balancer.
|
||||||
err = devops.EcsServiceTaskInit(log, awsSession)
|
err = devops.EcsServiceTaskInit(log, awsSession)
|
||||||
@ -479,10 +445,18 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Enable autocert to store certs via Secret Manager.
|
||||||
|
secretPrefix := filepath.Join(cfg.Aws.SecretsManagerConfigPrefix, "autocert")
|
||||||
|
|
||||||
|
cache, err := devops.NewSecretManagerAutocertCache(log, awsSession, secretPrefix)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("main : HTTPS : %+v", err)
|
||||||
|
}
|
||||||
|
|
||||||
m := &autocert.Manager{
|
m := &autocert.Manager{
|
||||||
Prompt: autocert.AcceptTOS,
|
Prompt: autocert.AcceptTOS,
|
||||||
HostPolicy: autocert.HostWhitelist(hosts...),
|
HostPolicy: autocert.HostWhitelist(hosts...),
|
||||||
Cache: autocert.DirCache(cfg.App.ConfigDir),
|
Cache: cache,
|
||||||
}
|
}
|
||||||
api.TLSConfig = &tls.Config{GetCertificate: m.GetCertificate}
|
api.TLSConfig = &tls.Config{GetCertificate: m.GetCertificate}
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ type SecretManagerAutocertCache struct {
|
|||||||
secretPrefix string
|
secretPrefix string
|
||||||
}
|
}
|
||||||
|
|
||||||
// SyncCfgInit provides the functionality to keep config files sync'd between running tasks and across deployments.
|
// NewSecretManagerAutocertCache provides the functionality to keep config files sync'd between running tasks and across deployments.
|
||||||
func NewSecretManagerAutocertCache(log *log.Logger, awsSession *session.Session, secretPrefix string ) (*SecretManagerAutocertCache, error) {
|
func NewSecretManagerAutocertCache(log *log.Logger, awsSession *session.Session, secretPrefix string ) (*SecretManagerAutocertCache, error) {
|
||||||
return &SecretManagerAutocertCache{
|
return &SecretManagerAutocertCache{
|
||||||
awsSession,
|
awsSession,
|
Reference in New Issue
Block a user