Development environment setup with Vagrant
The setup in this guide is demonstrated in below video as well if you want to watch and follow the guide at the same time!
Setting up Platform backend, recorded in Mac OS
This guide relies heavily on Vagrant and assumes some previous knowledge of how to use and/or troubleshoot vagrant.
- Recommended: Vagrant host-updater plugin - this is useful to avoid having to update /etc/hosts by hand (Note: The plugin homepage says that this plugin is not maintained anymore. For now, it still seems to work fine, so you can ignore this warning.)
- VirtualBox - Note: Windows users may be required to Enable VT-X (Intel Virtualization Technology) in the computer's bios settings, disable Hyper-V on program and features page in the control panel, and install the VirtualBox Extension Pack (installation instructions here.)
- PHP >=7.0 <7.2 - if you are using Platform V4.0.0
- PHP >=7.1 <7.4 - if you are using Platform V4.1.0 or later
- PHP >=7.2 <7.4 - if you are using Platform V4.4.0 or later
- VirtualBox > 6.1.28 . As described here https://github.com/laravel/homestead/issues/1717 , you may need to add the virtual internal network to a configuration file in VirtualBox. Our Vagrant/Homestead setup is coded to use the 192.168.33.0/24 network. Please create the file
/etc/vbox/networks.conf(or equivalent in Windows (?)) and make sure it has the following line in it:
Clone the repository (this will create a directory named platform)
git clone https://github.com/ushahidi/platform.git
Go into the platform directory
Switch to the develop branch
git checkout develop
Once you have the code, the next step is to prepare a web server. For this part, we will use vagrant, with the Vagrant and Homestead.yml files that ship with Ushahidi.
First up we need to install the PHP dependencies. In the platform directory, run:
composer install --ignore-platform-reqs
Bring up the vagrant server. Since this is the first time you run it, it will also provision the machine from scratch:
Our vagrant box is built on top of Laravel's Homestead, a pre-packaged Vagrant box that provides a pre-built development environment. Homestead includes the Nginx web server, PHP 7.1, MySQL, Postgres, Redis, Memcached, Node, and all of the other goodies you might need.
- Verify that Vagrant and VirtualBox are up to date.
- Verify that the VirtualBox Guest Additions were installed (and fix it if they weren't)
vagrant ssh(to ssh into the machine. If you get an error like 'the path to your private key does not exist' when doing
vagrant ssh, you need to generate a key, or if you already have one, double-check the path in the file "Homestead.yaml" . One good guide on generating keys is found here: https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent#generating-a-new-ssh-key)
lsmod | grep vboxguest
- If this command doesn't return anything, VB Guest additions are likely not installed correctly. A fix for this is to install the vbguest vagrant plugin.
- if you are in the vagrant box, type
exitand hit the return key to exit it
vagrant plugin install vagrant-vbguest
vagrant up --provisionto continue
- If that doesn't work, and you are in a linux or MacOS environment (this is not compatible with Windows!):
- open the Homestead.yml file
type: "nfs"to the two directory mappings as shown below
Change to the project directory. This is shared by Vagrant / VirtualBox between your virtual server and your machine for easy updating during development:
Set required php version. For current version of Ushahidi this should be 7.3:
sudo update-alternatives --set php /usr/bin/php7.3
sudo systemctl stop php7.1-fpm.service
sudo systemctl disable php7.1-fpm.service
sudo systemctl enable php7.3-fpm.service
sudo systemctl start php7.3-fpm.service
sudo sed --in-place=.php7.1.bak "s/php7.1-fpm/php7.3-fpm/g" /etc/nginx/sites-available/*
sudo systemctl restart nginx.service
At this point you should have a running web server, but your deployment isn't set up yet. We still need to configure the database and run the migrations.
- Copy the configuration file
.env.exampleto make sure the platform can connect to the database.
cp .env.example .env
- Run the migrations. This is required to be able to use your deployment, since it includes basic data such as an initial "admin" user, roles, the database schema itself, etc.