1
0
mirror of https://github.com/raseels-repos/golang-saas-starter-kit.git synced 2025-06-23 00:37:48 +02:00

change eproc.tech to example.saasstartupkit.com

This commit is contained in:
Lee Brown
2019-08-13 16:06:11 -08:00
parent 58d645dacb
commit f03738b772
6 changed files with 121 additions and 19 deletions

View File

@ -87,8 +87,8 @@ webapp:deploy:dev:
SERVICE: 'web-app' SERVICE: 'web-app'
ENABLE_HTTPS: 1 ENABLE_HTTPS: 1
ENABLE_ELB: 0 ENABLE_ELB: 0
PRIMARY_HOST: 'eproc.tech' PRIMARY_HOST: 'example.saasstartupkit.com'
HOST_NAMES: 'www.eproc.tech,dev.eproc.tech' HOST_NAMES: 'example.saasstartupkit.com,dev.example.saasstartupkit.com'
S3_BUCKET_PRIVATE: 'saas-starter-kit-private' S3_BUCKET_PRIVATE: 'saas-starter-kit-private'
S3_BUCKET_PUBLIC: 'saas-starter-kit-public' S3_BUCKET_PUBLIC: 'saas-starter-kit-public'
S3_BUCKET_PUBLIC_CLOUDFRONT: 'true' S3_BUCKET_PUBLIC_CLOUDFRONT: 'true'
@ -96,7 +96,7 @@ webapp:deploy:dev:
STATIC_FILES_IMG_RESIZE: 'true' STATIC_FILES_IMG_RESIZE: 'true'
AWS_USE_ROLE: 'true' AWS_USE_ROLE: 'true'
EMAIL_SENDER: 'lee+saas-starter-kit@geeksinthewoods.com' EMAIL_SENDER: 'lee+saas-starter-kit@geeksinthewoods.com'
WEB_API_BASE_URL: https://api.eproc.tech WEB_API_BASE_URL: https://api.example.saasstartupkit.com
webapi:build:dev: webapi:build:dev:
<<: *build_tmpl <<: *build_tmpl
@ -128,8 +128,8 @@ webapi:deploy:dev:
SERVICE: 'web-api' SERVICE: 'web-api'
ENABLE_HTTPS: 1 ENABLE_HTTPS: 1
ENABLE_ELB: 0 ENABLE_ELB: 0
PRIMARY_HOST: 'api.eproc.tech' PRIMARY_HOST: 'api.example.saasstartupkit.com'
HOST_NAMES: 'api.dev.eproc.tech' HOST_NAMES: 'api.dev.example.saasstartupkit.com'
S3_BUCKET_PRIVATE: 'saas-starter-kit-private' S3_BUCKET_PRIVATE: 'saas-starter-kit-private'
S3_BUCKET_PUBLIC: 'saas-starter-kit-public' S3_BUCKET_PUBLIC: 'saas-starter-kit-public'
S3_BUCKET_PUBLIC_CLOUDFRONT: 'false' S3_BUCKET_PUBLIC_CLOUDFRONT: 'false'
@ -137,7 +137,7 @@ webapi:deploy:dev:
STATIC_FILES_IMG_RESIZE: 'false' STATIC_FILES_IMG_RESIZE: 'false'
AWS_USE_ROLE: 'true' AWS_USE_ROLE: 'true'
EMAIL_SENDER: 'lee+saas-starter-kit@geeksinthewoods.com' EMAIL_SENDER: 'lee+saas-starter-kit@geeksinthewoods.com'
WEB_APP_BASE_URL: https://eproc.tech WEB_APP_BASE_URL: https://example.saasstartupkit.com
#ddlogscollector:deploy:stage: #ddlogscollector:deploy:stage:
# <<: *deploy_stage_tmpl # <<: *deploy_stage_tmpl

View File

