We operate a rental service that operates like this: when a client registers an account with us, we automatically create an Website for them.
This website will run our PHP application (which will be described below), and relies on MySQL. The website will be created under a subdomain (subdomain.ourcompany.com), however the website owners have the ability to: use dedicated domains, use dedicated ips, and use dedicated SSL cert (all of this is optional. The site owners must have the ability to apply dedicated SSL cert anytime, or to set their own domain anytime)
Regarding the PHP app, this is built on Symfony 2 framework (which will require php 5.3 or higher) and MySQL (latest). It will also need other apps such as memcache or optimizer+, etc... which are just common apps for a webserver with PHP. Our app uses many caching layers so it's not very read/write intensive in term of database. The structure of the app is described below:
1. The vendor/ folder: this folder is the brain of the app. It can be shared by all the hosted sites. Each website can contain the vendor/ folder but ideally we want to place this vendor folder in a place where it is accessible (readonly) to all the sites. This way we can save lots of space because this folder is over 100MB and also make deploying new version much easier.
Also, we will structure our vendor like this: version/vendor/realcode, or vendor/version/realcode: this way when we upload new version it will not affect current sites and each site can automatically or manually switch to new version when it is ready
2. The app/ folder: this folder contains the configuration for the site (for example, the db connection info, the location of the vendor folder etc).
3. The web/ folder: contains css/js etc with should be the public_html/ of the site. (if we use cloudfront or s3, then some of these files will be moved there, but still we may need to store .htaccess, index.php files etc here)
4. Each site will have its own database (I read that RDS you can have multiple db per db instance so this should not be a problem). The reason is that each site contains its own data which should be available to that specific site only and should not be accessible to any other site.
Backup: we do want to be able to back up files and database frequently (especially database)
Our customers: Our first customers will be in New Zealand (so we will probably use the Sydney center), and Asia (we probably will use either Japan or Singapore center). If it's too complicated, we will opt for 1 that is relative close to all.
We basically offer 2 pricing plans: the basic and the pay as you go plan.
1. Basic plan: we need to be able to limit their resources (say RAM, CPU, Disk space, Bandwidth). I read somewhere that CloudLinux can help with limiting server resources per account.
2. Pay as you go: basically for these accounts, we need to measure their usage (Diskspace and Bandwidth, but if possible also CPU and RAM). We will need these calculate the total amount at the end of the month to invoice them.
Someone suggests that we can builde a SINGLE system that runs all these sites, then we can offer a licensed version of the software using the AWS Marketplace.
We need someone to help us to:
1. Propose the best option for our problem (cost, reliability, performance are our concerns) (someone pointed out that our proposed php app structure may not work well for deployment?).
2. For the very basic plan, we plan to offer only:
a. 200MB diskspace
b. 100MB database
c. 5GB Bandwidth
d. Limited Ram and CPU power.
We need you to calculate what is the cost PER site with basic plan like this, assuming we can have 1000+ of sites like this.
3. Help us to build up the server based on your proposition (for example, configuring EC2 instances, setting up RDS, etc...). We have the software (php app built), but we need help with server.
(We are looking at AWS, but if Rackspace, Azure, Linode, etc... is a better choice, please feel free to suggest to us.)