SugarCRM is a web based customer relationship management system written in PHP. Due to how it is designed there are some difficulties getting it into source control. Additionally there are a few things to keep in mind when managing multiple environments and doing deployments. I’ve decided to use Ansible to manage SugarCRM environments and deployments.
Getting started
Firstly you should have a look at sugarcrm-ansible Github repository which contains Ansible playbooks for creating a new SugarCRM environment. The rest of this post will go over how to use these playbooks to set up a new environment and make deployments.
Install Vagrant
Vagrant will be used to create a virtual machine for local development.
- Install Vagrant
- Install the latest version of VirtualBox (or any other supported provider)
Set up folder structure
Vagrant will mount SugarCRM from your local filesystem. The following diagram shows where Vagrant expects you to have placed Sugar’s source code relative to the Vagrantfile
.
You can change the location of your SugarCRM installation by changing the local_site_path
variable in inventory/development/group_vars/all/common.yml
.
Required Vagrant plugins
If required plugin is missing, vagrant commands will fail.
Configure variables
To configure your install, make changes in inventory/development/group_vars/all/common.yml
and group_vars/all/common.yml
.
vagrant up
After setting up your folder structure, you should be able to run vagrant up
. A new VM is created and Ansible is used for provisioning.
You will be prompted for your sudo password since vagrant-hostsupdater will make changes in your /etc/hosts
file and map a domain name to point to the newly created VM.
If Ansible finished successfully, then point your browser to the domain name you specified in your inventory and you should see a fresh install of SugarCRM.
Deployment
Create a deploy key
For deployments to work you should host your Sugar source code in a Git repository. Then generate an SSH key pair which allows you to access the repository.
Look at inventory/development/group_vars/deploy_key.yml
for example and replace it with your private key.
Configuration management should be kept in source control. You don’t want to expose any secrets. Therefore you should encrypt your private key. Ansible provides a feature called “Vault” that allows keeping sensitive data such as passwords or keys in encrypted files.
When running a playbook, pass the --ask-vault-pass
flag for Ansible to prompt you for your vault password.
Run Ansible deploy playbook
Running ansible-playbook -i inventory/development/hosts deploy.yml -k -K --ask-vault-pass
will start a deployment to your local environment. Meaning that the latest commit from your repository will be checked out and applied to your local environment. Additionally the repair script will be called.
Create new inventory entry
Creating a new inventory entry for a production environment is easy. Create a new folder inventory/prod
and copy the contents of inventory/development
into the newly created directory.
Replace all variables with values for the new environment. Make sure the hosts
file contains correct addresses.
Contribute
Please feel free to contribute to the repository to make the playbooks more versatile.