Server skeleton for Ruby

  • This guide outlines the necessary steps to set up a Ruby-based gRPC server, including the required gems: google-protobuf and grpc.

  • You'll need to download the service definition file (booking_service.proto) and organize it within a specific directory structure that includes certificates, lib, protos, and server.rb.

  • Generating the necessary Ruby libraries from the service definition file using the grpc_tools_ruby_protoc command is required to implement the server.

  • The server can be initially tested without TLS using the command ruby server.rb --disable_tls, but this is not recommended for production environments.

  • Enabling TLS in production requires configuring the server with server.pem, server.key, and trusted_client_roots.pem files within the certificates directory, to ensure secure communication.

Prerequisites

Gems required for the server implementation:

  • google-protobuf (3.2.X used in this tutorial)
  • grpc (1.2.X used in this tutorial)

Download the service definition and create this directory structure:

[base_dir]
├── certificates
├── lib
├── protos
    └── booking_service.proto
└── server.rb

Generate Ruby libraries from the interface description:

$ cd [base_dir]
$ grpc_tools_ruby_protoc -I protos --ruby_out=lib --grpc_out=lib protos/booking_service.proto

Implement the server

If you need the skeleton code, ask a Google POC.

Test the server without TLS

For initial testing, TLS can be disabled:

$ cd [base_dir]
$ ruby server.rb --disable_tls

This is unsuitable for production use!

Configure production certificates

To enable TLS on the server, the following files are required:

  • certificates/server.pem the certificate chain for the server in in PEM format
  • certificates/server.key the private key for the server certificate chain
  • certificates/trusted_client_roots.pem the root certificates that are trusted when authenticating clients

The set of trusted client root certificates is used when authenticating the client. You can choose to obtain this set of trusted roots from an authority like Mozilla or install the set of roots currently recommended by the Google Internet Authority G2. In the latter case, you may have to manually update the root certificate at times.

Final directory structure

[base_dir]
├── certificates
    ├── server.pem
    ├── server.key
    └── trusted_client_roots.pem
├── lib
    ├── booking_service_pb.rb
    └── booking_service_services_pb.rb
├── protos
    └── booking_service.proto
└── server.rb