https://github.com/hadii-tech/production-ready-prestashop
Deploy a Scalable, highly available, and performant Prestashop solution on AWS using CloudFormation
https://github.com/hadii-tech/production-ready-prestashop
aws cloudformation ecommerce iac prestashop taskcat
Last synced: 12 months ago
JSON representation
Deploy a Scalable, highly available, and performant Prestashop solution on AWS using CloudFormation
- Host: GitHub
- URL: https://github.com/hadii-tech/production-ready-prestashop
- Owner: hadii-tech
- License: mit
- Created: 2020-03-28T23:57:56.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2023-10-10T20:03:46.000Z (over 2 years ago)
- Last Synced: 2025-04-06T21:07:09.776Z (about 1 year ago)
- Topics: aws, cloudformation, ecommerce, iac, prestashop, taskcat
- Size: 296 KB
- Stars: 15
- Watchers: 3
- Forks: 8
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# production-ready-prestashop
[](https://hadii.ca) [](https://opensource.org/licenses/MIT) [](http://makeapullrequest.com) 
This repository deploys a Scalable, highly available, and performant [Prestashop](https://www.prestashop.com/en) solution in the [AWS cloud](https://aws.amazon.com/) using [CloudFormation](https://aws.amazon.com/cloudformation/). Launch the entire stack in your AWS region of choice using one of the options below:
| Region | Launch |
|--------------|--------|
| us-east-1 |[](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=prestashop-stack&templateURL=https://production-ready-prestashop.s3.ca-central-1.amazonaws.com/versions/latest/production_ready_prestashop.yaml) |
| us-west-1 | [](https://console.aws.amazon.com/cloudformation/home?region=us-west-1#/stacks/new?stackName=prestashop-stack&templateURL=https://production-ready-prestashop.s3.ca-central-1.amazonaws.com/versions/latest/production_ready_prestashop.yaml) |
| ap-south-1 | [](https://console.aws.amazon.com/cloudformation/home?region=ap-south-1#/stacks/new?stackName=prestashop-stack&templateURL=https://production-ready-prestashop.s3.ca-central-1.amazonaws.com/versions/latest/production_ready_prestashop.yaml) |
| ap-east-1 | [](https://console.aws.amazon.com/cloudformation/home?region=ap-east-1#/stacks/new?stackName=prestashop-stack&templateURL=https://production-ready-prestashop.s3.ca-central-1.amazonaws.com/versions/latest/production_ready_prestashop.yaml) |
| ca-central-1 | [](https://console.aws.amazon.com/cloudformation/home?region=ca-central-1#/stacks/new?stackName=prestashop-stack&templateURL=https://production-ready-prestashop.s3.ca-central-1.amazonaws.com/versions/latest/production_ready_prestashop.yaml) |
| eu-central-1 | [](https://console.aws.amazon.com/cloudformation/home?region=eu-central-1#/stacks/new?stackName=prestashop-stack&templateURL=https://production-ready-prestashop.s3.ca-central-1.amazonaws.com/versions/latest/production_ready_prestashop.yaml) |
| eu-west-1 | [](https://console.aws.amazon.com/cloudformation/home?region=eu-west-1#/stacks/new?stackName=prestashop-stack&templateURL=https://production-ready-prestashop.s3.ca-central-1.amazonaws.com/versions/latest/production_ready_prestashop.yaml) |
| eu-north-1 |[](https://console.aws.amazon.com/cloudformation/home?region=eu-north-1#/stacks/new?stackName=prestashop-stack&templateURL=https://production-ready-prestashop.s3.ca-central-1.amazonaws.com/versions/latest/production_ready_prestashop.yaml) |
**Want to launch this stack in a region that's not listed?** Navigate to `https://console.aws.amazon.com/cloudformation/home?region=YOUR_REGION#/stacks/new?stackName=prestashop-stack&templateURL=https://production-ready-prestashop.s3.ca-central-1.amazonaws.com/versions/latest/production_ready_prestashop.yaml`
# Design
Read more about the high level design of the system [here](https://www.hadii.ca/insights/scalable-prestashop).

# Getting Started
The entire solution is represented using multiple CloudFormation stacks:
* `production_ready_prestashop.yaml`: The parent CloudFormation stack that deploys all the major infrastructure components below that comprise the entire solutions as nested CloudFormation stacks.
* `private-vpc.yaml`: Deploys containerized applications onto a cluster of EC2 hosts using Elastic Container Service. This stack runs containers on hosts that are in a private VPC subnet. Outbound network traffic from the hosts must go out through a NAT gateway.
* `efs-service.yaml`: Deploys an EFS file system with the appropriate folder mounts required for Prestashop ECS Containers.
* `rds-service.yaml`: Deploys an RDS MariaDB instance that Prestashop will use. Multi-AZ is disabled by default.
* `ec2-service.yaml`: Deploys an EC2 AutoScaling Groups, Public Load balancer, and Security Groups required for the entire deployment.
* `ecs-service.yaml`: Deploys an elastic container service that will run Prestashop containers on registered instances in our cluster.
* `service-autoscaling.yaml`: A stack for configuring autoscaling between the EC2 ASG and ECS Service using CloudWatch alarms.
### Development Environment
1. Setup an AWS account.
2. Install [taskcat](https://github.com/aws-quickstart/taskcat)
3. Install the [AWS cli tool](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)
#### Local Testing
1. Push your templates to an S3 bucket: `aws s3 sync --acl public-read templates/ s3://your-bucket`
2. Update the `NestedStacksS3URL` param in taskcat's config file (`.taskcat.yml`) to point to the S3 URL containing your template files ([example](https://production-ready-prestashop.s3.ca-central-1.amazonaws.com/versions/latest))
3. Run `taskcat -d test run`
### Contribute
Refer to `.github/workflows/ci-cd.yml` to get an idea of what the CI pipeline does to test pull requests. Fork this repository, open a pull request, ensure all checks pass, ensure `taskcat` is not throwing any lint warnings, and request a review.
### Important Implementation Notes
* The ECS cloudformation template launches containers with an environment variable `PS_ERASE_DB` set to `1`. This will erase the prestashop database every time a new container is started. This is required to setup the database the first time. Once this is done, run `aws cloudformation update-stack` with a value of `0`.
* The RDS cloudformation template does not enable multi-AZ by default. This can easily be modified by setting `Properties.MultiAZ` to `true` for the `AWS::RDS::DBInstance` resource in this stack.
# Contributors
* [Muntazir Fadhel](http://mfadhel.com)