Skip to content

Latest commit

 

History

History
127 lines (92 loc) · 4.06 KB

configuration.md

File metadata and controls

127 lines (92 loc) · 4.06 KB

GRPC - Installation and Configuration

The GRPC protocol provides extremely efficient way of cross-service communication for distributed applications. The public toolkit include instruments to generate client and server code-bases for many languages allowing the developer to use the most optimal language for the task.

The default GRPC build includes pre-installed version of spiral/php-grpc library.

You will need to generate application key and certificate in order to make GRPC bundle work, see below how to do that.

You can read more about protobuf here.

Toolkit Installation

It is possible to run PHP application without any dependencies out of the box. However, in order to develop, debug and extend GRPC project you will need a number of applications.

Install Protoc

In order to compile .proto files into target language you will have to install the protoc compiler.

You can download the latest protoc binaries from https://github.com/protocolbuffers/protobuf/releases.

PHP Server Plugin

Download and install protoc-gen-php-grpc from spiral/php-grpc releases page. This plugin is require to generate service code for your applications.

Make sure that plugin is available in your PATH.

Install Protobuf extension (optional)

In order to achieve higher performance on larger messages make sure to install protobuf extension for PHP.

You can compile the extension manually or install it via PECL.

$ sudo pecl install protobuf

Note, in case of Segmentation Fault error try to install different protobuf library. We recommend using 3.10.0 at start.

$ sudo pecl install protobuf-3.10.0

Component Installation

To install the component in alternative bundles:

$ composer require spiral/php-grpc

Activate the component using bootloader Spiral\Bootloader\GRPC\GRPCBootloader:

protected const LOAD = [
    // ...
    \Spiral\Bootloader\GRPC\GRPCBootloader::class,
    // ...
];

Application Server

To enable the component in application server add the following configuration section:

grpc:
  listen: tcp://0.0.0.0:50051
  workers.command: "php app.php" 
    
  # read how to write proto files in next section
  proto: "proto/service.proto"

  # tls configuration is optional
  tls.key:  "app.key"
  tls.cert: "app.crt"

Watch the Service

You can control the memory consumption of GRPC workers same way as for other services:

limit:
  services:
    grpc.maxMemory: 100

Generate Certificate

It is possible to run GRPC without any encryption layer. However in other to secure our application we must issue proper server key and certificate. You can use any normal SSL certificate (for example issued by https://letsencrypt.org/) or issue it manually via OpenSSL.

To issue server key and certificate:

$ openssl req -newkey rsa:2048 -nodes -keyout app.key -x509 -days 365 -out app.crt

Make sure to use proper domain name or localhost, it will required to make your clients connect properly.

GRPC UI

Use https://github.com/fullstorydev/grpcui to connect to GRPC from the web browser. You will need to install Golang to compile the application:

$ go get github.com/fullstorydev/grpcui
$ go install github.com/fullstorydev/grpcui/cmd/grpcui

Example Application

You can install app-gprc skeleton application to play with GRPC services:

$ composer create-project spiral/app-grpc
$ cd app-grpc
$ openssl req -newkey rsa:2048 -nodes -keyout app.key -x509 -days 365 -out app.crt

Start the application:

$ ./spiral serve -v -d

To connect to GRPC endpoints from browser use the `` described above:

$ grpcui -insecure -import-path ./proto/ -proto service.proto localhost:50051