TOP云提供高性价比云服务器租用,有中国内地/港澳台、海外等全球各地节点,TOP云国内云服务器只要有域名备案号就能直接用,无须重复备案;港澳台及海外云服务器不用备案,购买之后直接使用,省时省力省心。价格实惠,续费同价,2核2G5M仅需27元每月,8核8G50M仅需66元每月,更多配置套餐请进入下面网址了解:
TOP云总站云服务器:https://topyun.vip/server/buy.html
TOP云C站云服务器:https://c.topyun.vip/cart
在云服务器上部署 gRPC 服务 涉及多个步骤,包括 开发 gRPC 服务端和客户端、配置 TLS 加密(可选)、使用负载均衡(如 Nginx)、容器化(如 Docker) 以及 云服务器部署(如阿里云、腾讯云、AWS)。下面是一个完整的部署流程:
1. 开发 gRPC 服务(以 Go 为例)
(1) 定义 gRPC 服务(.proto 文件)
创建一个 hello.proto 文件:
syntax = "proto3";
package hello;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
(2) 生成 gRPC 代码
使用 protoc 编译器生成 Go 代码:
# 安装 protoc 和 Go 插件
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
# 生成代码
protoc --go_out=. --go-grpc_out=. hello.proto
生成 hello.pb.go(消息结构)和 hello_grpc.pb.go(服务代码)。
(3) 实现 gRPC 服务端
创建 server.go:
package main
import (
"context"
"log"
"net"
pb "path/to/your/proto/package" // 替换为你的 proto 包路径
"google.golang.org/grpc"
)
type server struct {
pb.UnimplementedGreeterServer
}
func (s *server) SayHello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) {
return &pb.HelloReply{Message: "Hello, " + req.Name}, nil
}
func main() {
lis, err := net.Listen("tcp", ":50051")
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
pb.RegisterGreeterServer(s, &server{})
log.Println("gRPC server listening on :50051")
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
(4) 实现 gRPC 客户端(可选)
创建 client.go:
package main
import (
"context"
"log"
"os"
"time"
pb "path/to/your/proto/package" // 替换为你的 proto 包路径
"google.golang.org/grpc"
)
func main() {
conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure())
if err != nil {
log.Fatalf("did not connect: %v", err)
}
defer conn.Close()
c := pb.NewGreeterClient(conn)
name := "World"
if len(os.Args) > 1 {
name = os.Args[1]
}
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
r, err := c.SayHello(ctx, &pb.HelloRequest{Name: name})
if err != nil {
log.Fatalf("could not greet: %v", err)
}
log.Printf("Greeting: %s", r.Message)
}
2. 部署 gRPC 服务到云服务器
(1) 上传代码到云服务器
使用 scp 或 git 将代码上传到云服务器(如腾讯云、阿里云、AWS):
scp -r ./grpc-server user@your-server-ip:/home/user/grpc-server
(2) 安装依赖
在云服务器上安装 Go 环境(如果尚未安装):
# Ubuntu/Debian
sudo apt update
sudo apt install golang
# CentOS/RHEL
sudo yum install golang
(3) 运行 gRPC 服务
cd /home/user/grpc-server go run server.go
默认监听 :50051 端口。
3. 配置 TLS 加密(可选但推荐)
gRPC 默认支持 TLS 加密,可以防止中间人攻击。
(1) 生成 TLS 证书
# 生成 CA 证书
openssl req -x509 -newkey rsa:4096 -nodes -keyout ca.key -out ca.crt -days 365
# 生成服务器证书
openssl req -newkey rsa:4096 -nodes -keyout server.key -out server.csr
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365
(2) 修改服务端代码支持 TLS
creds, err := credentials.NewServerTLSFromFile("server.crt", "server.key")
if err != nil {
log.Fatalf("failed to load TLS: %v", err)
}
s := grpc.NewServer(grpc.Creds(creds))
(3) 修改客户端代码支持 TLS
creds, err := credentials.NewClientTLSFromFile("ca.crt", "")
if err != nil {
log.Fatalf("failed to load TLS: %v", err)
}
conn, err := grpc.Dial("your-server-ip:50051", grpc.WithTransportCredentials(creds))
4. 使用 Nginx 反向代理(可选)
如果希望 gRPC 服务通过 HTTP/1.1 访问(如浏览器调试),可以使用 Nginx 作为反向代理。
(1) 安装 Nginx
# Ubuntu/Debian
sudo apt install nginx
# CentOS/RHEL
sudo yum install nginx
(2) 配置 Nginx 支持 gRPC
编辑 /etc/nginx/nginx.conf:
http { server { listen 80; server_name your-domain.com; location / { grpc_pass grpc://localhost:50051; } } }
重启 Nginx:
sudo systemctl restart nginx
5. 使用 Docker 容器化部署(可选)
(1) 创建 Dockerfile
FROM golang:1.20
WORKDIR /app
COPY . .
RUN go mod download
RUN go build -o grpc-server .
EXPOSE 50051
CMD ["./grpc-server"]
(2) 构建并运行 Docker 容器
docker build -t grpc-server . docker run -d -p 50051:50051 grpc-server
6. 云服务器安全配置
开放端口:确保云服务器安全组开放 50051(gRPC 默认端口)或 80/443(如果使用 Nginx)。
防火墙:
sudo ufw allow 50051/tcp
使用 HTTPS(推荐):如果通过 Nginx 暴露 gRPC,建议配置 SSL 证书(如 Let's Encrypt)。
7. 测试 gRPC 服务
(1) 使用 grpcurl 测试
安装 grpcurl:
go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest
测试服务:
grpcurl -plaintext your-server-ip:50051 list grpcurl -plaintext -d '{"name": "World"}' your-server-ip:50051 hello.Greeter/SayHello
(2) 使用客户端程序测试
go run client.go World
总结
步骤 | 操作 |
---|---|
1. 开发 gRPC 服务 | 定义 .proto 文件,生成代码,实现服务端和客户端 |
2. 部署到云服务器 | 上传代码,安装 Go,运行服务 |
3. 配置 TLS | 生成证书,修改服务端和客户端支持加密 |
4. 使用 Nginx 反向代理 | 可选,支持 HTTP/1.1 访问 |
5. 容器化(可选) | 使用 Docker 部署 |
6. 安全配置 | 开放端口,配置防火墙,启用 HTTPS |
这样,你的 gRPC 服务就可以在云服务器上安全、高效地运行了! 🚀