Connect to the Capella Cluster from Amazon EC2 running Red Hat Enterprise Linux using Couchbase PHP SDK
Published: 2022-01-01 19:03:10

This post will provide you step by step guidelines on how to setup connection with Capella Cluster from Amazon EC2 running Red Hat Enterprise Linux [RHEL 8]

## Steps are as follows:

**Spin up an EC2 instance** running Red Hat Enterprise Linux (`ami-0ba62214afa52bec7`)

**SSH into the EC2 instance.** The default user name for a RHEL AMI is ec2-user or root so make sure you are using the correct user name.
`$ ssh -i /path/my-key-pair.pem ec2-user@my-instance-public-dns-name`

Use below command to install nano editor
`$ sudo yum install nano`

**Install Couchbase C SDK (libcouchbase)** which is a pre-requisite to use Couchbase PHP SDK. To do so,
Create a `couchbase.repo` file in your `/etc/yum.repos.d` directory.

`$ cd /etc/yum.repos.d`
`$ sudo nano couchbase.repo`

paste the below content in `couchbase.repo` file

`[couchbase]
enabled = 1
name = libcouchbase package for centos8 x86_64
baseurl = https://packages.couchbase.com/clients/c/repos/rpm/el8/x86_64
gpgcheck = 1
gpgkey = https://packages.couchbase.com/clients/c/repos/rpm/couchbase.key`

Now, the repository has been configured, refresh the cache by using below command
`$ sudo yum check-update`
`$ sudo yum search libcouchbase`

Install libcouchbase3, and any other packages that you need for development:
`sudo yum install libcouchbase3 libcouchbase-devel libcouchbase3-tools`

**Enable EPEL and Remi Repository**

To install EPEL(Extra Packages for Enterprise Linux), run the below command:

`$ sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm`

To install Remi (a third-party repository that provides a wide range of PHP versions for RedHat Enterprise Linux), run below command:

`$ sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm`

**Install PHP 7.4 on RHEL**
First, list the available php module by running this command
`$ sudo dnf module list php`

You should see remi-7.4 in the list. In order to enable it, run below command:
`$ sudo dnf module enable php:remi-7.4 -y`

**Install the php-devel and php-bear packages**
The `php-devel` package contains the files needed for building PHP extensions and `php-pear` package contains the basic PEAR components for reusable PHP components. 

Run the below commands to install both packages:
`$ sudo dnf install php`
`$ sudo yum install php-devel`
`$ sudo yum install php-pear`

**Install the Couchbase PHP SDK** using PHP distribution’s pecl command:
`$ pecl install couchbase`
`$ sudo pecl install https://packages.couchbase.com/clients/php/couchbase-3.2.2.tgz`

**Load the Couchbase SDK as an extension** 
Use below command to locate the php.ini file
`$ php --ini`

Insert a line in the php.ini file specifying the extension to be loaded; this should be in the [PHP] section.
`extension=couchbase.so`

Also, insert the json extension since The Couchbase SDK depends on the JSON module, which must be loaded before the SDK. To do so, you can add the below extension in php.ini file:
`extension=json.so`

Now, **add your ec2 instance public IP address to the allow list of Capella Cluster and run the below sample script to connect with Capella Cluster**

```
<?php
 $connectionString = "couchbases://<connect_string>?ssl=no_verify";
 $options = new \Couchbase\ClusterOptions();
 $options->credentials("<user>", "<password>");
 //$options->timeout(3000 /* milliseconds */);
 $cluster = new \Couchbase\Cluster($connectionString, $options);

 $opts = new \Couchbase\GetOptions();
 $opts->timeout(8000 /* milliseconds */);

 // get a bucket reference
 $bucket = $cluster->bucket("travel-sample");

 // get a default collection reference
 //$collection = $bucket->defaultCollection();

 // or for named collection
 $scope = $bucket->scope("_default");
 $collection = $scope->collection("_default");

 // upsert document
 $upsertResult = $collection->upsert("my-document", ["name" => "mike"]);

 // get document
 $getResult = $collection->get("my-document", $opts);

 echo "Results:\n";
 var_dump($getResult);
?>
```

where
`<connect_string>` : Your cluster WAN endpoint
`<user>, <password>` : your database username/password you created to give access to the cluster buckets
`"travel-sample"` : It is the sample bucket available in the Capella cluster to use. You could create your own bucket as well. Make sure that your database user has access to that bucket.

Hope the provided steps are helpful. Thank you.