@ -87,11 +87,11 @@ func main() {
Service struct { Service struct {
Name string `default:"web-api" envconfig:"NAME"` Name string `default:"web-api" envconfig:"NAME"`
Project string `default:"" envconfig:"PROJECT"` Project string `default:"" envconfig:"PROJECT"`
BaseUrl string `default:"" envconfig:"BASE_URL" example:"http://api.eproc.tech"` BaseUrl string `default:"" envconfig:"BASE_URL" example:"http://api.example.saasstartupkit.com"`
HostNames []string `envconfig:"HOST_NAMES" example:"alternative-subdomain.eproc.tech"` HostNames []string `envconfig:"HOST_NAMES" example:"alternative-subdomain.example.saasstartupkit.com"`
EnableHTTPS bool `default:"false" envconfig:"ENABLE_HTTPS"` EnableHTTPS bool `default:"false" envconfig:"ENABLE_HTTPS"`
TemplateDir string `default:"./templates" envconfig:"TEMPLATE_DIR"` TemplateDir string `default:"./templates" envconfig:"TEMPLATE_DIR"`
WebAppBaseUrl string `default:"http://127.0.0.1:3000" envconfig:"WEB_APP_BASE_URL" example:"www.eproc.tech"` WebAppBaseUrl string `default:"http://127.0.0.1:3000" envconfig:"WEB_APP_BASE_URL" example:"www.example.saasstartupkit.com"`
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"`
} }

View File

@ -87,8 +87,8 @@ func main() {
Service struct { Service struct {
Name string `default:"web-app" envconfig:"NAME"` Name string `default:"web-app" envconfig:"NAME"`
Project string `default:"" envconfig:"PROJECT"` Project string `default:"" envconfig:"PROJECT"`
BaseUrl string `default:"" envconfig:"BASE_URL" example:"http://eproc.tech"` BaseUrl string `default:"" envconfig:"BASE_URL" example:"http://example.saasstartupkit.com"`
HostNames []string `envconfig:"HOST_NAMES" example:"www.eproc.tech"` HostNames []string `envconfig:"HOST_NAMES" example:"www.example.saasstartupkit.com"`
EnableHTTPS bool `default:"false" envconfig:"ENABLE_HTTPS"` EnableHTTPS bool `default:"false" envconfig:"ENABLE_HTTPS"`
TemplateDir string `default:"./templates" envconfig:"TEMPLATE_DIR"` TemplateDir string `default:"./templates" envconfig:"TEMPLATE_DIR"`
SharedTemplateDir string `default:"../../resources/templates/shared" envconfig:"SHARED_TEMPLATE_DIR"` SharedTemplateDir string `default:"../../resources/templates/shared" envconfig:"SHARED_TEMPLATE_DIR"`
@ -99,10 +99,10 @@ func main() {
CloudFrontEnabled bool `envconfig:"CLOUDFRONT_ENABLED"` CloudFrontEnabled bool `envconfig:"CLOUDFRONT_ENABLED"`
ImgResizeEnabled bool `envconfig:"IMG_RESIZE_ENABLED"` ImgResizeEnabled bool `envconfig:"IMG_RESIZE_ENABLED"`
} }
WebApiBaseUrl string `default:"http://127.0.0.1:3001" envconfig:"WEB_API_BASE_URL" example:"http://api.eproc.tech"` WebApiBaseUrl string `default:"http://127.0.0.1:3001" envconfig:"WEB_API_BASE_URL" example:"http://api.example.saasstartupkit.com"`
SessionKey string `default:"" envconfig:"SESSION_KEY"` SessionKey string `default:"" envconfig:"SESSION_KEY"`
SessionName string `default:"" envconfig:"SESSION_NAME"` SessionName string `default:"" envconfig:"SESSION_NAME"`
EmailSender string `default:"test@eproc.tech" envconfig:"EMAIL_SENDER"` EmailSender string `default:"test@example.saasstartupkit.com" envconfig:"EMAIL_SENDER"`
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"`
} }
@ -774,6 +774,9 @@ func main() {
} }
imgUrlFormatter = func(p string) string { imgUrlFormatter = func(p string) string {
if strings.HasPrefix(p, "http") {
return p
}
baseUrl.Path = p baseUrl.Path = p
return baseUrl.String() return baseUrl.String()
} }

View File

@ -2,8 +2,8 @@ package tests
import ( import (
"context" "context"
"encoding/json"
"fmt" "fmt"
"geeks-accelerator/oss/saas-starter-kit/internal/platform/web/webcontext"
"io" "io"
"log" "log"
"os" "os"
@ -12,6 +12,11 @@ import (
"testing" "testing"
"time" "time"
"geeks-accelerator/oss/saas-starter-kit/internal/platform/web/webcontext"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/ec2metadata"
"github.com/kelseyhightower/envconfig"
"geeks-accelerator/oss/saas-starter-kit/internal/platform/docker" "geeks-accelerator/oss/saas-starter-kit/internal/platform/docker"
"geeks-accelerator/oss/saas-starter-kit/internal/schema" "geeks-accelerator/oss/saas-starter-kit/internal/schema"
"github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/aws/session"
@ -43,10 +48,76 @@ func New() *Test {
log := log.New(os.Stdout, "TEST : ", log.LstdFlags|log.Lmicroseconds|log.Lshortfile) log := log.New(os.Stdout, "TEST : ", log.LstdFlags|log.Lmicroseconds|log.Lshortfile)
// =========================================================================
// Configuration
var cfg struct {
Aws struct {
AccessKeyID string `envconfig:"AWS_ACCESS_KEY_ID"` // WEB_API_AWS_AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY_ID
SecretAccessKey string `envconfig:"AWS_SECRET_ACCESS_KEY" json:"-"` // don't print
Region string `default:"us-west-2" envconfig:"AWS_REGION"`
UseRole bool `envconfig:"AWS_USE_ROLE"`
}
}
// For additional details refer to https://github.com/kelseyhightower/envconfig
if err := envconfig.Process("TESTS", &cfg); err != nil {
log.Fatalf("startup : Parsing Config : %+v", err)
}
// AWS access keys are required, if roles are enabled, remove any placeholders.
if cfg.Aws.UseRole {
cfg.Aws.AccessKeyID = ""
cfg.Aws.SecretAccessKey = ""
// Get an AWS session from an implicit source if no explicit
// configuration is provided. This is useful for taking advantage of
// EC2/ECS instance roles.
if cfg.Aws.Region == "" {
sess := session.Must(session.NewSession())
md := ec2metadata.New(sess)
var err error
cfg.Aws.Region, err = md.Region()
if err != nil {
log.Fatalf("startup : Load region of ecs metadata : %+v", err)
}
}
}
// Print the config for our logs. It's important to any credentials in the config
// that could expose a security risk are excluded from being json encoded by
// applying the tag `json:"-"` to the struct var.
{
cfgJSON, err := json.MarshalIndent(cfg, "", " ")
if err != nil {
log.Fatalf("startup : Marshalling Config to JSON : %+v", err)
}
log.Printf("startup : Config : %v\n", string(cfgJSON))
}
// ============================================================ // ============================================================
// Init AWS Session // Init AWS Session
var awsSession *session.Session
if cfg.Aws.UseRole {
// Get an AWS session from an implicit source if no explicit
// configuration is provided. This is useful for taking advantage of
// EC2/ECS instance roles.
awsSession = session.Must(session.NewSession())
if cfg.Aws.Region != "" {
awsSession.Config.WithRegion(cfg.Aws.Region)
}
log.Printf("startup : AWS : Using role.\n")
} else if cfg.Aws.AccessKeyID != "" {
creds := credentials.NewStaticCredentials(cfg.Aws.AccessKeyID, cfg.Aws.SecretAccessKey, "")
awsSession = session.New(&aws.Config{Region: aws.String(cfg.Aws.Region), Credentials: creds})
log.Printf("startup : AWS : Using static credentials\n")
}
awsSession := session.Must(session.NewSession())
// ============================================================ // ============================================================
// Startup Postgres container // Startup Postgres container

View File

@ -5,3 +5,6 @@
#DD_API_KEY= #DD_API_KEY=
#WEB_APP_AWS_S3_BUCKET_PRIVATE= #WEB_APP_AWS_S3_BUCKET_PRIVATE=
#WEB_APP_AWS_S3_BUCKET_PUBLIC= #WEB_APP_AWS_S3_BUCKET_PUBLIC=
#WEB_API_AWS_S3_BUCKET_PRIVATE=
#WEB_API_AWS_S3_BUCKET_PUBLIC=
#EMAIL_SENDER=

View File

@ -507,10 +507,8 @@ func NewServiceDeployRequest(log *log.Logger, flags ServiceDeployFlags) (*servic
Sid: "DefaultServiceAccess", Sid: "DefaultServiceAccess",
Effect: "Allow", Effect: "Allow",
Action: []string{ Action: []string{
"s3:ListBucket",
"s3:HeadBucket", "s3:HeadBucket",
"s3:ListObjects",
"s3:PutObject",
"s3:PutObjectAcl",
"cloudfront:ListDistributions", "cloudfront:ListDistributions",
"ec2:DescribeNetworkInterfaces", "ec2:DescribeNetworkInterfaces",
"ec2:DeleteNetworkInterface", "ec2:DeleteNetworkInterface",
@ -570,6 +568,33 @@ func NewServiceDeployRequest(log *log.Logger, flags ServiceDeployFlags) (*servic
}, },
} }
if req.S3BucketPublicName != "" || req.S3BucketPrivateName != "" {
var bpr []string
if req.S3BucketPublicName != "" {
bpr = append(bpr, "arn:aws:s3:::"+req.S3BucketPublicName )
bpr = append(bpr, "arn:aws:s3:::"+req.S3BucketPublicName + "/*" )
}
if req.S3BucketPrivateName != "" {
bpr = append(bpr, "arn:aws:s3:::"+req.S3BucketPrivateName )
bpr = append(bpr, "arn:aws:s3:::"+req.S3BucketPrivateName + "/*" )
}
bp := IamStatementEntry{
Sid: "S3BucketAccess",
Effect: "Allow",
Action: []string{
"s3:ListObjects",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:HeadObject",
},
Resource: bpr,
}
req.EcsTaskPolicyDocument.Statement = append(req.EcsTaskPolicyDocument.Statement, bp)
}
// Set default Cloudwatch Log Group Name. // Set default Cloudwatch Log Group Name.
req.CloudWatchLogGroupName = fmt.Sprintf("logs/env_%s/aws/ecs/cluster_%s/service_%s", req.Env, req.EcsClusterName, req.ServiceName) req.CloudWatchLogGroupName = fmt.Sprintf("logs/env_%s/aws/ecs/cluster_%s/service_%s", req.Env, req.EcsClusterName, req.ServiceName)
req.CloudWatchLogGroup = &cloudwatchlogs.CreateLogGroupInput{ req.CloudWatchLogGroup = &cloudwatchlogs.CreateLogGroupInput{