完全基于docker部署一个php通过rpc访问golang的环境。
基本架构
我们用PHP的Laravel框架来实现一个用户登录的Restful Api,地址为:
POST /user/login
返回信息为用户Id以及JWT token。
Golang用来实现两个服务,一个是用户信息服务,一个是登录的统计服务,PHP通过gRPC与Golang通讯。
最终部署完成后,共有4个docker的container,分别是:
- Nginx服务
- PHP-FPM服务
- 用户信息服务
- 登录统计服务
详细步骤
- 本地环境准备
我的home目录是/home/anakin
apt install protobuf
apt install composer
mkdir -p www/demo
mkdir www/conf.d
mkdir www/phpini
进入www目录,下载protobuf的代码,我们要用到其中的一个工具:
git clone https://github.com/grpc/grpc.git
进入www/demo目录,创建Laravel项目:
composer create-project laravel/laravel demo
composer require grpc/grpc
稍后我们再来写业务代码。
进入www/conf.d,编写nginx-host.conf,用来解析PHP的服务,内容如下:
server {
listen 80;
server_name 192.168.32.131;
set $root_path '/var/www/html/public';
root $root_path;
index index.php index.html index.htm;
try_files $uri $uri/ @rewrite;
location @rewrite {
rewrite ^/(.*)$ /index.php?_url=/$1;
}
location ~ \.php {
fastcgi_pass 192.168.32.131:9000;
# fastcgi_pass unix:///run/php/php7.2-fpm.sock;
fastcgi_index /index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {