A minimal, production-ready Dockerized Laravel microservice using gRPC and RoadRunner. This project enables you to publish and receive messages over gRPC with minimal dependencies—no full Laravel framework required. Logging is directed to Docker stdout for easy container monitoring.
- PHP 8.4 CLI (alpine or debian)
- gRPC via
spiral/roadrunner-grpc - Logging with
illuminate/logandmonolog - Minimal Laravel components:
support,log,config .proto-driven code generation (Dockerizedprotoc)- RoadRunner gRPC server & PHP worker
- Docker Compose for local development
- Docker & Docker Compose
protocand PHP plugins (optional if using Docker for codegen)grpcurl(optional, for testing)- PHP 8.4 extensions:
grpc,protobuf,sockets(included in Dockerfile)
grpc-service/
├── Dockerfile
├── docker-compose.yml
├── .rr.yaml
├── protos/
│ └── messages.proto
├── src/
│ ├── MessageService.php
│ └── MessageServiceInterface.php
├── app/
│ └── Grpc/ (auto-generated from .proto)
├── bootstrap.php
├── composer.json
├── composer.lock
└── README.md
git clone https://github.com/rxcod9/laravel-grpc-microservice.git
cd laravel-grpc-microserviceUse Dockerized namely/protoc-all:
docker run --rm \
-v "$PWD:/workspace" \
-w /workspace namely/protoc-all \
-f protos/messages.proto \
-l php \
-o app/GrpcThis generates:
MessageServiceInterface.phpMessageServiceClient.php- Message request/response classes
docker-compose up --buildThis will:
- Install PHP dependencies
- Compile and install gRPC extensions
- Start the RoadRunner worker and gRPC server
Example using grpcurl:
grpcurl -plaintext \
-proto protos/messages.proto \
-d '{"topic":"notifications","payload":"{\"event\":\"test\"}"}' \
localhost:50051 messages.MessageService/SendMessageExpected response:
{
"success": true,
"message": "Message processed"
}syntax = "proto3";
package messages;
service MessageService {
rpc SendMessage (MessageRequest) returns (MessageResponse);
}
message MessageRequest {
string topic = 1;
string payload = 2;
}
message MessageResponse {
bool success = 1;
string message = 2;
}rpc:
listen: tcp://0.0.0.0:6001
grpc:
listen: tcp://0.0.0.0:50051
proto:
- protos/messages.proto
workers:
command: "php bootstrap.php"
pool:
numWorkers: 2-
Install
grpc.soandprotobuf.soin Docker withpecl install grpc protobuf, or copy pre-built.sofiles for faster builds. -
Download the RoadRunner binary in Dockerfile:
RUN curl -Ls https://github.com/roadrunner-server/roadrunner/releases/download/v2025.1.2/roadrunner-2025.1.2-linux-amd64.tar.gz \ | tar -xz -C /usr/local/bin rr
{
"require": {
"spiral/roadrunner-grpc": "^2.6",
"illuminate/log": "^12.0",
"illuminate/support": "^12.0",
"illuminate/config": "^12.0",
"illuminate/container": "^12.0",
"illuminate/console": "^12.0",
"monolog/monolog": "^3.0"
},
"autoload": {
"psr-4": {
"App\\": "app/",
"Messages\\": "app/Grpc/Messages/",
"GPBMetadata\\": "app/Grpc/GPBMetadata/"
}
}
}docker-compose downMIT
For issues, bugs, or feature requests, open an issue on GitHub or contact the maintainer.