Disaster Recovery
Overview
This guide will walk you through performing a full restoration of your CiviForm environment in the event you need to recover a broken installation. This process will allow you to specify a database snapshot and will build out a full, brand new environment.
We do not recommend trying to restore over an existing environment for two reasons. The first is that keeping the old one allows for future investigation on the cause of a failure at a later date when there is no pressure to restore services.
The second is that by building out a brand new environment there is no chance of introducing incorrect settings with system components that may be in an unknown working state.
This disaster recover process is currently only tested and supported for AWS installations. Do NOT use on Azure.
Prerequisites
This guide assumes there has already been an initial setup of the system as outlined in the setup guide.
Steps outlined in this guide assume they are being run from the root folder of your fork of the civiform-deploy repository.
Prepare config file
Find the existing config file for the environment needing restoration. The default name is often
civiform_config.sh
.Make a copy of the original config file that was used for the last successful deployment.
Edit the new config file
Make a few edits to the new configuration file.
Change
APP_PREFIX
to a new value.
This should be new and different from any current deployed environments.
Do NOT use the same APP_PREFIX
of the environment needing restoration.
Set
POSTGRESQL_VERSION
to the version of the existing database.To find the postgres version go to the AWS console and navigate to RDS.
Click on the database you will be restoring to get the details page
Click on the "Configuration" tab
Look for "Engine version" to get the value you for
POSTGRESQL_VERSION
.
Upgrading Postgres versions should NOT be done at the same time as restoring an environment. Restoring a snapshot of the old database to a new database with differing Postgres versions increases the risk of failure and compatibility.
Set POSTGRES_RESTORE_SNAPSHOT_IDENTIFIER to the snapshot to restore.
To find the snapshot identifier go to the AWS console and navigate to RDS > Snapshots.
Use the snapshot identifier (not the name, the identifier begins with
rds:
) for the value forPOSTGRES_RESTORE_SNAPSHOT_IDENTIFIER
.
Do NOT change any other settings.
The CIVIFORM_VERSION
MUST be the same version that was in use with the selected snapshot. Upgrading the version of CiviForm should NOT be done at the same time as restoring an environment.
Initialize the deployment
Verify that deployment tool is correctly setup by running run bin/doctor --config=NEWCONFIGFILE
Restore into new environment
This process will take some time to run. Depending upon the size of the database being restored expect on average 30-60 minutes for completion. There will be large periods where you need to wait while the setup runs, but there are also points where you will be prompted for values.
To begin the restoration run
bin/setup --config=NEWCONFIGFILE
.Wait as setup runs
When prompted enter the values for all the requested secrets.
When prompted for Postgres snapshot restore follow all prompts. You will be asked for the app prefix of the old environment. This is the value from
APP_PREFIX
of the original config file.Wait as setup runs
When complete, make note of the endpoint url listed at the end of the deployment. It will be the one that has the APP_PREFIX
from your new config file and ends with "elb.amazonaws.com".
At this point the new environment is setup and should be online at the above endpoint url if no errors occurred during this process.
Verify the new site is working
Test that the site responds by using the endpoint url from the previous section.
Paste the endpoint url into your browser, you will see an invalid SSL certificate error and may not be able to process depending on your browser settings. If you can temporarily accept the invalid certificate you should see the CiviForm program page load.
Alternatively, you can run
curl --insecure --location PUT_ENDPOINT_URL_HERE
. The results should be HTML.
Change DNS settings to point to new site
Go to AWS Route53
Go to
Hosted zones
Click the
Hosted zone name
link for the site you just restoredSelect the
A
record typeClick "Edit record" in the flyout panel
Set Route traffic to
Alias to Application and Classic Load Balancer
The AWS Region you use
Select the newly created environment's load balancer from the list
Click Save
While is usually pretty instantaneous, it may take a few minutes for the DNS update to propagate.
Testing
Verify you can log in as an admin and an applicant
Check Cloudwatch for errors
The newly restored environment is now up and running.
Post restoration
Remove the POSTGRES_RESTORE_SNAPSHOT_IDENTIFIER from the config file.
Going forward with new deployments you will continue to use this new file.
Last updated