To create a 3-tiered production-like deployment from scratch using ServerTemplates published by RightScale for a PHP application.
Note: The tutorial uses RightScale's latest revisions of the v12.11 LTS ServerTemplates that use Chef cookbooks and recipes instead of RightScripts.
Table of Contents
Although this end-to-end tutorial was originally designed as a hands-on exercise in an Instructor Led Training course, anyone can follow the tutorial and use it as a learning tool as well. The class environment influences naming conventions, hence we often precede names with initials or names in our examples. (For example, an A Record for John Doe named "jd-www", rather than simply "www"). Be sure to provide enough time for yourself to complete the end-to-end exercise. (Estimate: 1-3hrs)
This tutorial will demonstrate how to build a common 3-tier website architecture in the cloud using some of RightScale's ServerTemplates.
Disclaimers
Prerequisites: Requires 'actor' user role privileges in the RightScale account.
The first step is to create a new deployment for the project. It's not recommended that you use the "Default" deployment or an existing deployment for new development because you do not want to accidentally inherit any unknown configuration settings. Therefore, it's recommended to always create a new deployment when you start a new project. Be sure to use a unique and descriptive nickname for each deployment. (e.g. My Project Name)
Tip: Most users find it useful to create a bookmark in the left-hand pane of the dashboard that links to the deployment's Servers tab.
In a typical 3-tier architecture setup, DNS A records are used to create fully qualified domain names (FQDNs) that map to a particular server or tier of servers. The digram below shows a typical example of a 3-tier website architecture.
In this type of architecure, the application servers locate the "master" database server by using Master-DB's FQDN (e.g. db-master.example.com), which points to the Master-DB's private IP address. Similarly, front-end web traffic can be routed to a FQDN (e.g. www.example.com) where each load balancer server has a DNS record for that FQDN so that incoming requests are routed to one of the load balancer servers. Since the IP address of an instance in the cloud is often dynamically assigned at launch time, you are required to use a DNS provider that supports dynamic DNS (i.e. the ability to dynamically update the IP address of an A record) for the Master-DB server (at a minimum). You can also use the same DNS provider for creating FQDNs for the load balancer servers. However, since they do not require the use of dynamic DNS, any DNS provider can be used.
TTLs
When you create the DNS records, it's important to set appropriate TTLs to ensure that servers will not stay connected to an old IP address that is no longer assigned to a functional server. For example, the DNS record that points to the "master" database server should have a low TTL to ensure that the application servers will connect to the correct server within a reasonable amount of time. It's strongly recommended that you use a TTL of 60 seconds for the DNS record that points to the "master" database server.
Note: If you are using Rackspace's Cloud DNS service, you must use a TTL of 300 seconds because that is the lowest allowable TTL. Be sure to change the 'Database DNS TTL Limit' input from 60 (default) to 300.
You will need to create DNS records for the following servers:
RightScale's ServerTemplates contain scripts that support one of the following DNS providers. Create an account with one of the DNS providers below and set up the A records accordingly.
Prerequisites: Requires 'designer' user role privileges in the RightScale account to create a new credential.
Note: Only the user who created the credential and any 'admin' users will be able to view and modify an existing credential.
Credentials are a way of passing sensitive information to a script (as an input) in a discrete manner without making the actual value visible in the Dashboard. As a best practice, many of the ServerTemplates published by RightScale are preconfigured to use certain credentials. It's recommended that you create these common credentials in your own account. If they already exist and apply to a different deployment, you might want to create a new set of credentials to avoid any conflicts. In such cases, it's helpful to use a common prefix to group the credentials together. (e.g. APP1_DBADMIN_USER)
If you try to launch a server where one of the inputs references a credential that does not exist in the RightScale account, you will receive an error message and will not be able to launch the server. Therefore, it's best to create any required credentials before you configure and launch a server. Depending on your cloud provider and backup storage selections, you may want to create additional credentials.
At a minimum, create the following credentials. See Create a New Credential for more information.
Note: If you are going through the 3-tier tutorial and are using the provided sample application and database files for testing purposes, use the sample "3 Tier Tutorial" values highlighted below.
* If you use Amazon Route 53 as your DNS provider, you do not need to set up separate DNS user name and password credentials because your AWS credentials are used for authentication purposes.
Amazon S3
If you are using Amazon S3 to store binary database backups or retrieve a "private" file from an S3 bucket, you will need to use the following AWS credentials. Fortunately, these credentials are automatically created when AWS credentials are added to a RightScale account. Although, they are available for use when you define your inputs, they will not be listed under Design > Credentials.
Note: AWS credentials are located under Settings > Account Settings > Clouds.
Rackspace Cloud Files
If you want to use Rackspace Cloud Files for storing binary database backups, you will need to create the following credentials.
SoftLayer Object Storage
If you want to use SoftLayer's Object Storage for storing binary database backups, you will need to create the following credentials. See Set up SoftLayer Object Storage.
Source Control Management (SVN, GitHub)
If you are using a source control management (SCM) system to host your application code, you will need to create the following credentials to retrieve your source code from the specified repository.
Secure Sockets Layer (SSL)
If you are using SSL to support HTTPS access, you should create credentials for any of the following values that apply. See How do I create an SSL certificate for my web server?
Prerequisites: Requires 'actor' user role privileges in the RightScale account to create SSH Keys and Elastic IPs, and 'security_manager' privileges to create security groups.
Each cloud infrastructure is unique and requires different resources in order to launch a server in their cloud. Depending on the type of cloud infrastructure that you're going to use to launch servers, you will find it useful to create some of the required cloud-specific resources beforehand so that you can select them in the "Add Server Wizard" when you add servers into a deployment. Cloud resources are also cloud-specific. For example, you cannot launch an EC2 instance in the 'us-east' region with an 'us-west' security group.
Warning!
If you are following a standard 3-tier tutorial for testing and demonstration purposes only, you can create a single security group with the following permissions. If you are building a 3-tier deployment for a production environment, you should consider using more robust security group settings. See Configure Multiple Security Groups for a Multi-Tiered Deployment.
At a minimum, the security group should contain the following firewall permissions. Note: Port 443 is only required for SSL support (HTTPS).
EC2
S3
Simple Storage Service (S3) is Amazon's remote object store (ROS) where you can store static files that can be used by EC2 instances in any AWS region. For example, you can store a database dump file in an S3 bucket and then launch an EC2 instance that will retrieve the file from the S3 bucket. S3 buckets are also used to store binary backups of a database.
If S3 is not activated for your AWS account, please sign-up for the service now. (http://aws.amazon.com/s3/)
The ServerTemplate contains scripts that can retrieve a MySQL database dump file from a Remote Object Storage (ROS) location such as an Amazon S3 bucket or a Rackspace Cloud Files container. Create a new bucket/container and upload your database dump file. The file can remain a 'private' object because your cloud credentials can be used (as inputs) for authentication purposes to retrieve the file. Make sure the uploaded file maintains the .gz file extension.
Warning! The filename of the MySQL dump file cannot contain a dash (-) in its prefix name. For example, if your dump file is named, 'my-app-201205030022.gz', you must manually rename it to be 'my_app-201205030022.gz' where you use an underscore (_) to replace the dash, otherwise the script (do::do_dump_import) that imports the database dump file into the instance will fail.
If you are setting up a database server for testing purposes or if you do not have your own dump file, you can use the following sample MySQL dump file to complete the tutorial. The sample is a gzip (.gz) file.
Follow these steps to add a database server to the deployment.
The next step is to define the properties of your database server or servers by entering values for inputs. It is simplest and best to do this at the deployment level. For a detailed explanation of how inputs are defined and used in Chef recipes and RightScripts, see Inputs and their Hierarchy.
The inputs that you need to provide values for will depend on which options you're going to use. The ServerTemplate is very flexible and supports a variety of different configurations. You will need to provide the necessary values as inputs based on which options you want to use.
Go to the deployment's Inputs tab (Manage > Deployments > your deployment > Inputs) and click Edit.
Although you can enter values for missing inputs as text values, it's strongly recommended that you set up credentials for passing sensitive information to scripts such as passwords or any other sensitive data.
Rackspace only
If you use Rackspace for your database servers and backup storage (i.e., Cloud Files) the storage-related Chef recipes will use Rackspace Service Net (SNET) by default. SNET is Rackspace's internal private networking service for optimized communication between Rackspace Cloud Servers and Cloud Files. If SNET is not supported in your Rackspace environment, you must set the "Rackspace SNET Enabled for Backup" input to false; otherwise, all backup and restore operations that rely on Cloud Files will fail.
If the cloud supports the use of block devices (e.g. AWS EBS Volumes, CloudStack volumes, etc.), it's strongly recommended that you use block devices to store the contents of the MySQL database. Backups of the database will be stored as snapshots.
If the cloud does not support block devices (e.g. Rackspace), you must use a Remote Object Store container (e.g. Rackspace Cloud Files container) the contents of the MySQL database will be stored locally on the instance's ephemeral drive. Backups of the database will be stored as binary dump files to the specified storage container.
Required
Input Name | Description | Example Value |
Number of Volumes in the Stripe (1) | To use striped volumes with your databases, specify a volume quantity. The default is 1, indicating no volume striping. Ignored for clouds that do not support volume-based storage (e.g. Rackspace First Generation). | text: 1 |
Total Volume Size (1) | Specify the total size, in GB, of the volume or striped volume set used for primary storage. If dividing this value by the stripe volume quantity does not yield a whole number, then each volume's size is rounded up to the nearest whole integer. For example, if "Number of Volumes in the Stripe" is 3 and you specify a "Total Volume Size" of 5 GB, each volume will be 2 GB. If deploying on a CloudStack-based cloud that does not allow custom volume sizes, the smallest predefined volume size is used instead of the size specified here. This input is ignored for clouds that do not support volume storage (e.g., Rackspace). Important! The value for this input does not describe the actual amount of space that's available for data storage because a percent is reserved for taking LVM snapshots. Use the 'Percentage of the LVM used for data (1)' input to control how much of the volume stripe is used for data storage (default: 10%). Be sure to account for additional space that will be required to accommodate the growth of your database over time. | text: 10 |
Percentage of the LVM used for data (1) | The percentage of the total Volume Group extents (LVM) that is used for data storage. The remaining percent is reserved for taking LVM snapshots. (e.g. 90% for data storage and the remaining 10% for overhead and snapshots) WARNING: If the database experiences a large amount of writes/changes, LVM snapshots may fail. In such cases, use a more conservative value for this input. (e.g. 50%) Be sure to adjust the 'Total Volume Size (1)' input accordingly. | text: 90% |
Optional
Input Name | Description | Example Value |
Primary Backup Secret (default) | Required cloud credential to store a file in the specified ROS location. If you are using Amazon EC2, leave this value set to "No value/Ignore" because primary backups will be saved as snapshots.
| No value/Ignore cred: RACKSPACE_AUTH_KEY |
Primary Backup User (default) | Required cloud credential to store a file in the specified ROS location. If you are using Amazon EC2, leave this value set to "No value/Ignore" because primary backups will be saved as snapshots.
| No value/Ignore cred: RACKSPACE_USERNAME |
Secondary Backup Storage Cloud (default) |
The cloud provider of the specified ROS container where the secondary backup will be stored.
| text: cloudfiles |
Secondary Backup Secret (default) | Required cloud credential to store a file in the specified ROS location.
| cred: AWS_SECRET_ACCESS_KEY cred: RACKSPACE_AUTH_KEY |
Secondary Backup User (default) | Required cloud credential to store a file in the specified ROS location.
| cred: AWS_ACCESS_KEY_ID cred: RACKSPACE_USERNAME |
Secondary Backup Storage Container (1) | Name of Amazon S3 bucket or Rackspace Cloud Files container to use for secondary backups. | text: mysqlbackups |
Block Device Mount Directory (1) | For cloud providers supporting volume-based storage, the mount point for your backup volume or volumes. (Default is /mnt/storage.) Ignored for clouds that do not support volume-based storage (e.g. Rackspace). | text: /mnt/storage |
Nickname (1) | For cloud providers supporting volume-based storage, the nickname will be used to name the created volumes and snapshots along with an epoch timestamp. (e.g. data_storage-201203100927) By default, this input is set to 'data_storage' however it's recommended that you create a nickname that describes your application or deployment, which will make it easier to identify the created volumes and snapshots. This input is ignored for clouds that do not support volume-based storage (e.g. Rackspace). | text: my_deployment |
Input Name | Description | Example Value |
Database Admin Password Database Admin Username | Username and password of a database user with administrator privileges. The admin username and password are used for tasks that require administrator access to the database. | cred: DBADMIN_PASSWORD cred: DBADMIN_USER |
Database Application Password Database Application Username | Username and password of a database user with user-level privileges. The application username and password allow the application to access the database in a restricted fashion. | cred: DBAPPLICATION_PASSWORD cred: DBAPPLICATION_USER |
Database Backup Lineage | The name associated with your primary and secondary database backups. It's used to associate them with your database environment for maintenance, restore, and replication purposes. Backup snapshots will automatically be tagged with this value. (e.g. rs_backup:lineage=mysqlbackup) Backups are identified by their lineage name. Note: For servers running on Rackspace, this value also indicates the Cloud Files container to use for storing primary backups. If a Cloud Files container with this name does not already exist, one will automatically be created. | text: mysqlbackup |
Database Master FQDN | Fully qualified domain name for the master database server. | text: master-db.example.com |
Database Master DNS Record ID | The record ID or hostname used to identify your master database server to your DNS provider. See Deployment Prerequisites (Linux) for more information. Examples:
| text: 1234567 |
Database Slave DNS Record ID | (Optional) The record ID or hostname used to identify your slave database server to your DNS provider. See Deployment Prerequisites (Linux) for more information. | text: 2233445 |
Database Replication Password Database Replication User | Username and password of a database user with replication permissions on the MySQL server. The replication username and password are used for replication between the "master" and "slave" database servers. | cred: DBREPLICATION_PASSWORD cred: DBREPLICATION_USER |
Database DNS TTL Limit | The specified TTL limit of the database servers' dynamic DNS records. It's recommended that you use a low TTL for your database servers DNS records to promote quick failovers. The default is set to 60 (seconds). If you are using Rackspace's CloudDNS service for Rackspace cloud servers, set this value to 300 (which is the lowest allowable TTL for CloudDNS). | text: 60 text: 300 (CloudDNS only) |
Input Name | Description | Example Value |
DNS Service Provider | Select the DNS provider that you used to create the DNS records for the database servers.
| text: DNSMadeEasy |
DNS Password | The password used to log into your DNS provider.
| cred: DNS_PASSWORD |
DNS User | The username used to log into your DNS provider.
| cred: DNS_USER |
CloudDNS region | If 'CloudDNS' is the chosen 'DNS Service Provider', select the appropriate cloud region based on the location of the Rackspace cloud servers. Note: This input is ignored unless you are using CloudDNS. | text: Chicago |
After configuring your inputs, launch your newly configured master database server.
Wait for the server to reach the "operational" state before you run a script to initialize the database server.
The script performs the following actions:
Since you have not loaded an actual database onto the server there is no reason to create a primary backup of the database.
Go to the "current" server's Scripts tab and run the db::do_primary_backup_schedule_disable operational script to disable your scheduled backups (cron jobs).
Later, once you have imported your database you will reverse this action and enable continuous backups.
After initializing the master database server and disabling scheduled backups, you will need to add your database (or databases) and records to it.
Note: If you use a previous backup snapshot instead of a MySQL dump file or initialize a blank MySQL database, refer to the Database Manager for MySQL 5.1/5.5 Runbook for instructions.
Input Name | Description | Example Value |
Dump Container | Name of Amazon S3 bucket or Rackspace Cloud Files container with the MySQL dump file to import upon server startup. | text: mysqldumps |
Dump Schema/Database Name | Name of the MySQL database schema to restore from the MySQL dump file identified by the "Dump Prefix" input. This name is set when you import the dump file into MySQL. The name is only defined within the MySQL instance and not within the actual dump file. As a result the name is somewhat arbitrary but should be descriptive. Important! | text: my_db_schema |
Dump Prefix | The prefix of the MySQL dump file (without the associated .gz extension) to retrieve from the Amazon S3 bucket or Rackspace Cloud Files container specified in "Dump Container." You can specify either the entire file name including the timestamp or just the file prefix without the timestamp, which selects the most recent dump file with that prefix. Example: If your dump file is named "mydb-201112202212.gz," you could specify either "mydb-201112202212" or "mydb." If you are using the attached sample MySQL dump file (app_test-201109010029.gz), use "app_test" as the value. | text: app_test |
Dump Storage Account ID |
Required cloud credential to retrieve a private file from the specified ROS location. Set to 'Ignore' if the file is publicly accessible.
| cred: AWS_ACCESS_KEY_ID cred: RACKSPACE_USERNAME
|
Dump Storage Account Secret | Required cloud credential to retrieve a private file from the specified ROS location. Set to 'Ignore' if the file is publicly accessible.
| cred: AWS_SECRET_ACCESS_KEY cred: RACKSPACE_AUTH_KEY |
Dump Storage Account Provider | The remote object storage provider where your MySQL dump file is stored.
| text: s3 |
You are now ready to create the first primary backup of the database. You will need a completed backup in order to initialize a slave database server.
It is now safe to enable continuous backups of the database server.
For more information about configuring and modifying your scheduled backup policy, see the Database Manager for MySQL 5.1/5.5 Runbook.
Although you can run MySQL in single-server mode and having a separate slave server for replication purposes is not required, this is strongly recommended for failover purposes. Create a slave server in your deployment.
Make sure the following conditions are true before you launch the second database server.
You are now ready to launch a "slave" database server for failover and redundancy purposes.
Wait for the server to reach the "operational" state before initializing it as a "slave" of the master database server.
The script performs the following actions:
If you created a DNS record for the slave database server, you can set a value for the Database Slave DNS Record ID input and run the db::do_set_dns_slave_private_ip operational script.
If you want to test the status of the "master" and "slave" database servers, see Check Database Status of Master or Slave.
Follow these steps to add a load balancer server to the deployment.
For production environments, it's strongly recommended that you have at least two load balancer servers (preferably in different availability zones or datacenters) for redundancy purposes. The easiest way to create a second load balancer is to simply clone and modify the first load balancer server.
The next step is to define the properties of your load balancer server or servers by entering values for inputs. As a best practice, you should define required inputs for the servers at the deployment level. For a detailed explanation of how inputs are defined and used in Chef recipes and RightScripts, see Inputs and their Hierarchy.
To enter inputs for the Chef recipes that will run on your load balancers, open the deployment's Inputs tab, click Edit, and use the following settings to configure input values. We recommend that you set up credentials for password values and any other sensitive data as shown in the examples.
Input Name | Description | Example Value |
Virtual Host Names | Comma-separated list of host names for which the load balancer will answer website requests and forward to the correct backend pool of application servers. This value is used to name backend server pools. A single entry of any name, e.g. 'default' or 'applistener', will mimic basic behavior of one load balancer with one pool of application servers. If you are using multiple virtual host names, the first entry will be the default backend and will answer for all host names that are not listed. Typically, you will specify hostnames for each load balancing pool. (e.g. app1.example.com,app2.example.com) Note: Application servers can only provide a single host name and will join server pool backends using this name (for example, default, www.mysite.com, api.mysite.com, default.mysite.com). | Single vhost: Multiple vhosts: |
Health Check URI | Relative URI (resource path), including the preceding forward slash, pointing to the health-check page on your application servers. For example, /hlthchk378923.html points to the file hlthchk378923.html in the application directory on your application servers. During the testing phase, you may leave this input set to the default (/) value, indicating that health check pages are not included on the application servers. For the DotNetNuke 3 tier example, use 'text:/Default.aspx | text: / |
Use Session Stickiness | Leave this value set to "true" to enable session persistence (stickiness). In this case, the load balancer will route client requests made in the same session to the same application server, via a cookie. Set to "false" to disable session stickiness, in which case the load balancer routes each new client request to the next available application server, regardless of session. | text: true For the 3-tier tutorial, use: |
Status Page Password Status Page Username | Username and password (if required) to access the HAProxy status report page, which is accessible from the URI set in Status URI. | cred: LB_STATUS_PASSWORD cred: LB_STATUS_USERNAME |
Status URI | Relative URI (resource path) pointing to the HAProxy status report page. If you use the default value (/haproxy-status) you can append this value to the hostname or public DNS/IP address for your load balancer to access the status report—for example, http://example.com/haproxy-status or http://192.123.123.12/haproxy-status. | text: /haproxy-status |
Input Name | Description | Example Value |
Application Name | On your application servers, the server subdirectory where your application code files are stored. This must match the Application Name input for your application servers. | text: myapp |
Multi-Processing Module | Set to the value matching the application servers that your load balancer will connect to: "prefork" for PHP servers, or "worker" for Rails, Apache Tomcat, and stand-alone application servers. | text: prefork |
SSL Certificate | Contents of the X.509/PEM-format SSL server certificate used for enabling HTTPS communications. | cred: SSL_CERTIFICATE |
SSL Certificate Chain | The certificate authority (CA) certificate chain associated with the server certificate used to set up HTTPS communications. | cred: SSL_CERTIFICATE_CHAIN |
SSL Enable | Set to "true" to enable SSL ('https'). Set to "false" to disable SSL. (default) | text: false |
SSL Certificate Key | The SSL server certificate's private key, in PEM format. | cred: SSL_CERTIFICATE_KEY |
SSL Passphrase | If required by an SSL certificate, you must provide the passphrase so Apache can start. | cred: SSL_PASSPHRASE |
If you are using Elastic IPs or already know the public IP addresses that will be used by the load balancer servers, you might have already set up the DNS records for the load balancing tier. However, if you do not know the public IP addresses that will be assigned to the load balancer servers, you must manually set up the DNS records after the servers have been launched. Once the servers become operational (and have been assigned their respective public IP addresses), create or update the DNS records with your DNS provider. Each load balancer server should have its own DNS record with the same hostname (e.g. www.example.com) that points to its public IP address.
The DNS records for the HAProxy load balancing tier should direct traffic from the associated hostname (FQDN) (e.g. www.example.com) to the application servers in its load balancing pool.
The ServerTemplate supports the ability to download your application code either as a tarball (.tgz) from a Remote Object Storage location or checkout the codebase from a software repository.
If you have a tarball of your application, upload it to a Remote Object Storage location as either a 'public-read' or 'private' object. If you are using a 'private' object you must provide valid cloud credentials (as inputs) for authentication purposes in order to properly retrieve the object. For more information see the following tutorials.
If you want to checkout your application code from a software repository (e.g. GitHub), you will need to provide your access credentials as inputs later in this tutorial so that a script can be executed to automatically retrieve your application code. If the code is in a private repository, you may need to generate an SSK key (e.g. GitHub SSH Key) for authentication purposes and create a credential (Design -> Credentials) to store the sensitive value.
If you need an example application for testing purposes, you can use the application code from the following git repository.
If you prefer to use a tarball instead, download the file below and upload it into your own remote storage container. (e.g. S3 bucket)
You can either add application servers directly into a deployment or create an server array of application servers for autoscaling.
When you create a server or server array, you will first need to select a deployment and the cloud where the server will eventually be launched into (e.g. AWS us-east). Based on the chosen cloud provider, you will need to complete the configuration process that's specific for that cloud. For example, some cloud providers support features that are unique to their specific cloud.
The next step is to define the properties of your application server by entering values for inputs. It is best to do this at the deployment level. For a detailed explanation of how inputs are defined and used in Chef recipes and RightScripts, see Inputs and their Hierarchy.
To enter inputs for the Chef recipes that will run on your application servers, open the deployment's Inputs tab, click Edit, and use the following instructios to configure the input values. We recommend that you set up credentials for password values and any other sensitive data as shown in the examples.
Note: The following examples and sample values assume that you will connect the application server with RightScale's "Load Balancer" ServerTemplate, which uses HAProxy. If you are using a cloud's load balancing service such as Rackspace Cloud Load Balancing (CLB) or Amazon's Elastic Load Balancing (ELB), please refer to the PHP Application Server Runbook for proper setup instructions.
Input Name | Description | Example Value |
Application Listen Port | The port that the application service listens on to accept requests from the load balancer. If you specify another port than the 8000 (default), be sure to add the port to the "Firewall Rule Port" input and make sure that the security group's settings also allow access (if applicable). | text: 8000 |
Input Name | Description | Example Value |
MySQL Version | Specify the version of the MySQL database that the application servers will connect to. (e.g. 5.1, 5.5) | text: 5.1 |
Input Name | Description | Example Value |
Database Application Password Database Application Username | Database username and password to add to the MySQL database server for application access. | cred: DBAPPLICATION_PASSWORD cred: DBAPPLICATION_USER
|
Database Master FQDN | Fully qualified domain name for the master MySQL database server. Application servers use this input to locate the "master" database server. | text: master-db.example.com |
Input Name | Description | Example Value |
Load Balance Provider | Select the type of load balancer (or service) that the application server(s) will connect to.
| text: lb_haproxy For the provided sample application: |
Virtual Host Names | If you are using an HAProxy load balancer ('lb_haproxy'), specify the virtual host name that will be used by the application server to connect to the correct load balancer server. Note: A load balancer can have multiple virtual host names. If a load balancer is serving requests to multiple virtual host names, the virtual host name that the application server will use must be included in the list otherwise it will connect to the "default" virtual host name, which is the first one in the list. | text: default For the provided sample application: |
Load Balance Service ID Load Balance Service Secret | For CLB, specify the Rackspace username and API key to use for authentication purposes. For ELB, specify the Amazon access key ID and secret access key for authentication purposes. | cred: RACKSPACE_USERNAME cred: AWS_ACCESS_KEY_ID |
Load Balance Service Name | The name of the Amazon Elastic Load Balancer (ELB) or Rackspace Cloud Load Balancer (CLB). | text: my-lb-name |
Load Balance Service Region | Note: Input only applies to a Rackspace Cloud Load Balancer (CLB). For a CLB, select the Rackspace region of the Cloud Load Balancer. It's recommended that you create your CLB in a region as close to your application servers as possible.
| text: ORD |
Input Name | Description | Example Value |
Database Schema Name | Name of the MySQL database to which applications on the server will connect. It is also used to set up the application server's database configuration file. | text: my_db_schema For the provided sample application: |
PHP module packages | To optionally install additional PHP modules besides the default PHP 5.3 packages installed by the ServerTemplate recipes, specify package names here in a comma-separated list. Package naming conventions will differ depending on your Linux distribution; for example, they include a php53u prefix for CentOS and php5 prefix for Ubuntu. | text: php53u-mysql,php53u-pecl-memcache |
The values that you use for the repository inputs will depend on where the application code will be retrieved from. The selection for the Repository Provider input will determine which inputs will be used to retrieve the application. Unrelated inputs are ignored.
The following inputs are used to retrieve the application from either a Git/SVN software repository or an ROS location (Amazon S3 bucket or Rackspace Cloud Files container). Specify the appropriate inputs based upon the selection for the 'Repository Provider' input.
Input Name | Description | Example Value |
Project App root | The destination location where the application code will be placed on the local instance. If you want the application code to be placed in the root directory, use a forward slash (/) otherwise you will need to specify the full path (e.g. /path/to/code). If set to 'ignore' the default location (/home/webapps) will be used. The 'Application Name' input is used to name the destination folder into which the application code will be placed. Apache and PHP will look for the application in the specified path. | text: / For the provided sample application: |
Repository Provider | Specify where the application code should be checked out from.
| For the provided sample application from ROS: For the provided sample application from GitHub: |
Action | Specify how the application code will be pulled from the specified repository.
| text: pull For the provided sample application: |
Important!
If you are checking out code from a Git repository, specify values for the following inputs.
Input Name | Description | Example Value |
Git SSH Key | In order to check out application code from a private (not public) Git repository, you must provide the repository's private SSH key for authentication purposes. Set to 'ignore' if you are using an application in a repository that allows 'public-read' access. | cred: GIT_SSH_KEY For the provided sample application from GitHub: |
Repository URL | The URL that points to the location of the repository that contains the application code. Specify a "read-only" URL. (e.g. git://github.com/username/myapp.git) | text: git://github.com/username/myapp.git For the provided sample application from GitHub: |
Branch/Tag | The specific branch/tag/SHA of the specified Git repository that the application code should be checked out from. (e.g. mybranch) Use "master" to retrieve the master branch from the repository. | text: mybranch For the provided sample application from GitHub: |
Important!
If you are checking out code from an SVN repository, specify values for the following inputs.
Input Name | Description | Example Value |
Repository URL | The URL that points to the location of the repository that contains the application code. Specify a "read-only" URL. (e.g. https://mysvn.net/app) | text: https://mysvn.net/app |
SVN Password SVN Username | The username and password required to access and retrieve the application code from the specified SVN repository. | cred: SVN_USER cred: SVN_PASSWORD |
Branch/Tag | The specific branch or tag of the specified SVN repository that the application code should be checked out from. (e.g. mybranch) Use "trunk" to retrieve the main branch from the repository. | text: mybranch |
Important!
If you are checking out code from a Remote Object Storage (ROS) location, specify values for the following inputs.
Input Name | Description | Example Value |
ROS Container | The name of the Remote Object Storage (ROS) container where a tarball (.tgz) of the application code will be retrieved from.
| text: my-container |
ROS Prefix | The prefix that will be used to locate the correct tarball of the application. For example, if you're using 'myapp.tgz' specify 'myapp' as the ROS Prefix. | For the provided sample application from ROS: |
ROS Storage Account ID | In order to retrieve a tarball of the application code that's a "private" object within the specified Remote Object Storage (ROS) location, you must provide proper cloud authentication credentials. For security reasons, it's recommended that you create and use credentials for these values instead of entering the text value.
| text: AWS_ACCESS_KEY_ID |
ROS Storage Account Provider | The Remote Object Storage (ROS) service where the tarball of the application code will be retrieved from.
| text: s3 |
ROS Storage Account Secret | In order to retrieve a tarball of the application code that's a "private" object within the specified Remote Object Storage (ROS) location, you must provide proper cloud authentication credentials. For security reasons, it's recommended that you create and use credentials for these values instead of entering the text value.
| cred: AWS_SECRET_ACCESS_KEY |
Input Name | Description | Example Value |
Application Name | On your application servers, the server subdirectory where your application code files are stored. If you are using dedicated load balancer servers launched with RightScale's "Load Balancer with HAProxy" ServerTemplate, this value must match the Application Name input for your load balancer servers. | text: myapp |
Multi-Processing Module | Leave this input set to the default, "prefork": the valid value for a PHP server. | text: prefork |
After configuring your inputs, launch all of the PHP application servers. Refer to the instructions in Launch a Server if you are not already familiar with this process.
Once all of the servers are operational you can perform the following tests.
If you set up your DNS records and firewall permissions (e.g. security groups) correctly, incoming web requests to your hostname (e.g. www.example.com) will be sent to one of the load balancer servers. HAProxy will then take the request and forward it to one of the application servers in its load balancing pool.
Based on your DNS records, enter the hostname (FQDN) associated with your load balancer servers into a browser window. (e.g. www.example.com) You should see your application's default landing page. If you are using the sample PHP application from RightScale, you should see the following landing page.
You may find the need to perform some clean up, either to minimize costs, or to perform the tutorial again from a clean slate. Follow these high level steps to do so:
© 2006-2014 RightScale, Inc. All rights reserved.
RightScale is a registered trademark of RightScale, Inc. All other products and services may be trademarks or servicemarks of their respective owners.