The application is deployed on AWS with the following architecture:
- VPC with 4 subnets (2 public, 2 private)
- ECS Clusters for Dev and Release environments
- RDS MySQL instances for each environment
- ElastiCache Redis instances for each environment
- Application Load Balancer for routing traffic
- S3 for file storage
- Parameter Store for secrets and configuration
- Java 17
- Docker
- AWS CLI
- Terraform (optional, for infrastructure provisioning)
- Clone the repository
- Create an
application-local.ymlfile based on the existing profiles - Run the application locally with the
localprofile
./gradlew bootRun --args='--spring.profiles.active=local'The infrastructure is managed with Terraform. To provision:
- Navigate to the
terraformdirectory - Copy
terraform.tfvars.exampletoterraform.tfvarsand fill in your values - Initialize Terraform and apply the configuration
terraform init terraform plan terraform apply
The application uses GitHub Actions for CI/CD:
- Pushing to the
developbranch will build and deploy to the dev environment - Pushing to the
mainbranch will build and deploy to the release environment
Required GitHub Secrets:
AWS_ROLE_ARN: ARN of the IAM role for GitHub Actions
Environment variables are managed through AWS Parameter Store:
- Dev environment:
/lovekeeper/dev/* - Release environment:
/lovekeeper/prod/*
The application uses Spring Boot Actuator for monitoring, which is available at:
- Dev:
https://dev.example.com/actuator - Release:
https://example.com/actuator